use of org.eclipse.wst.dtd.core.internal.emf.DTDFactory in project webtools.sourceediting by eclipse.
the class DTDModelBuilder method createOrFindElement.
/**
* Find the real element that is referenced by the current element
*/
private DTDElement createOrFindElement(String name, Object obj) {
// DTDElement aElement = getDTDFile().findElement(name);
DTDElement aElement = (DTDElement) dtdUtil.getElementPool().get(name);
if (aElement != null) {
return aElement;
}
// $NON-NLS-1$
String errorMsg = DTDCoreMessages._ERROR_UNDECLARED_ELEMENT_1;
// $NON-NLS-1$ //$NON-NLS-2$
errorMsg += "\"" + name + "\"";
// $NON-NLS-1$
errorMsg += DTDCoreMessages._UI_ERRORPART_UNDECLARED_ELEMENT_2;
ErrorMessage dtdError = new ErrorMessage();
dtdError.setErrorMessage(errorMsg);
addErrorMessage(dtdError, obj);
// System.out.println(errorMsg);
// setDTDErrorMessage(errorMsg);
getDTDFile().setParseError(true);
//
// Create an empty element for the reference to make it valid
//
DTDFactory factory = getFactory();
DTDElement dtdelement = factory.createDTDElement();
dtdelement.setName(name);
DTDEmptyContent emptyContent = factory.createDTDEmptyContent();
dtdelement.setContent(emptyContent);
getDTDFile().getDTDObject().add(dtdelement);
dtdUtil.getElementPool().put(name, dtdelement);
return dtdelement;
}
use of org.eclipse.wst.dtd.core.internal.emf.DTDFactory in project webtools.sourceediting by eclipse.
the class DTDModelBuilder method processGroupContent.
/**
* Add a new group to the current group
*
* @param parent -
* the parent node for this group element
* @param op1Node -
* the group e.g. (a,b)
* @param op2Node -
* set only if called by processCM1op e.g. (a,b)+
*/
void processGroupContent(DTDGroupContent parent, CMGroupNode grpNode) {
Enumeration children = grpNode.getChildren().elements();
DTDFactory factory = getFactory();
while (children.hasMoreElements()) {
CMNode cnode = (CMNode) children.nextElement();
if (cnode instanceof CMGroupNode) {
CMGroupNode gNode = (CMGroupNode) cnode;
DTDGroupContent groupContent = factory.createDTDGroupContent();
DTDGroupKind groupKind = DTDGroupKind.get(computeMofGroupKind(gNode.getGroupKind()));
groupContent.setGroupKind(groupKind);
DTDOccurrenceType occurrenceType = DTDOccurrenceType.get(computeMofOccurrence(gNode));
groupContent.setOccurrence(occurrenceType);
parent.getContent().add(groupContent);
processGroupContent(groupContent, gNode);
} else if (cnode instanceof CMBasicNode) {
CMBasicNode n = (CMBasicNode) cnode;
if (n.getType() == CMNodeType.PCDATA) {
// Create a DTDPCDataContent for a leaf PCData node
//
DTDPCDataContent pcData = factory.createDTDPCDataContent();
// Add #PCDATA to the Group, i.e Mixed content model
parent.getContent().add(pcData);
}
} else if (cnode instanceof CMReferenceNode) {
CMReferenceNode rn = (CMReferenceNode) cnode;
if (rn.getType() == CMNodeType.ELEMENT_REFERENCE) {
// System.out.println("CM Element Ref name: " +
// rn.getName());
//
// Create an DTDElementReference and set its referenced
// element
//
DTDElementReferenceContent elemRef = factory.createDTDElementReferenceContent();
//
// Find the real element for this element references
// If the real element does not yet exist, create it
//
DTDElement anElement = createOrFindElement(rn.getName(), elemRef);
elemRef.setReferencedElement(anElement);
DTDOccurrenceType occurrenceType = DTDOccurrenceType.get(computeMofOccurrence(rn));
elemRef.setOccurrence(occurrenceType);
// Add DTDElementReference to the Group
parent.getContent().add(elemRef);
} else // PE Reference
{
String entityName = rn.getName().trim();
// System.out.println("CM PE Ref name: " + entityName);
DTDEntity anEntity = (DTDEntity) dtdUtil.getPEPool().get(entityName);
if (anEntity != null) {
//
// Create an DTDEntityReference and set its referenced
// element
//
DTDEntityReferenceContent enRef = factory.createDTDEntityReferenceContent();
enRef.setElementReferencedEntity(anEntity);
DTDOccurrenceType occurrenceType = DTDOccurrenceType.get(computeMofOccurrence(rn));
enRef.setOccurrence(occurrenceType);
// Add DTDEntityReference to the Group
parent.getContent().add(enRef);
}
}
}
}
}
Aggregations