blob: a710eab4a51820bfa3908cc00ff0056aa1d232b6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.html.core.internal.modelquery;
import java.util.Iterator;
import org.eclipse.wst.html.core.internal.contentmodel.HTMLCMDocumentFactory;
import org.eclipse.wst.html.core.internal.contentmodel.ssi.SSICMDocumentFactory;
import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNamespace;
import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;
/**
*/
class CMDocumentForBuddySystem extends CMNodeBuddySystem implements CMDocument {
private static CMDocument getHTMLCMDocument() {
return HTMLCMDocumentFactory.getCMDocument(CMDocType.HTML_DOC_TYPE);
}
class Elements extends CMNamedNodeMapForBuddySystem {
public Elements(CMNamedNodeMap elements, boolean isXHTML) {
super(isXHTML);
makeBuddySystem(elements);
addSSIDecls();
}
protected String getKeyName(CMNode original) {
CMElementDeclaration edecl = getDecl(original);
if (edecl == null)
return null;
return edecl.getElementName();
}
protected CMNode createBuddySystem(CMNode original) {
CMElementDeclaration edecl = getDecl(original);
return new CMElementDeclarationBuddySystem(edecl, isXHTML());
}
private CMElementDeclaration getDecl(CMNode cmnode) {
if (cmnode == null)
return null;
if (cmnode.getNodeType() != CMNode.ELEMENT_DECLARATION)
return null;
return (CMElementDeclaration) cmnode;
}
private void addSSIDecls() {
CMDocument ssi = SSICMDocumentFactory.getCMDocument();
if (ssi == null)
return;
CMNamedNodeMap elements = ssi.getElements();
Iterator i = elements.iterator();
while (i.hasNext()) {
CMElementDeclaration decl = (CMElementDeclaration) i.next();
if (decl == null)
continue;
put(decl.getElementName(), decl);
}
}
}
private Elements elements = null;
public CMDocumentForBuddySystem(CMDocument self, boolean isXHTML) {
super(self, getHTMLCMDocument(), isXHTML);
}
/*
* @see CMDocument#getElements()
*/
public CMNamedNodeMap getElements() {
if (elements != null)
return elements;
CMDocument cmdoc = getSelf();
if (cmdoc == null)
return null;
elements = new Elements(cmdoc.getElements(), isXHTML);
return elements;
}
/*
* @see CMDocument#getEntities()
*/
public CMNamedNodeMap getEntities() {
CMDocument cmdoc = getSelf();
if (cmdoc == null)
return null;
return cmdoc.getEntities();
}
/*
* @see CMDocument#getNamespace()
*/
public CMNamespace getNamespace() {
CMDocument cmdoc = getSelf();
if (cmdoc == null)
return null;
return cmdoc.getNamespace();
}
private CMDocument getSelf() {
if (self.getNodeType() != CMNode.DOCUMENT)
return null;
return (CMDocument) self;
}
}