Search in sources :

Example 6 with XSDModelGroup

use of org.eclipse.xsd.XSDModelGroup in project tmdm-studio-se by Talend.

the class XSDGenerateHTML method loadAndPrint.

/**
 * Load the XML Schema file and print the documentation based on it.
 *
 * @param xsdFile the name of an XML Schema file.
 */
public void loadAndPrint(String xsdFile) throws Exception {
    XSDFactory xsdFactory = XSDFactory.eINSTANCE;
    // Create a resource set and load the main schema file into it.
    // 
    ResourceSet resourceSet = new ResourceSetImpl();
    XSDResourceImpl xsdResource = (XSDResourceImpl) resourceSet.getResource(URI.createFileURI(xsdFile), true);
    XSDSchema xsdSchema = xsdResource.getSchema();
    // $NON-NLS-1$
    String elementContentHeaderDocumentation = getContentDocumentation("element-header");
    if (elementContentHeaderDocumentation != null) {
        System.out.println(elementContentHeaderDocumentation);
    }
    List all = new ArrayList(xsdSchema.getElementDeclarations());
    // $NON-NLS-1$
    XSDElementDeclaration simpleContent = xsdSchema.resolveElementDeclaration("simpleContent");
    // $NON-NLS-1$
    XSDElementDeclaration complexContent = xsdSchema.resolveElementDeclaration("complexContent");
    for (int i = 0; i <= 1; ++i) {
        for (int j = 0; j <= 1; ++j) {
            XSDElementDeclaration parentElement = (i == 0 ? complexContent : simpleContent);
            XSDComplexTypeDefinition xsdComplexTypeDefinition = (XSDComplexTypeDefinition) parentElement.getTypeDefinition();
            XSDElementDeclaration specialElementDeclaration = (XSDElementDeclaration) ((XSDParticle) ((XSDModelGroup) ((XSDParticle) ((XSDModelGroup) ((XSDParticle) (xsdComplexTypeDefinition.getContentType())).getTerm()).getParticles().get(1)).getTerm()).getParticles().get(j)).getTerm();
            all.add(specialElementDeclaration);
            specialAnchorMap.put(specialElementDeclaration, parentElement);
        }
    }
    all = XSDNamedComponentImpl.sortNamedComponents(all);
    for (Iterator i = all.iterator(); i.hasNext(); ) {
        XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration) i.next();
        XSDElementDeclaration parentElementDeclaration = (XSDElementDeclaration) specialAnchorMap.get(xsdElementDeclaration);
        String elementDeclarationName = xsdElementDeclaration.getName();
        String key = // $NON-NLS-1$ //$NON-NLS-2$
        (parentElementDeclaration == null ? "" : parentElementDeclaration.getName() + "::") + elementDeclarationName;
        String elementDeclarationMarkup = getElementDeclarationMarkup(key);
        // $NON-NLS-1$
        System.out.print("<h2>");
        System.out.print(elementDeclarationName.substring(0, 1).toUpperCase());
        System.out.print(elementDeclarationName.substring(1));
        // $NON-NLS-1$
        System.out.println("</h2>");
        // $NON-NLS-1$
        System.out.println("<div class='reprdef'>");
        // $NON-NLS-1$
        System.out.println("<table cols=1 width='100%'><tr><td>");
        System.out.print(// $NON-NLS-1$
        "<div class='reprHeader'><span class='reprdef'>XML&nbsp;Representation&nbsp;Summary:&nbsp;</span><code>");
        // $NON-NLS-1$ //$NON-NLS-2$
        System.out.print("<a name='" + getLocalAnchor(xsdElementDeclaration) + "'>");
        System.out.print(getStandardLink(xsdElementDeclaration));
        System.out.print(elementDeclarationName);
        // $NON-NLS-1$
        System.out.print("</a></a></code>");
        // $NON-NLS-1$
        System.out.print("&nbsp;Element&nbsp;Information&nbsp;Item&nbsp;");
        if (parentElementDeclaration != null) {
            // $NON-NLS-1$
            System.out.print("<small>(");
            // $NON-NLS-1$ //$NON-NLS-2$
            System.out.print("<a href='#" + getLocalAnchor(parentElementDeclaration) + "'>");
            System.out.print(parentElementDeclaration.getName());
            // $NON-NLS-1$
            System.out.print("</a>)</small>");
        } else if ("restriction".equals(elementDeclarationName)) {
            // $NON-NLS-1$
            // $NON-NLS-1$
            System.out.print("<small>(simpleType)</small>");
        }
        // $NON-NLS-1$
        System.out.println("</div>");
        // $NON-NLS-1$
        System.out.println("<div class='reprBody'>");
        if (elementDeclarationMarkup != null) {
            // $NON-NLS-1$ //$NON-NLS-2$
            System.out.print("<div class='" + elementDeclarationMarkup + "'>");
        }
        // $NON-NLS-1$
        System.out.print("<tt>&lt;");
        System.out.print(elementDeclarationName);
        // $NON-NLS-1$
        System.out.print("</tt>");
        String componentLinks = getComponentLinks(xsdElementDeclaration);
        if (componentLinks != null) {
            System.out.print(componentLinks);
        }
        // $NON-NLS-1$
        System.out.println("<br>");
        StringBuffer attributeDocumentationBuffer = new StringBuffer();
        Map repeatedDocumentationMap = new HashMap();
        XSDTypeDefinition xsdTypeDefinition = xsdElementDeclaration.getTypeDefinition();
        XSDComplexTypeDefinition generalType = xsdSchema.resolveComplexTypeDefinitionURI(xsdElementDeclaration.getURI());
        if (generalType.getContainer() != null) {
            xsdTypeDefinition = generalType;
        }
        if (xsdTypeDefinition instanceof XSDSimpleTypeDefinition) {
            // $NON-NLS-1$
            System.out.println("<tt>></tt><br>");
        } else if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
            XSDComplexTypeDefinition xsdComplexTypeDefinition = (XSDComplexTypeDefinition) xsdTypeDefinition;
            for (Iterator attributeUses = xsdComplexTypeDefinition.getAttributeUses().iterator(); attributeUses.hasNext(); ) {
                XSDAttributeUse xsdAttributeUse = (XSDAttributeUse) attributeUses.next();
                XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
                String attributeDeclarationName = xsdAttributeDeclaration.getName();
                // $NON-NLS-1$
                System.out.print("<tt>&nbsp;&nbsp;");
                if (xsdAttributeDeclaration.getTargetNamespace() != null) {
                    // $NON-NLS-1$
                    System.out.print("xml:");
                }
                String attributeDeclarationMarkup = null;
                String attributeDeclarationDocumentation = null;
                if (!"ignored".equals(elementDeclarationMarkup)) {
                    // $NON-NLS-1$
                    attributeDeclarationMarkup = getAttributeDeclarationMarkup(attributeDeclarationName);
                    if (attributeDeclarationMarkup == null) {
                        attributeDeclarationMarkup = getAttributeDeclarationMarkup(// $NON-NLS-1$
                        elementDeclarationName + "." + attributeDeclarationName);
                    }
                    attributeDeclarationDocumentation = getAttributeDeclarationDocumentation(attributeDeclarationName);
                    if (attributeDeclarationDocumentation == null) {
                        attributeDeclarationDocumentation = getAttributeDeclarationDocumentation(// $NON-NLS-1$
                        elementDeclarationName + "." + attributeDeclarationName);
                    }
                }
                if (attributeDeclarationDocumentation != null) {
                    Integer oldInsertIndex = (Integer) repeatedDocumentationMap.get(attributeDeclarationDocumentation);
                    if (oldInsertIndex != null) {
                        // $NON-NLS-1$
                        String insertion = "<br>" + attributeDeclarationName;
                        attributeDocumentationBuffer.insert(oldInsertIndex.intValue(), insertion);
                        repeatedDocumentationMap.put(attributeDeclarationDocumentation, new Integer(oldInsertIndex.intValue() + insertion.length()));
                    } else {
                        if (attributeDocumentationBuffer.length() == 0) {
                            // $NON-NLS-1$
                            attributeDocumentationBuffer.append("<table cols=2 width='100%'>\n");
                            attributeDocumentationBuffer.append(// $NON-NLS-1$
                            "<tr>\n<th width=25% valign=top align=left><b>Attribute</b></th>\n");
                            attributeDocumentationBuffer.append(// $NON-NLS-1$
                            "<th width=75% valign=top align=left><b>Description</b></th>\n</tr>\n");
                        }
                        // $NON-NLS-1$
                        attributeDocumentationBuffer.append("<tr><td><b>");
                        if (attributeDeclarationMarkup != null) {
                            // $NON-NLS-1$ //$NON-NLS-2$
                            attributeDocumentationBuffer.append("<span class='" + attributeDeclarationMarkup + "'>");
                        }
                        attributeDocumentationBuffer.append(attributeDeclarationName);
                        int insertIndex = attributeDocumentationBuffer.length();
                        if (attributeDeclarationMarkup != null) {
                            // $NON-NLS-1$
                            attributeDocumentationBuffer.append("</span>");
                        }
                        // $NON-NLS-1$
                        attributeDocumentationBuffer.append("</b></td>\n<td valign=top>\n");
                        attributeDocumentationBuffer.append(attributeDeclarationDocumentation);
                        // $NON-NLS-1$
                        attributeDocumentationBuffer.append("</td></tr>");
                        repeatedDocumentationMap.put(attributeDeclarationDocumentation, new Integer(insertIndex));
                    }
                }
                if (attributeDeclarationMarkup != null) {
                    // $NON-NLS-1$ //$NON-NLS-2$
                    System.out.print("<span class='" + attributeDeclarationMarkup + "'>");
                }
                if (xsdAttributeUse.isRequired()) {
                    // $NON-NLS-1$
                    System.out.print("<b>");
                    System.out.print(attributeDeclarationName);
                    // $NON-NLS-1$
                    System.out.print("</b>");
                } else {
                    System.out.print(attributeDeclarationName);
                }
                if (attributeDeclarationMarkup != null) {
                    // $NON-NLS-1$
                    System.out.print("</span>");
                }
                // $NON-NLS-1$
                System.out.print("&nbsp;=&nbsp;</tt>");
                XSDSimpleTypeDefinition xsdSimpleTypeDefinition = xsdAttributeDeclaration.getTypeDefinition();
                printSimpleTypeDefinition(xsdSimpleTypeDefinition);
                if (xsdAttributeUse.getLexicalValue() != null) {
                    // $NON-NLS-1$
                    System.out.print("&nbsp;:&nbsp;");
                    if ("".equals(xsdAttributeUse.getLexicalValue())) {
                        // $NON-NLS-1$
                        // $NON-NLS-1$
                        System.out.print("\"\"");
                    } else {
                        System.out.print(xsdAttributeUse.getLexicalValue());
                    }
                }
                if (attributeUses.hasNext()) {
                    // $NON-NLS-1$
                    System.out.println("<br>");
                }
            }
            if (xsdComplexTypeDefinition.getAttributeWildcard() != null) {
                // $NON-NLS-1$
                System.out.println("<br>");
                System.out.println(// $NON-NLS-1$
                "<span class='" + ALLOWS + // $NON-NLS-1$
                "'><tt><em>&nbsp;&nbsp;{&nbsp;any&nbsp;attributes&nbsp;with&nbsp;non-schema&nbsp;namespace&nbsp;.&nbsp;.&nbsp;.&nbsp;}</em></tt></span>");
            }
            // $NON-NLS-1$
            System.out.println("<tt>></tt><br>");
            if (xsdComplexTypeDefinition.getContentType() instanceof XSDParticle) {
                // $NON-NLS-1$
                System.out.print("<tt><em>&nbsp;&nbsp;Content:</em>&nbsp;");
                printParticle((XSDParticle) xsdComplexTypeDefinition.getContentType(), elementDeclarationMarkup);
                // $NON-NLS-1$
                System.out.print("</tt>");
            } else if (xsdComplexTypeDefinition.getContentType() instanceof XSDSimpleTypeDefinition) {
                // $NON-NLS-1$
                System.out.print("<b>***** simple</b>");
            } else {
                // $NON-NLS-1$
                System.out.print("<b>{ **** empty }</b>");
            }
            // $NON-NLS-1$
            System.out.println("<br>");
        }
        // $NON-NLS-1$
        System.out.print("<tt>&lt;/");
        System.out.print(elementDeclarationName);
        // $NON-NLS-1$
        System.out.println("></tt>");
        if (elementDeclarationMarkup != null) {
            // $NON-NLS-1$
            System.out.print("</div>");
        }
        // $NON-NLS-1$
        System.out.println("</div>");
        String elementDeclarationDocumentation = getElementDeclarationDocumentation(key);
        if (elementDeclarationDocumentation != null) {
            // $NON-NLS-1$
            System.out.println("<div class='reprBody'>");
            System.out.println(elementDeclarationDocumentation);
            // $NON-NLS-1$
            System.out.println("</div>");
        }
        if (attributeDocumentationBuffer.length() > 0) {
            // $NON-NLS-1$
            System.out.println("<div class='reprBody'>");
            System.out.print(attributeDocumentationBuffer);
            // $NON-NLS-1$
            System.out.println("</table>");
            // $NON-NLS-1$
            System.out.println("</div>");
        }
        // $NON-NLS-1$
        System.out.println("</td></tr></table>");
        // $NON-NLS-1$
        System.out.println("</div>");
    }
    // System.out.println("<h1>Built-in Datatypes</h1>");
    // $NON-NLS-1$
    String typeContentHeaderDocumentation = getContentDocumentation("type-header");
    if (typeContentHeaderDocumentation != null) {
        System.out.println(typeContentHeaderDocumentation);
    }
    // $NON-NLS-1$
    System.out.println("<table border=true cols=3 width='100%'>");
    // $NON-NLS-1$
    System.out.println("<tr>");
    // $NON-NLS-1$
    System.out.println("<th width=33% valign=top align=left><b>Type</b></th>");
    // $NON-NLS-1$
    System.out.println("<th width=33% valign=top align=left><b>Properties&nbsp;&amp;&nbsp;Facets</b></th>");
    // $NON-NLS-1$
    System.out.println("<th width=34% valign=top align=left><b>Effective&nbsp;Value</b></th>");
    // $NON-NLS-1$
    System.out.println("</tr>");
    // $NON-NLS-1$
    XSDSimpleTypeDefinition anyTypeDefinition = xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("anyType");
    XSDSimpleTypeDefinition anySimpleTypeDefinition = xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition(// $NON-NLS-1$
    "anySimpleType");
    XSDSimpleTypeDefinition anyListTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition();
    anyListTypeDefinition.setVariety(XSDVariety.LIST_LITERAL);
    // $NON-NLS-1$
    anyListTypeDefinition.setName("anyListType");
    anyListTypeDefinition.setItemTypeDefinition(anySimpleTypeDefinition);
    xsdSchema.getContents().add(anyListTypeDefinition);
    // $NON-NLS-1$
    anyListTypeDefinition.getElement().setAttribute(XSDConstants.ID_ATTRIBUTE, "anyListType");
    XSDSimpleTypeDefinition anyUnionTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition();
    anyUnionTypeDefinition.setVariety(XSDVariety.UNION_LITERAL);
    // $NON-NLS-1$
    anyUnionTypeDefinition.setName("anyUnionType");
    anyUnionTypeDefinition.getMemberTypeDefinitions().add(anySimpleTypeDefinition);
    xsdSchema.getContents().add(anyUnionTypeDefinition);
    // $NON-NLS-1$
    anyUnionTypeDefinition.getElement().setAttribute(XSDConstants.ID_ATTRIBUTE, "anyUnionType");
    List allTypeDefinitions = new ArrayList(xsdSchema.getTypeDefinitions());
    allTypeDefinitions.add(0, anySimpleTypeDefinition);
    allTypeDefinitions.add(0, anyTypeDefinition);
    for (Iterator i = allTypeDefinitions.iterator(); i.hasNext(); ) {
        XSDTypeDefinition xsdTypeDefinition = (XSDTypeDefinition) i.next();
        if (xsdTypeDefinition instanceof XSDSimpleTypeDefinition && xsdTypeDefinition.getElement() != null && xsdTypeDefinition.getName().equals(xsdTypeDefinition.getElement().getAttribute(XSDConstants.ID_ATTRIBUTE))) {
            XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition) xsdTypeDefinition;
            // $NON-NLS-1$
            System.out.println("<tr>");
            // $NON-NLS-1$ //$NON-NLS-2$
            System.out.println("<a name='" + xsdSimpleTypeDefinition.getName() + "-simple-type'>");
            // $NON-NLS-1$
            System.out.println("<td>");
            boolean isPrimitive = XSDVariety.ATOMIC_LITERAL == xsdSimpleTypeDefinition.getVariety() && xsdSimpleTypeDefinition.getBaseTypeDefinition() == anySimpleTypeDefinition;
            if (isPrimitive) {
                // $NON-NLS-1$
                System.out.print("<b>");
            }
            System.out.print(getSimpleTypeDefinitionLink(xsdSimpleTypeDefinition));
            if (isPrimitive) {
                // $NON-NLS-1$
                System.out.print("</b>");
            }
            for (XSDSimpleTypeDefinition baseTypeDefinition = xsdSimpleTypeDefinition; ; baseTypeDefinition = baseTypeDefinition.getBaseTypeDefinition()) {
                String javaClass = (String) schemaTypeToJavaClassMap.get(baseTypeDefinition.getName());
                if (javaClass != null) {
                    // $NON-NLS-1$
                    System.out.println("<br>&nbsp;<br>");
                    if (baseTypeDefinition == xsdSimpleTypeDefinition) {
                        // ) //$NON-NLS-1$
                        System.out.print("<b>");
                    }
                    // $NON-NLS-1$
                    int dotIndex = javaClass.lastIndexOf(".");
                    // $NON-NLS-1$
                    System.out.print("<font size=-2>");
                    System.out.print(javaClass.substring(0, dotIndex + 1));
                    // $NON-NLS-1$
                    System.out.print("</font><br>&nbsp;&nbsp;");
                    System.out.print(javaClass.substring(dotIndex + 1));
                    if (baseTypeDefinition == xsdSimpleTypeDefinition) {
                        // (
                        // $NON-NLS-1$
                        System.out.print("<b>");
                    }
                    System.out.println();
                    break;
                }
            }
            // $NON-NLS-1$
            System.out.println("<br>");
            // $NON-NLS-1$
            System.out.println("</td>");
            // $NON-NLS-1$
            System.out.println("</a>");
            StringBuffer validFacets = new StringBuffer();
            StringBuffer effectiveFacetValues = new StringBuffer();
            // $NON-NLS-1$
            validFacets.append("variety<br>\n");
            effectiveFacetValues.append(xsdSimpleTypeDefinition.isSetVariety() ? // $NON-NLS-1$
            "<b>" + xsdSimpleTypeDefinition.getVariety() + "</b>" : // $NON-NLS-1$ //$NON-NLS-2$
            "<em>absent</em>");
            // $NON-NLS-1$
            effectiveFacetValues.append("<br>\n");
            // $NON-NLS-1$
            validFacets.append("base type definition<br>\n");
            XSDSimpleTypeDefinition baseTypeDefinition = xsdSimpleTypeDefinition.getBaseTypeDefinition();
            while (baseTypeDefinition.getName() == null) {
                baseTypeDefinition = baseTypeDefinition.getBaseTypeDefinition();
            }
            // $NON-NLS-1$
            effectiveFacetValues.append("<a href='#");
            effectiveFacetValues.append(baseTypeDefinition.getName());
            // $NON-NLS-1$
            effectiveFacetValues.append("-simple-type'>");
            effectiveFacetValues.append(baseTypeDefinition.getName());
            // $NON-NLS-1$
            effectiveFacetValues.append("</a><br>\n");
            // $NON-NLS-1$
            validFacets.append("ordered<br>\n");
            effectiveFacetValues.append(// $NON-NLS-1$ //$NON-NLS-2$
            "anyUnionType".equals(xsdSimpleTypeDefinition.getName()) ? // $NON-NLS-1$ //$NON-NLS-2$
            "*" : xsdSimpleTypeDefinition.getOrderedFacet().getValue().getName());
            // $NON-NLS-1$
            effectiveFacetValues.append("<br>\n");
            // $NON-NLS-1$
            validFacets.append("bounded<br>\n");
            effectiveFacetValues.append(// $NON-NLS-1$ //$NON-NLS-2$
            "anyUnionType".equals(xsdSimpleTypeDefinition.getName()) ? // $NON-NLS-1$ //$NON-NLS-2$
            "*" : // $NON-NLS-1$ //$NON-NLS-2$
            xsdSimpleTypeDefinition.getBoundedFacet().isValue() ? "true" : "false");
            // $NON-NLS-1$
            effectiveFacetValues.append("<br>\n");
            // $NON-NLS-1$
            validFacets.append("cardinality<br>\n");
            effectiveFacetValues.append(// $NON-NLS-1$ //$NON-NLS-2$
            "anyUnionType".equals(xsdSimpleTypeDefinition.getName()) ? // $NON-NLS-1$ //$NON-NLS-2$
            "*" : XSDCardinality.COUNTABLY_INFINITE_LITERAL == xsdSimpleTypeDefinition.getCardinalityFacet().getValue() ? "countably infinite" : // $NON-NLS-1$
            xsdSimpleTypeDefinition.getCardinalityFacet().getValue().getName());
            // $NON-NLS-1$
            effectiveFacetValues.append("<br>\n");
            // $NON-NLS-1$
            validFacets.append("numeric<br>\n");
            effectiveFacetValues.append(// $NON-NLS-1$ //$NON-NLS-2$
            "anyUnionType".equals(xsdSimpleTypeDefinition.getName()) ? // $NON-NLS-1$ //$NON-NLS-2$
            "*" : // $NON-NLS-1$ //$NON-NLS-2$
            xsdSimpleTypeDefinition.getNumericFacet().isValue() ? "true" : "false");
            // $NON-NLS-1$
            effectiveFacetValues.append("<br>\n");
            if (xsdSimpleTypeDefinition.getValidFacets().contains("length")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("length<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveLengthFacet() != null) {
                    XSDLengthFacet xsdLengthFacet = xsdSimpleTypeDefinition.getEffectiveLengthFacet();
                    if (xsdLengthFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdLengthFacet.getValue());
                    if (xsdLengthFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("minLength")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("minLength<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveMinLengthFacet() != null) {
                    XSDMinLengthFacet xsdMinLengthFacet = xsdSimpleTypeDefinition.getEffectiveMinLengthFacet();
                    if (xsdMinLengthFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdMinLengthFacet.getValue());
                    if (xsdMinLengthFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("maxLength")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("maxLength<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveMaxLengthFacet() != null) {
                    XSDMaxLengthFacet xsdMaxLengthFacet = xsdSimpleTypeDefinition.getEffectiveMaxLengthFacet();
                    if (xsdMaxLengthFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdMaxLengthFacet.getValue());
                    if (xsdMaxLengthFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("pattern")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("pattern<br>\n");
                if (xsdSimpleTypeDefinition.getEffectivePatternFacet() != null) {
                    // XSDPatternFacet xsdPatternFacet =
                    // xsdSimpleTypeDefinition.getEffectivePatternFacet();
                    // $NON-NLS-1$
                    effectiveFacetValues.append("*");
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("enumeration")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("enumeration<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveEnumerationFacet() != null) {
                    XSDEnumerationFacet xsdEnumerationFacet = xsdSimpleTypeDefinition.getEffectiveEnumerationFacet();
                    for (Iterator enumerators = xsdEnumerationFacet.getValue().iterator(); enumerators.hasNext(); ) {
                        String enumerator = (String) enumerators.next();
                        effectiveFacetValues.append(enumerator);
                        // $NON-NLS-1$
                        effectiveFacetValues.append("&nbsp;");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("whiteSpace")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("whiteSpace<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveWhiteSpaceFacet() != null) {
                    XSDWhiteSpaceFacet xsdWhiteSpaceFacet = xsdSimpleTypeDefinition.getEffectiveWhiteSpaceFacet();
                    if (xsdWhiteSpaceFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdWhiteSpaceFacet.getValue());
                    if (xsdWhiteSpaceFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("maxInclusive")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("maxInclusive<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveMaxFacet() instanceof XSDMaxInclusiveFacet) {
                    XSDMaxInclusiveFacet xsdMaxInclusiveFacet = (XSDMaxInclusiveFacet) xsdSimpleTypeDefinition.getEffectiveMaxFacet();
                    if (xsdMaxInclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdMaxInclusiveFacet.getValue());
                    if (xsdMaxInclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("maxExclusive")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("maxExclusive<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveMaxFacet() instanceof XSDMaxExclusiveFacet) {
                    XSDMaxExclusiveFacet xsdMaxExclusiveFacet = (XSDMaxExclusiveFacet) xsdSimpleTypeDefinition.getEffectiveMaxFacet();
                    if (xsdMaxExclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdMaxExclusiveFacet.getValue());
                    if (xsdMaxExclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("minInclusive")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("maxInclusive<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveMinFacet() instanceof XSDMinInclusiveFacet) {
                    XSDMinInclusiveFacet xsdMinInclusiveFacet = (XSDMinInclusiveFacet) xsdSimpleTypeDefinition.getEffectiveMinFacet();
                    if (xsdMinInclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdMinInclusiveFacet.getValue());
                    if (xsdMinInclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("minExclusive")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("maxExclusive<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveMinFacet() instanceof XSDMinExclusiveFacet) {
                    XSDMinExclusiveFacet xsdMinExclusiveFacet = (XSDMinExclusiveFacet) xsdSimpleTypeDefinition.getEffectiveMinFacet();
                    if (xsdMinExclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdMinExclusiveFacet.getValue());
                    if (xsdMinExclusiveFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("totalDigits")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("totalDigits<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveTotalDigitsFacet() != null) {
                    XSDTotalDigitsFacet xsdTotalDigitsFacet = xsdSimpleTypeDefinition.getEffectiveTotalDigitsFacet();
                    if (xsdTotalDigitsFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdTotalDigitsFacet.getValue());
                    if (xsdTotalDigitsFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            if (xsdSimpleTypeDefinition.getValidFacets().contains("fractionDigits")) {
                // $NON-NLS-1$
                // $NON-NLS-1$
                validFacets.append("fractionDigits<br>\n");
                if (xsdSimpleTypeDefinition.getEffectiveFractionDigitsFacet() != null) {
                    XSDFractionDigitsFacet xsdFractionDigitsFacet = xsdSimpleTypeDefinition.getEffectiveFractionDigitsFacet();
                    if (xsdFractionDigitsFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("<b>");
                    }
                    effectiveFacetValues.append(xsdFractionDigitsFacet.getValue());
                    if (xsdFractionDigitsFacet.isFixed()) {
                        // $NON-NLS-1$
                        effectiveFacetValues.append("</b>");
                    }
                }
                // $NON-NLS-1$
                effectiveFacetValues.append("<br>\n");
            }
            // $NON-NLS-1$
            System.out.println("<td>");
            System.out.print(validFacets);
            // $NON-NLS-1$
            System.out.println("</td>");
            // $NON-NLS-1$
            System.out.print("<td>");
            System.out.println(effectiveFacetValues);
            // $NON-NLS-1$
            System.out.println("</td>");
            // $NON-NLS-1$
            System.out.println("</tr>");
        }
    }
    // $NON-NLS-1$
    System.out.println("</table>");
    // $NON-NLS-1$
    String appendixContentHeaderDocumentation = getContentDocumentation("appendix-header");
    if (appendixContentHeaderDocumentation != null) {
        System.out.println(appendixContentHeaderDocumentation);
    }
}
Also used : XSDAttributeUse(org.eclipse.xsd.XSDAttributeUse) XSDFactory(org.eclipse.xsd.XSDFactory) XSDMinInclusiveFacet(org.eclipse.xsd.XSDMinInclusiveFacet) HashMap(java.util.HashMap) XSDModelGroup(org.eclipse.xsd.XSDModelGroup) ArrayList(java.util.ArrayList) XSDTypeDefinition(org.eclipse.xsd.XSDTypeDefinition) XSDLengthFacet(org.eclipse.xsd.XSDLengthFacet) XSDEnumerationFacet(org.eclipse.xsd.XSDEnumerationFacet) Iterator(java.util.Iterator) List(java.util.List) ArrayList(java.util.ArrayList) XSDComplexTypeDefinition(org.eclipse.xsd.XSDComplexTypeDefinition) XSDMinExclusiveFacet(org.eclipse.xsd.XSDMinExclusiveFacet) XSDParticle(org.eclipse.xsd.XSDParticle) XSDSchema(org.eclipse.xsd.XSDSchema) ResourceSetImpl(org.eclipse.emf.ecore.resource.impl.ResourceSetImpl) XSDFractionDigitsFacet(org.eclipse.xsd.XSDFractionDigitsFacet) XSDSimpleTypeDefinition(org.eclipse.xsd.XSDSimpleTypeDefinition) XSDWhiteSpaceFacet(org.eclipse.xsd.XSDWhiteSpaceFacet) XSDResourceImpl(org.eclipse.xsd.util.XSDResourceImpl) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) XSDMaxExclusiveFacet(org.eclipse.xsd.XSDMaxExclusiveFacet) XSDElementDeclaration(org.eclipse.xsd.XSDElementDeclaration) XSDTotalDigitsFacet(org.eclipse.xsd.XSDTotalDigitsFacet) XSDMinLengthFacet(org.eclipse.xsd.XSDMinLengthFacet) XSDMaxLengthFacet(org.eclipse.xsd.XSDMaxLengthFacet) XSDMaxInclusiveFacet(org.eclipse.xsd.XSDMaxInclusiveFacet) Map(java.util.Map) HashMap(java.util.HashMap) XSDAttributeDeclaration(org.eclipse.xsd.XSDAttributeDeclaration)

Example 7 with XSDModelGroup

use of org.eclipse.xsd.XSDModelGroup in project tmdm-studio-se by Talend.

the class XSDUtil method iterateParticle.

private static void iterateParticle(XSDParticle particle, IXPathSelectionFilter filter, Set<String> paths, String prefix) {
    XSDTerm term = particle.getTerm();
    if (term instanceof XSDModelGroup) {
        EList<XSDParticle> contents = ((XSDModelGroup) term).getContents();
        for (XSDParticle p : contents) {
            XSDTerm t = p.getTerm();
            if (t instanceof XSDElementDeclaration) {
                XSDElementDeclaration element = ((XSDElementDeclaration) t);
                FilterResult r = filter.check(p);
                if (r == FilterResult.ENABLE) {
                    String path = prefix + element.getName();
                    paths.add(path);
                } else {
                    XSDTypeDefinition type = element.getType();
                    if (type instanceof XSDComplexTypeDefinition) {
                        String nextPrefix = prefix + element.getName() + DIVIDE;
                        XSDParticle cp = type.getComplexType();
                        iterateParticle(cp, filter, paths, nextPrefix);
                    }
                }
            }
        }
    }
}
Also used : XSDModelGroup(org.eclipse.xsd.XSDModelGroup) XSDElementDeclaration(org.eclipse.xsd.XSDElementDeclaration) XSDTerm(org.eclipse.xsd.XSDTerm) FilterResult(com.amalto.workbench.dialogs.datamodel.IXPathSelectionFilter.FilterResult) XSDComplexTypeDefinition(org.eclipse.xsd.XSDComplexTypeDefinition) XSDParticle(org.eclipse.xsd.XSDParticle) XSDTypeDefinition(org.eclipse.xsd.XSDTypeDefinition)

Example 8 with XSDModelGroup

use of org.eclipse.xsd.XSDModelGroup in project tmdm-studio-se by Talend.

the class Util method getAllObject.

public static Object[] getAllObject(Object elem, List<Object> objList, IStructuredContentProvider provider) {
    Object[] elems = provider.getElements(elem);
    for (Object obj : elems) {
        if (obj == null) {
            continue;
        }
        if (obj instanceof XSDModelGroup || obj instanceof XSDElementDeclaration || obj instanceof XSDParticle || obj instanceof XSDTypeDefinition) {
            if (!objList.contains(obj)) {
                objList.add(obj);
                getAllObject(obj, objList, provider);
            }
        }
    }
    return objList.toArray();
}
Also used : XSDModelGroup(org.eclipse.xsd.XSDModelGroup) XSDElementDeclaration(org.eclipse.xsd.XSDElementDeclaration) XObject(com.sun.org.apache.xpath.internal.objects.XObject) TreeObject(com.amalto.workbench.models.TreeObject) EObject(org.eclipse.emf.ecore.EObject) XSDParticle(org.eclipse.xsd.XSDParticle) XSDTypeDefinition(org.eclipse.xsd.XSDTypeDefinition)

Example 9 with XSDModelGroup

use of org.eclipse.xsd.XSDModelGroup in project tmdm-studio-se by Talend.

the class Util method getComplexChilds.

/**
 * use the map from path to XSDParticle,path is separated by '/' or '//'
 */
private static Map<String, XSDParticle> getComplexChilds(String parentxpath, XSDComplexTypeDefinition ctype, boolean onlyTopLevel, final Set<Object> visited) throws Exception {
    Map<String, XSDParticle> childDecls = new HashMap<String, XSDParticle>();
    if (ctype.getContent() instanceof XSDParticle) {
        XSDParticleImpl particle = (XSDParticleImpl) ctype.getContent();
        if (particle.getTerm() instanceof XSDModelGroup) {
            XSDModelGroup group = (XSDModelGroup) particle.getTerm();
            EList<XSDParticle> particles = group.getParticles();
            for (XSDParticle part : particles) {
                if (part.getTerm() instanceof XSDElementDeclaration) {
                    XSDElementDeclaration el = (XSDElementDeclaration) part.getTerm();
                    if (el.getTypeDefinition() instanceof XSDSimpleTypeDefinition) {
                        // $NON-NLS-1$
                        String child = parentxpath.length() == 0 ? el.getName() : parentxpath + "/" + el.getName();
                        childDecls.put(child, part);
                    } else {
                        String complexTypeChildPath = parentxpath.length() == 0 ? "//" + el.getName() : // $NON-NLS-1$
                        parentxpath + "//" + // $NON-NLS-1$
                        el.getName();
                        childDecls.put(complexTypeChildPath, part);
                        if (!onlyTopLevel && el.getTypeDefinition() instanceof XSDComplexTypeDefinition) {
                            // $NON-NLS-1$
                            String child = parentxpath.length() == 0 ? el.getName() : parentxpath + "/" + el.getName();
                            childDecls.putAll(getChildElements(child, (XSDComplexTypeDefinition) el.getTypeDefinition(), onlyTopLevel, visited));
                        }
                    }
                }
            }
        }
    }
    return childDecls;
}
Also used : LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) XSDModelGroup(org.eclipse.xsd.XSDModelGroup) XSDElementDeclaration(org.eclipse.xsd.XSDElementDeclaration) XSDSimpleTypeDefinition(org.eclipse.xsd.XSDSimpleTypeDefinition) XSDParticleImpl(org.eclipse.xsd.impl.XSDParticleImpl) XSDComplexTypeDefinition(org.eclipse.xsd.XSDComplexTypeDefinition) XSDParticle(org.eclipse.xsd.XSDParticle)

Example 10 with XSDModelGroup

use of org.eclipse.xsd.XSDModelGroup in project tmdm-studio-se by Talend.

the class Util method updateReferenceToXSDTypeDefinition.

/**
 * update reference to newType
 *
 * @param elem
 * @param newType
 * @param provider
 */
public static void updateReferenceToXSDTypeDefinition(Object elem, XSDTypeDefinition newType, IStructuredContentProvider provider) {
    if (newType instanceof XSDComplexTypeDefinition) {
        updateChildrenReferenceToComplexType((XSDComplexTypeDefinition) newType);
    }
    List<Object> objList = new ArrayList<Object>();
    Object[] allNodes = getAllObject(elem, objList, provider);
    for (Object node : allNodes) {
        if (node instanceof XSDElementDeclaration) {
            XSDElementDeclaration xsdElem = (XSDElementDeclaration) node;
            if (xsdElem.getTypeDefinition() == newType) {
                xsdElem.setTypeDefinition(newType);
            }
        } else if (node instanceof XSDParticle) {
            XSDParticle particle = (XSDParticle) node;
            if (particle.getTerm() instanceof XSDModelGroup) {
                XSDModelGroup group = (XSDModelGroup) particle.getTerm();
                EList<XSDParticle> elist = group.getContents();
                for (XSDParticle pt : elist) {
                    if (pt.getContent() instanceof XSDElementDeclaration) {
                        if (((XSDElementDeclaration) pt.getContent()).getTypeDefinition() == newType) {
                            ((XSDElementDeclaration) pt.getContent()).setTypeDefinition(newType);
                        }
                    }
                }
            } else if (particle.getTerm() instanceof XSDElementDeclaration) {
                XSDElementDeclaration xsdElem = (XSDElementDeclaration) particle.getTerm();
                if (xsdElem.getTypeDefinition() == newType) {
                    xsdElem.setTypeDefinition(newType);
                }
            }
        }
    }
}
Also used : EList(org.eclipse.emf.common.util.EList) XSDModelGroup(org.eclipse.xsd.XSDModelGroup) XSDElementDeclaration(org.eclipse.xsd.XSDElementDeclaration) ArrayList(java.util.ArrayList) XObject(com.sun.org.apache.xpath.internal.objects.XObject) TreeObject(com.amalto.workbench.models.TreeObject) EObject(org.eclipse.emf.ecore.EObject) XSDComplexTypeDefinition(org.eclipse.xsd.XSDComplexTypeDefinition) XSDParticle(org.eclipse.xsd.XSDParticle)

Aggregations

XSDModelGroup (org.eclipse.xsd.XSDModelGroup)119 XSDParticle (org.eclipse.xsd.XSDParticle)93 XSDElementDeclaration (org.eclipse.xsd.XSDElementDeclaration)87 XSDComplexTypeDefinition (org.eclipse.xsd.XSDComplexTypeDefinition)76 ArrayList (java.util.ArrayList)33 XSDTypeDefinition (org.eclipse.xsd.XSDTypeDefinition)32 XSDTerm (org.eclipse.xsd.XSDTerm)28 XSDFactory (org.eclipse.xsd.XSDFactory)26 XSDSimpleTypeDefinition (org.eclipse.xsd.XSDSimpleTypeDefinition)26 Test (org.junit.Test)25 XSDSchema (org.eclipse.xsd.XSDSchema)23 XSDComplexTypeContent (org.eclipse.xsd.XSDComplexTypeContent)22 EList (org.eclipse.emf.common.util.EList)21 XSDAnnotation (org.eclipse.xsd.XSDAnnotation)20 XSDModelGroupDefinition (org.eclipse.xsd.XSDModelGroupDefinition)19 List (java.util.List)18 XSDIdentityConstraintDefinition (org.eclipse.xsd.XSDIdentityConstraintDefinition)18 Iterator (java.util.Iterator)16 XSDWildcard (org.eclipse.xsd.XSDWildcard)16 TreeObject (com.amalto.workbench.models.TreeObject)15