use of org.eclipse.wst.xml.core.internal.contentmodel.basic.CMNodeListImpl in project webtools.sourceediting by eclipse.
the class InferredGrammarFactory method createCMElementDeclaration.
public CMElementDeclaration createCMElementDeclaration(CMDocument cmDocument, Element element, boolean isLocal) {
String localName = element.getLocalName();
CMDocumentImpl cmDocumentImpl = (CMDocumentImpl) cmDocument;
CMNamedNodeMapImpl elementMap = isLocal ? (CMNamedNodeMapImpl) cmDocumentImpl.getLocalElementPool() : (CMNamedNodeMapImpl) cmDocumentImpl.getElements();
CMElementDeclarationImpl ed = (CMElementDeclarationImpl) elementMap.getNamedItem(localName);
if (ed == null) {
// System.out.println("create ed " + localName);
ed = new CMElementDeclarationImpl(cmDocument, localName);
ed.setInferred(true);
ed.setLocal(isLocal);
ed.setMaxOccur(1);
CMGroupImpl group = new CMGroupImpl(new CMNodeListImpl(), CMGroup.CHOICE);
group.setInferred(true);
group.setMinOccur(0);
group.setMaxOccur(-1);
ed.setContent(group);
elementMap.put(ed);
}
// lookup or create the attributes
//
NamedNodeMap attributeMap = element.getAttributes();
int attributeMapLength = attributeMap.getLength();
for (int i = 0; i < attributeMapLength; i++) {
Attr attr = (Attr) attributeMap.item(i);
CMAttributeDeclarationImpl ad = (CMAttributeDeclarationImpl) ed.getAttributeMap().getNamedItem(attr.getNodeName());
if (ad == null) {
// todo... use an attribute pool to be more efficient?
ad = new CMAttributeDeclarationImpl(attr.getNodeName(), CMAttributeDeclaration.OPTIONAL);
ad.setInferred(true);
ed.getAttributeMap().put(ad);
}
}
return ed;
}
use of org.eclipse.wst.xml.core.internal.contentmodel.basic.CMNodeListImpl in project webtools.sourceediting by eclipse.
the class InferredGrammarFactory method createCMContent.
public void createCMContent(CMDocument parentCMDocument, CMElementDeclaration parentEd, CMDocument childCMDocument, CMElementDeclaration childEd, boolean isLocal, String uri) {
// add element to the parent's content
// consider all content to be of the form (A | B | C)*
//
CMGroupImpl group = (CMGroupImpl) parentEd.getContent();
CMNodeListImpl groupChildNodeList = (CMNodeListImpl) group.getChildNodes();
if (parentCMDocument == childCMDocument) {
if (!groupChildNodeList.contains(childEd)) {
groupChildNodeList.add(childEd);
}
if (isLocal) {
CMNamedNodeMapImpl localElementMap = (CMNamedNodeMapImpl) parentEd.getLocalElements();
localElementMap.put(childEd);
}
} else {
CMAnyElement cmAnyElement = lookupOrCreateCMAnyElement((CMDocumentImpl) parentCMDocument, uri);
if (!groupChildNodeList.contains(cmAnyElement)) {
groupChildNodeList.add(cmAnyElement);
}
}
}
Aggregations