Search in sources :

Example 1 with XSElementDeclaration

use of org.apache.xerces.xs.XSElementDeclaration in project intellij-community by JetBrains.

the class XmlConstraintsTest method testXercesGrammar.

public void testXercesGrammar() throws Exception {
    XSModel xsModel = getXSModel("test.xml", "test.xsd");
    XSElementDeclaration elementDeclaration = xsModel.getElementDeclaration("a", "");
    XSComplexTypeDefinition typeDefinition = (XSComplexTypeDefinition) elementDeclaration.getTypeDefinition();
    CMBuilder cmBuilder = new CMBuilder(new CMNodeFactory());
    XSCMValidator validator = cmBuilder.getContentModel((XSComplexTypeDecl) typeDefinition, true);
    int[] ints = validator.startContentModel();
    Vector vector = validator.whatCanGoHere(ints);
    XSElementDecl o = (XSElementDecl) vector.get(0);
    assertEquals("b", o.getName());
}
Also used : CMBuilder(org.apache.xerces.impl.xs.models.CMBuilder) XSElementDeclaration(org.apache.xerces.xs.XSElementDeclaration) XSModel(org.apache.xerces.xs.XSModel) CMNodeFactory(org.apache.xerces.impl.xs.models.CMNodeFactory) XSElementDecl(org.apache.xerces.impl.xs.XSElementDecl) XSCMValidator(org.apache.xerces.impl.xs.models.XSCMValidator) Vector(java.util.Vector) XSComplexTypeDefinition(org.apache.xerces.xs.XSComplexTypeDefinition)

Example 2 with XSElementDeclaration

use of org.apache.xerces.xs.XSElementDeclaration in project intellij-community by JetBrains.

the class XmlConstraintsTest method testXercesForCompletion.

public void testXercesForCompletion() throws Exception {
    XSModel xsModel = getXSModel("testCompletion.xml", "test.xsd");
    PsiElement element = myFixture.getFile().findElementAt(getEditor().getCaretModel().getOffset());
    XmlTag tag = PsiTreeUtil.getParentOfType(element, XmlTag.class);
    assert tag != null;
    XSElementDeclaration elementDeclaration = xsModel.getElementDeclaration(tag.getLocalName(), tag.getNamespace());
    XSComplexTypeDefinition typeDefinition = (XSComplexTypeDefinition) elementDeclaration.getTypeDefinition();
    CMBuilder cmBuilder = new CMBuilder(new CMNodeFactory());
    XSCMValidator validator = cmBuilder.getContentModel((XSComplexTypeDecl) typeDefinition, true);
    int[] ints = validator.startContentModel();
    Vector vector = validator.whatCanGoHere(ints);
    XSElementDecl o = (XSElementDecl) vector.get(0);
    assertEquals("b", o.getName());
}
Also used : CMBuilder(org.apache.xerces.impl.xs.models.CMBuilder) XSElementDeclaration(org.apache.xerces.xs.XSElementDeclaration) XSModel(org.apache.xerces.xs.XSModel) CMNodeFactory(org.apache.xerces.impl.xs.models.CMNodeFactory) XSElementDecl(org.apache.xerces.impl.xs.XSElementDecl) XSCMValidator(org.apache.xerces.impl.xs.models.XSCMValidator) Vector(java.util.Vector) PsiElement(com.intellij.psi.PsiElement) XmlTag(com.intellij.psi.xml.XmlTag) XSComplexTypeDefinition(org.apache.xerces.xs.XSComplexTypeDefinition)

Example 3 with XSElementDeclaration

use of org.apache.xerces.xs.XSElementDeclaration in project winery by eclipse.

the class BackendUtils method deriveWPD.

/**
 * Derives Winery's Properties Definition from an existing properties definition
 *
 * @param ci     the entity type to try to modify the WPDs
 * @param errors the list to add errors to
 */
public static void deriveWPD(TEntityType ci, List<String> errors) {
    BackendUtils.LOGGER.trace("deriveWPD");
    PropertiesDefinition propertiesDefinition = ci.getPropertiesDefinition();
    QName element = propertiesDefinition.getElement();
    if (element == null) {
        BackendUtils.LOGGER.debug("only works for an element definition, not for types");
    } else {
        BackendUtils.LOGGER.debug("Looking for the definition of {" + element.getNamespaceURI() + "}" + element.getLocalPart());
        // fetch the XSD defining the element
        final XsdImportManager xsdImportManager = RepositoryFactory.getRepository().getXsdImportManager();
        Map<String, RepositoryFileReference> mapFromLocalNameToXSD = xsdImportManager.getMapFromLocalNameToXSD(new Namespace(element.getNamespaceURI(), false), false);
        RepositoryFileReference ref = mapFromLocalNameToXSD.get(element.getLocalPart());
        if (ref == null) {
            String msg = "XSD not found for " + element.getNamespaceURI() + " / " + element.getLocalPart();
            BackendUtils.LOGGER.debug(msg);
            errors.add(msg);
            return;
        }
        final Optional<XSModel> xsModelOptional = BackendUtils.getXSModel(ref);
        if (!xsModelOptional.isPresent()) {
            LOGGER.error("no XSModel found");
        }
        XSModel xsModel = xsModelOptional.get();
        XSElementDeclaration elementDeclaration = xsModel.getElementDeclaration(element.getLocalPart(), element.getNamespaceURI());
        if (elementDeclaration == null) {
            String msg = "XSD model claimed to contain declaration for {" + element.getNamespaceURI() + "}" + element.getLocalPart() + ", but it did not.";
            BackendUtils.LOGGER.debug(msg);
            errors.add(msg);
            return;
        }
        // go through the XSD definition and
        XSTypeDefinition typeDefinition = elementDeclaration.getTypeDefinition();
        if (typeDefinition instanceof XSComplexTypeDefinition) {
            XSComplexTypeDefinition cTypeDefinition = (XSComplexTypeDefinition) typeDefinition;
            XSParticle particle = cTypeDefinition.getParticle();
            if (particle == null) {
                BackendUtils.LOGGER.debug("XSD does not follow the requirements put by winery: Complex type does not contain particles");
            } else {
                XSTerm term = particle.getTerm();
                if (term instanceof XSModelGroup) {
                    XSModelGroup modelGroup = (XSModelGroup) term;
                    if (modelGroup.getCompositor() == XSModelGroup.COMPOSITOR_SEQUENCE) {
                        XSObjectList particles = modelGroup.getParticles();
                        int len = particles.getLength();
                        boolean everyThingIsASimpleType = true;
                        PropertyDefinitionKVList list = new PropertyDefinitionKVList();
                        if (len != 0) {
                            for (int i = 0; i < len; i++) {
                                XSParticle innerParticle = (XSParticle) particles.item(i);
                                XSTerm innerTerm = innerParticle.getTerm();
                                if (innerTerm instanceof XSElementDeclaration) {
                                    XSElementDeclaration innerElementDeclaration = (XSElementDeclaration) innerTerm;
                                    String name = innerElementDeclaration.getName();
                                    XSTypeDefinition innerTypeDefinition = innerElementDeclaration.getTypeDefinition();
                                    if (innerTypeDefinition instanceof XSSimpleType) {
                                        XSSimpleType xsSimpleType = (XSSimpleType) innerTypeDefinition;
                                        String typeNS = xsSimpleType.getNamespace();
                                        String typeName = xsSimpleType.getName();
                                        if (typeNS.equals(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
                                            PropertyDefinitionKV def = new PropertyDefinitionKV();
                                            def.setKey(name);
                                            // convention at WPD: use "xsd" as prefix for XML Schema Definition
                                            def.setType("xsd:" + typeName);
                                            list.add(def);
                                        } else {
                                            everyThingIsASimpleType = false;
                                            break;
                                        }
                                    } else {
                                        everyThingIsASimpleType = false;
                                        break;
                                    }
                                } else {
                                    everyThingIsASimpleType = false;
                                    break;
                                }
                            }
                        }
                        if (everyThingIsASimpleType) {
                            // everything went allright, we can add a WPD
                            WinerysPropertiesDefinition wpd = new WinerysPropertiesDefinition();
                            wpd.setIsDerivedFromXSD(Boolean.TRUE);
                            wpd.setElementName(element.getLocalPart());
                            wpd.setNamespace(element.getNamespaceURI());
                            wpd.setPropertyDefinitionKVList(list);
                            ModelUtilities.replaceWinerysPropertiesDefinition(ci, wpd);
                            BackendUtils.LOGGER.debug("Successfully generated WPD");
                        } else {
                            BackendUtils.LOGGER.debug("XSD does not follow the requirements put by winery: Not all types in the sequence are simple types");
                        }
                    } else {
                        BackendUtils.LOGGER.debug("XSD does not follow the requirements put by winery: Model group is not a sequence");
                    }
                } else {
                    BackendUtils.LOGGER.debug("XSD does not follow the requirements put by winery: Not a model group");
                }
            }
        } else {
            BackendUtils.LOGGER.debug("XSD does not follow the requirements put by winery: No Complex Type Definition");
        }
    }
}
Also used : XSTypeDefinition(org.apache.xerces.xs.XSTypeDefinition) XSObjectList(org.apache.xerces.xs.XSObjectList) PropertyDefinitionKV(org.eclipse.winery.model.tosca.kvproperties.PropertyDefinitionKV) XSParticle(org.apache.xerces.xs.XSParticle) XSTerm(org.apache.xerces.xs.XSTerm) QName(javax.xml.namespace.QName) WinerysPropertiesDefinition(org.eclipse.winery.model.tosca.kvproperties.WinerysPropertiesDefinition) Namespace(org.eclipse.winery.common.ids.Namespace) HasTargetNamespace(org.eclipse.winery.model.tosca.HasTargetNamespace) XSComplexTypeDefinition(org.apache.xerces.xs.XSComplexTypeDefinition) XSSimpleType(org.apache.xerces.impl.dv.XSSimpleType) RepositoryFileReference(org.eclipse.winery.common.RepositoryFileReference) WinerysPropertiesDefinition(org.eclipse.winery.model.tosca.kvproperties.WinerysPropertiesDefinition) PropertiesDefinition(org.eclipse.winery.model.tosca.TEntityType.PropertiesDefinition) XSElementDeclaration(org.apache.xerces.xs.XSElementDeclaration) XSModel(org.apache.xerces.xs.XSModel) PropertyDefinitionKVList(org.eclipse.winery.model.tosca.kvproperties.PropertyDefinitionKVList) XsdImportManager(org.eclipse.winery.repository.backend.xsd.XsdImportManager) XSModelGroup(org.apache.xerces.xs.XSModelGroup)

Example 4 with XSElementDeclaration

use of org.apache.xerces.xs.XSElementDeclaration in project iaf by ibissource.

the class ToXml method handleNode.

/**
 * Pushes node through validator.
 *
 * Must push all nodes through validatorhandler, recursively, respecting the alignment request.
 * Must set current=node before calling validatorHandler.startElement(), in order to get the right argument for the onStartElement / performAlignment callbacks.
 * @param node
 * @throws SAXException
 */
public void handleNode(C container, String name, String nodeNamespace) throws SAXException {
    if (DEBUG)
        log.debug("handleNode() name [" + name + "] namespace [" + nodeNamespace + "]");
    N rootNode = getRootNode(container);
    if (StringUtils.isEmpty(nodeNamespace)) {
        nodeNamespace = getNodeNamespaceURI(rootNode);
    }
    XSElementDeclaration elementDeclaration = findElementDeclarationForName(nodeNamespace, name);
    if (elementDeclaration == null) {
        throw new SAXException(MSG_CANNOT_NOT_FIND_ELEMENT_DECLARATION + " for [" + name + "] in namespace [" + nodeNamespace + "]");
    // if (DEBUG) log.debug("node ["+name+"] did not find elementDeclaration, assigning targetNamespace ["+getTargetNamespace()+"]");
    // nodeNamespace=getTargetNamespace();
    }
    handleElement(elementDeclaration, rootNode);
}
Also used : XSElementDeclaration(org.apache.xerces.xs.XSElementDeclaration) SAXException(org.xml.sax.SAXException)

Example 5 with XSElementDeclaration

use of org.apache.xerces.xs.XSElementDeclaration in project iaf by ibissource.

the class XmlAligner method getTypeDefinition.

public XSTypeDefinition getTypeDefinition(PSVIProvider psviProvider) {
    ElementPSVI elementPSVI = psviProvider.getElementPSVI();
    if (DEBUG)
        log.debug("getTypeDefinition() elementPSVI [" + ToStringBuilder.reflectionToString(elementPSVI) + "]");
    XSElementDeclaration elementDeclaration = elementPSVI.getElementDeclaration();
    if (DEBUG)
        log.debug("getTypeDefinition() elementPSVI element declaration [" + ToStringBuilder.reflectionToString(elementDeclaration) + "]");
    if (elementDeclaration == null) {
        return null;
    }
    XSTypeDefinition typeDefinition = elementDeclaration.getTypeDefinition();
    if (DEBUG)
        log.debug("getTypeDefinition() elementDeclaration typeDefinition [" + ToStringBuilder.reflectionToString(typeDefinition) + "]");
    return typeDefinition;
}
Also used : ElementPSVI(org.apache.xerces.xs.ElementPSVI) XSTypeDefinition(org.apache.xerces.xs.XSTypeDefinition) XSElementDeclaration(org.apache.xerces.xs.XSElementDeclaration)

Aggregations

XSElementDeclaration (org.apache.xerces.xs.XSElementDeclaration)12 XSModel (org.apache.xerces.xs.XSModel)5 XSParticle (org.apache.xerces.xs.XSParticle)5 CMBuilder (org.apache.xerces.impl.xs.models.CMBuilder)4 CMNodeFactory (org.apache.xerces.impl.xs.models.CMNodeFactory)4 XSCMValidator (org.apache.xerces.impl.xs.models.XSCMValidator)4 XSComplexTypeDefinition (org.apache.xerces.xs.XSComplexTypeDefinition)4 XSModelGroup (org.apache.xerces.xs.XSModelGroup)4 XSObjectList (org.apache.xerces.xs.XSObjectList)4 XSTerm (org.apache.xerces.xs.XSTerm)4 Vector (java.util.Vector)3 XSElementDecl (org.apache.xerces.impl.xs.XSElementDecl)3 XSTypeDefinition (org.apache.xerces.xs.XSTypeDefinition)3 SAXException (org.xml.sax.SAXException)3 XmlTag (com.intellij.psi.xml.XmlTag)2 XSWildcard (org.apache.xerces.xs.XSWildcard)2 Nullable (org.jetbrains.annotations.Nullable)2 PsiElement (com.intellij.psi.PsiElement)1 PsiFile (com.intellij.psi.PsiFile)1 XmlFile (com.intellij.psi.xml.XmlFile)1