// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package com.amalto.workbench.providers; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ITreePathLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.ViewerLabel; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.xsd.XSDAnnotation; import org.eclipse.xsd.XSDAttributeDeclaration; import org.eclipse.xsd.XSDAttributeGroupDefinition; import org.eclipse.xsd.XSDAttributeUse; import org.eclipse.xsd.XSDAttributeUseCategory; import org.eclipse.xsd.XSDComplexTypeContent; import org.eclipse.xsd.XSDComplexTypeDefinition; import org.eclipse.xsd.XSDCompositor; import org.eclipse.xsd.XSDConcreteComponent; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDFacet; import org.eclipse.xsd.XSDIdentityConstraintCategory; import org.eclipse.xsd.XSDIdentityConstraintDefinition; import org.eclipse.xsd.XSDModelGroup; import org.eclipse.xsd.XSDParticle; import org.eclipse.xsd.XSDParticleContent; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.XSDSimpleTypeDefinition; import org.eclipse.xsd.XSDTerm; import org.eclipse.xsd.XSDTypeDefinition; import org.eclipse.xsd.XSDVariety; import org.eclipse.xsd.XSDWildcard; import org.eclipse.xsd.XSDXPathDefinition; import org.eclipse.xsd.XSDXPathVariety; import org.eclipse.xsd.util.XSDConstants; import org.w3c.dom.Element; import com.amalto.workbench.dialogs.datamodel.IXPathSelectionFilter; import com.amalto.workbench.dialogs.datamodel.IXPathSelectionFilter.FilterResult; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; import com.amalto.workbench.utils.FontUtils; import com.amalto.workbench.utils.Util; import com.amalto.workbench.utils.XSDUtil; public class XSDTreeLabelProvider extends LabelProvider implements ITreePathLabelProvider, IColorProvider, IFontProvider { private static Log log = LogFactory.getLog(XSDTreeLabelProvider.class); private final IXPathSelectionFilter filter; private static final Color COLOR_GREY = getColor(SWT.COLOR_DARK_GRAY); private static final Color COLOR_BLACK = getColor(SWT.COLOR_BLACK); private static FontData defaultFontData = JFaceResources.getDefaultFont().getFontData()[0]; public static final Font FONT_BOLD = FontUtils.getBoldFont(new Font(Display.getDefault(), defaultFontData)); private static Color getColor(int systemColorID) { Display display = Display.getCurrent(); return display.getSystemColor(systemColorID); } public XSDTreeLabelProvider() { this(null); } public XSDTreeLabelProvider(IXPathSelectionFilter filter) { this.filter = filter; } @Override public String getText(Object obj) { // log.info("getText "+obj.getClass().getName()); if (obj instanceof XSDElementDeclaration) { String name = ((XSDElementDeclaration) obj).getName(); if (((XSDElementDeclaration) obj).isAbstract()) { name += Messages.XSDTreeLabelProvider_0; } String tail = ((XSDElementDeclaration) obj).getTargetNamespace() != null ? " : "//$NON-NLS-1$ + ((XSDElementDeclaration) obj).getTargetNamespace() : "";//$NON-NLS-1$ return name + tail; } if (obj instanceof XSDParticle) { XSDParticle xsdParticle = (XSDParticle) obj; XSDParticleContent content = xsdParticle.getContent(); XSDTerm xsdTerm = xsdParticle.getTerm(); String name = "";//$NON-NLS-1$ if (content instanceof XSDElementDeclaration) { XSDElementDeclaration decl = (XSDElementDeclaration) content; name += (decl.getName() == null ? "" : decl.getName());//$NON-NLS-1$ if (decl.getTypeDefinition() == null) { name += " [" + ((XSDElementDeclaration) xsdTerm).getName() + "]";//$NON-NLS-1$//$NON-NLS-2$ } } else if (content instanceof XSDModelGroup) { // log.info("SHOULD NOT HAPPEN????"); if (xsdParticle.getContainer() instanceof XSDComplexTypeDefinition) { String ctdName = ((XSDComplexTypeDefinition) xsdParticle.getContainer()).getName(); name = (ctdName != null ? ctdName : "");//$NON-NLS-1$ } } else { name = "[Any]";//$NON-NLS-1$ } if (!((xsdParticle.getMinOccurs() == 1) && (xsdParticle.getMaxOccurs() == 1))) { name += " [";//$NON-NLS-1$ name += xsdParticle.getMinOccurs(); name += "...";//$NON-NLS-1$ name += (xsdParticle.getMaxOccurs() == -1) ? "many" : "" + xsdParticle.getMaxOccurs();//$NON-NLS-1$//$NON-NLS-2$ name += "]";//$NON-NLS-1$ } return name; } if (obj instanceof XSDSimpleTypeDefinition) { return getSimpleTypeDefinition((XSDSimpleTypeDefinition) obj); } if (obj instanceof XSDModelGroup) { // return the name of the complex type definition XSDParticle particle = (XSDParticle) (((XSDModelGroup) obj).getContainer()); XSDComplexTypeDefinition complexTypeDefinition = (XSDComplexTypeDefinition) particle.getContainer(); String name = complexTypeDefinition.getName(); if (name == null) { name = "anonymous type ";//$NON-NLS-1$ } // return the occurence if (!((particle.getMinOccurs() == 1) && (particle.getMaxOccurs() == 1))) { name += " [";//$NON-NLS-1$ name += particle.getMinOccurs(); name += "...";//$NON-NLS-1$ name += (particle.getMaxOccurs() == -1) ? "many" : "" + particle.getMaxOccurs();//$NON-NLS-1$//$NON-NLS-2$ name += "]";//$NON-NLS-1$ } // get extend type XSDTypeDefinition extendType = complexTypeDefinition.getBaseTypeDefinition(); String extendTypeName = ""; //$NON-NLS-1$ if (extendType != null && extendType != complexTypeDefinition && !"anyType".equals(extendType.getName())) { //$NON-NLS-1$ extendTypeName = ":" + extendType.getName(); //$NON-NLS-1$ } XSDSchema schema = particle.getSchema(); String tail = ""; //$NON-NLS-1$ if (schema != null && schema.getTargetNamespace() != null) { tail = " : "//$NON-NLS-1$ + schema.getTargetNamespace(); } return name + tail + extendTypeName; } if (obj instanceof XSDFacet) { return ((XSDFacet) obj).getFacetName() + ": " + ((XSDFacet) obj).getLexicalValue();//$NON-NLS-1$ } if (obj instanceof XSDIdentityConstraintDefinition) { return ((XSDIdentityConstraintDefinition) obj).getName(); } if (obj instanceof XSDXPathDefinition) { XSDXPathDefinition xpath = (XSDXPathDefinition) obj; return xpath.getValue(); } if (obj instanceof XSDAttributeGroupDefinition) { XSDAttributeGroupDefinition attributeGroupDefinition = (XSDAttributeGroupDefinition) obj; String name = (attributeGroupDefinition.getName() == null ? "" : attributeGroupDefinition.getName());//$NON-NLS-1$ if (attributeGroupDefinition.getContents().size() == 0) { name += " [" + attributeGroupDefinition.getResolvedAttributeGroupDefinition().getName() + "]";//$NON-NLS-1$//$NON-NLS-2$ } return name; } if (obj instanceof XSDAttributeUse) { XSDAttributeUse attributeUse = (XSDAttributeUse) obj; String name = attributeUse.getAttributeDeclaration().getName(); if (name == null) { name = " [" + attributeUse.getAttributeDeclaration().getResolvedAttributeDeclaration().getName() + "]";//$NON-NLS-1$//$NON-NLS-2$ } return name; } if (obj instanceof XSDAttributeDeclaration) { XSDAttributeDeclaration attributeDec = (XSDAttributeDeclaration) obj; String name = attributeDec.getName(); if (name == null) { name = attributeDec.getAliasName(); if (name == null) { name = " [null]"; //$NON-NLS-1$ } } return name; } if (obj instanceof XSDAnnotation) { // XSDAnnotation annotation = (XSDAnnotation) obj; return "Annotations";//$NON-NLS-1$ } if (obj instanceof Element) { try { Element e = (Element) obj; if (e.getLocalName().equals("documentation")) {//$NON-NLS-1$ return "Documentation: " + e.getChildNodes().item(0).getNodeValue();//$NON-NLS-1$ } else if (e.getLocalName().equals("appinfo")) {//$NON-NLS-1$ String source = e.getAttribute("source");//$NON-NLS-1$ if (source != null) { if (source.startsWith("X_Label_")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_1, Util.iso2lang.get(source.substring(8).toLowerCase()), e.getChildNodes().item(0) .getNodeValue()); } else if (source.equals("X_ForeignKey")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_2, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_ForeignKey_NotSep")) {//$NON-NLS-1$ Boolean v = Boolean.valueOf(e.getChildNodes().item(0).getNodeValue()); return Messages.bind(Messages.XSDTreeLabelProvider_3, Messages.SimpleXpathInputDialog_sepFkTabPanel, v); } else if (source.equals("X_Visible_Rule")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_4, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Default_Value_Rule")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_5, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_ForeignKeyInfo")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_6, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_ForeignKeyInfoFormat")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_20, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_PrimaryKeyInfo")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_7, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_SourceSystem")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_8, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_TargetSystem")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_9, e.getChildNodes().item(0).getNodeValue()); } else if (source.startsWith("X_Description_")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_10, Util.iso2lang.get(source.substring(14).toLowerCase()), e.getChildNodes().item(0) .getNodeValue()); } else if (source.equals("X_Write")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_11, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Deny_Create")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_12, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Deny_LogicalDelete")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_13, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Deny_PhysicalDelete")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_14, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Lookup_Field")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_15, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Workflow")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_16, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_Hide")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_17, e.getChildNodes().item(0).getNodeValue()); // add by ymli; bugId 0009157 } else if (source.equals("X_AutoExpand")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_18, e.getChildNodes().item(0).getNodeValue()); } else if (source.startsWith("X_Facet")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_19, source.substring(2, 7), source.substring(8), e .getChildNodes().item(0).getNodeValue()); // made schematron show:Schematron: schematron } else if (source.startsWith("X_Display_Format_")) {//$NON-NLS-1$ return source + ": " + e.getChildNodes().item(0).getNodeValue();//$NON-NLS-1$ } else if (source.equals("X_Schematron")) {//$NON-NLS-1$ String pattern = (String) e.getFirstChild().getUserData("pattern_name");//$NON-NLS-1$ if (pattern == null) { Element el = Util.parse(e.getChildNodes().item(0).getNodeValue()).getDocumentElement(); if (el.getAttributes().getNamedItem("name") != null) { //$NON-NLS-1$ pattern = el.getAttributes().getNamedItem("name").getTextContent();//$NON-NLS-1$ } } return Messages.bind(Messages.XSDTreeLabelProvider_21, (pattern == null ? Messages.XSDTreeLabelProvider_22 : pattern));// e.getChildNodes().item(0).getNodeValue(); // end } else if (source.equals("X_Retrieve_FKinfos")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_23, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_FKIntegrity")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_24, e.getChildNodes().item(0).getNodeValue()); } else if (source.equals("X_FKIntegrity_Override")) {//$NON-NLS-1$ return Messages.bind(Messages.XSDTreeLabelProvider_25, e.getChildNodes().item(0).getNodeValue()); } if (source.equals("X_ForeignKey_Filter")) {//$NON-NLS-1$ String nodeValue = e.getChildNodes().item(0).getNodeValue(); if (nodeValue.startsWith("$CFFP:")) {//$NON-NLS-1$ nodeValue = StringEscapeUtils.unescapeXml(nodeValue).substring(6); } return Messages.bind(Messages.XSDTreeLabelProvider_26, nodeValue); } else { return source + ": " + Util.nodeToString((Element) obj);//$NON-NLS-1$ } } else { return Util.nodeToString((Element) obj); } } else { return Util.nodeToString((Element) obj); } } catch (Exception e) { log.error(e.getMessage(), e); } } if (obj == null) { return "NULL";//$NON-NLS-1$ } return "?? " + obj.getClass().getName() + " : " + obj.toString();//$NON-NLS-1$//$NON-NLS-2$ } @Override public Image getImage(Object obj) { if (obj instanceof XSDElementDeclaration) { // top declaration XSDElementDeclaration decl = (XSDElementDeclaration) obj; // check if concept or "just" element boolean isConcept = false; EList l = decl.getIdentityConstraintDefinitions(); for (Iterator iter = l.iterator(); iter.hasNext();) { XSDIdentityConstraintDefinition icd = (XSDIdentityConstraintDefinition) iter.next(); if (icd.getIdentityConstraintCategory().equals(XSDIdentityConstraintCategory.UNIQUE_LITERAL)) { isConcept = true; break; } } // display approprite image if (isConcept) { return ImageCache.getCreatedImage(EImage.CONCEPT.getPath()); } else { return ImageCache.getCreatedImage(EImage.ELEMENT_ONLY.getPath()); /* * if (decl.getTypeDefinition() instanceof XSDComplexTypeDefinition) return * PlatformUI.getWorkbench().getSharedImages().getCreatedImage(ISharedImages.IMG_OBJ_FOLDER); else * return ImageCache.getCreatedImage( "icons/elements_obj_+.gif"); */ } } if (obj instanceof XSDParticle) { XSDParticle xsdParticle = (XSDParticle) obj; XSDTerm xsdTerm = xsdParticle.getTerm(); if (xsdTerm instanceof XSDElementDeclaration) { // get Type of Parent Group List<Object> realKeyInfos = Util.getRealKeyInfos(entity, xsdParticle); if (realKeyInfos != null && realKeyInfos.size() > 0) { return ImageCache.getCreatedImage(EImage.PRIMARYKEY.getPath()); } if (XSDUtil.hasFKInfo((XSDElementDeclaration) xsdTerm)) { return ImageCache.getCreatedImage(EImage.FK_OBJ.getPath()); } XSDConcreteComponent xsdConcreteComponent = xsdParticle.getContainer(); if (xsdConcreteComponent instanceof XSDModelGroup) { return ImageCache.getCreatedImage(EImage.SCHEMAELEMENT.getPath()); } /* * if(((XSDElementDeclaration) xsdTerm).getAnonymousTypeDefinition() instanceof * XSDComplexTypeDefinition) return ImageCache.getCreatedImage( EImage.COMPLEXTYPE.getPath()); else * return ImageCache.getCreatedImage( EImage.SIMPLETYPE.getPath()); */ } else if (xsdTerm instanceof XSDModelGroup) { int type = ((XSDModelGroup) xsdTerm).getCompositor().getValue(); switch (type) { case XSDCompositor.ALL: return ImageCache.getCreatedImage(EImage.COMPLEX_ALL.getPath()); case XSDCompositor.CHOICE: return ImageCache.getCreatedImage(EImage.COMPLEX_CHOICE.getPath()); case XSDCompositor.SEQUENCE: return ImageCache.getCreatedImage(EImage.COMPLEX_SEQUENCE.getPath()); } } else if (xsdTerm instanceof XSDWildcard) { return ImageCache.getCreatedImage("icons/wildcard.gif");//$NON-NLS-1$ } else { log.info(Messages.bind(Messages.XSDTreeLabelProvider_27, xsdTerm.getClass().getName())); return ImageCache.getCreatedImage("icons/error.gif");//$NON-NLS-1$ } } if (obj instanceof XSDSimpleTypeDefinition) { return ImageCache.getCreatedImage(EImage.SIMPLETYPE.getPath()); } if (obj instanceof XSDComplexTypeDefinition) { XSDComplexTypeDefinition ctd = (XSDComplexTypeDefinition) obj; XSDComplexTypeContent ctc = ctd.getContent(); if (ctc instanceof XSDParticle) { if (((XSDParticle) ctc).getTerm() instanceof XSDModelGroup) { int type = ((XSDModelGroup) ((XSDParticle) ctc).getTerm()).getCompositor().getValue(); switch (type) { case XSDCompositor.ALL: return ImageCache.getCreatedImage(EImage.COMPLEX_ALL.getPath()); case XSDCompositor.CHOICE: return ImageCache.getCreatedImage(EImage.COMPLEX_CHOICE.getPath()); case XSDCompositor.SEQUENCE: return ImageCache.getCreatedImage(EImage.COMPLEX_SEQUENCE.getPath()); } } } else { // simple Type!!! log.info(Messages.bind(Messages.XSDTreeLabelProvider_28, ctc.getClass().getName())); return ImageCache.getCreatedImage("icons/error.gif");//$NON-NLS-1$ } } if (obj instanceof XSDModelGroup) { int type = ((XSDModelGroup) obj).getCompositor().getValue(); switch (type) { case XSDCompositor.ALL: return ImageCache.getCreatedImage(EImage.COMPLEX_ALL.getPath()); case XSDCompositor.CHOICE: return ImageCache.getCreatedImage(EImage.COMPLEX_CHOICE.getPath()); case XSDCompositor.SEQUENCE: return ImageCache.getCreatedImage(EImage.COMPLEX_SEQUENCE.getPath()); } } if (obj instanceof XSDFacet) { return ImageCache.getCreatedImage(EImage.FACET.getPath()); } if (obj instanceof XSDIdentityConstraintDefinition) { XSDIdentityConstraintDefinition identity = (XSDIdentityConstraintDefinition) obj; if (identity.getIdentityConstraintCategory().equals(XSDIdentityConstraintCategory.UNIQUE_LITERAL)) { return ImageCache.getCreatedImage(EImage.KEYS.getPath()); } return ImageCache.getCreatedImage(EImage.PRIMARYKEY.getPath()); } if (obj instanceof XSDXPathDefinition) { XSDXPathDefinition xpath = (XSDXPathDefinition) obj; if (xpath.getVariety().equals(XSDXPathVariety.FIELD_LITERAL)) { return ImageCache.getCreatedImage("icons/field.gif");//$NON-NLS-1$ } return ImageCache.getCreatedImage("icons/selector.gif");//$NON-NLS-1$ } if (obj instanceof XSDAttributeGroupDefinition) { return ImageCache.getCreatedImage("icons/attribute_group.gif");//$NON-NLS-1$ } if (obj instanceof XSDAttributeUse) { XSDAttributeUse att = (XSDAttributeUse) obj; if ("xmlns".equals(att.getAttributeDeclaration().getTargetNamespace())) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.ANNOTATION.getPath()); } if (att.getUse().equals(XSDAttributeUseCategory.REQUIRED_LITERAL)) { return ImageCache.getCreatedImage("icons/attribute_mandatory.gif");//$NON-NLS-1$ } else { return ImageCache.getCreatedImage("icons/attribute.gif");//$NON-NLS-1$ } } if (obj instanceof XSDAttributeDeclaration) { XSDAttributeDeclaration attributeDec = (XSDAttributeDeclaration) obj; if ("xmlns".equals(attributeDec.getTargetNamespace())) //$NON-NLS-1$ { return ImageCache.getCreatedImage(EImage.ANNOTATION.getPath()); } else { return ImageCache.getCreatedImage("icons/attribute.gif");//$NON-NLS-1$ } } if (obj instanceof XSDAnnotation) { return ImageCache.getCreatedImage(EImage.ANNOTATION.getPath()); } if (obj instanceof Element) { try { Element e = (Element) obj; if (e.getLocalName().equals("documentation")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath()); } else if (e.getLocalName().equals("appinfo")) {//$NON-NLS-1$ String source = e.getAttribute("source");//$NON-NLS-1$ if (source != null) { if (source.startsWith("X_Label_")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.LABEL.getPath()); } else if (source.equals("X_ForeignKey")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.FK_OBJ.getPath()); } else if (source.equals("X_Visible_Rule")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.ROUTINE.getPath()); } else if (source.equals("X_Default_Value_Rule")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.ROUTINE.getPath()); } else if (source.equals("X_ForeignKeyInfo")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.KEYINFO.getPath()); } else if (source.equals("X_ForeignKeyInfoFormat")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.KEYINFO.getPath()); // fix bug 0013194 by rhou. } else if (source.equals("X_FKIntegrity")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.KEYINFO.getPath()); } else if (source.equals("X_FKIntegrity_Override")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.KEYINFO.getPath()); } else if (source.equals("X_Retrieve_FKinfos")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.KEYINFO.getPath()); } else if (source.equals("X_SourceSystem")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.SOURCESYSTEM.getPath()); } else if (source.equals("X_TargetSystem")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.TARGETSYSTEM.getPath()); } else if (source.startsWith("X_Description_")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath()); } else if (source.equals("X_Write")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath()); } else if (source.equals("X_Deny_Create")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath()); } else if (source.equals("X_Deny_LogicalDelete")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath()); } else if (source.equals("X_Deny_PhysicalDelete")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath()); } else if (source.equals("X_Lookup_Field")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.BROWSE.getPath()); } else if (source.equals("X_Hide")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath()); } else if (source.equals("X_Schematron")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.ROUTINE.getPath()); } else if (source.equals("X_Workflow")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.WORKFLOW_PROCESS.getPath()); } else if (source.equals("X_AutoExpand")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.DEFAULT.getPath()); } if (source.equals("X_ForeignKey_Filter")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.FILTER_PS.getPath()); } else if (source.startsWith("X_Display_Format_")) {//$NON-NLS-1$ return ImageCache.getCreatedImage(EImage.THIN_MIN_VIEW.getPath()); } else { return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath()); } } else { return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath()); } } else { return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath()); } } catch (Exception e) { log.error(e.getMessage(), e); } } return ImageCache.getCreatedImage("icons/small_warn.gif");//$NON-NLS-1$ // return PlatformUI.getWorkbench().getSharedImages().getCreatedImage(ISharedImages.IMG_OBJ_ELEMENT); } /** * Print a simple type definition for the document. * * @param xsdSimpleTypeDefinition a simple type definition in the schema for schema. */ public String getSimpleTypeDefinition(XSDSimpleTypeDefinition xsdSimpleTypeDefinition) { String s = "";//$NON-NLS-1$ if (xsdSimpleTypeDefinition == null) { } else if (xsdSimpleTypeDefinition.getEffectiveEnumerationFacet() != null) { /* * List value = xsdSimpleTypeDefinition.getEffectiveEnumerationFacet().getValue(); if (value.size() > 1) { * s+= "("; } for (Iterator enumerators = value.iterator(); enumerators.hasNext();) { String enumerator = * enumerators.next().toString(); s+= enumerator; if (enumerators.hasNext()) { s+= " | ;"; } } if * (value.size() > 1) { s+= ")"; * * } */ s += xsdSimpleTypeDefinition.getName() != null ? xsdSimpleTypeDefinition.getName() : xsdSimpleTypeDefinition .getBaseTypeDefinition().getName(); } else if (xsdSimpleTypeDefinition.getElement() != null && xsdSimpleTypeDefinition.getElement().hasAttribute(XSDConstants.ID_ATTRIBUTE)) { s += xsdSimpleTypeDefinition.getName(); } else if ((XSDVariety.UNION_LITERAL == xsdSimpleTypeDefinition.getVariety()) || (XSDVariety.LIST_LITERAL == xsdSimpleTypeDefinition.getVariety())) { s += "(";//$NON-NLS-1$ for (Iterator members = xsdSimpleTypeDefinition.getMemberTypeDefinitions().iterator(); members.hasNext();) { XSDSimpleTypeDefinition memberTypeDefinition = (XSDSimpleTypeDefinition) members.next(); s += getSimpleTypeDefinition(memberTypeDefinition); if (members.hasNext()) { s += " | ";//$NON-NLS-1$ } } s += ")";//$NON-NLS-1$ if (xsdSimpleTypeDefinition.getMemberTypeDefinitions().isEmpty()) { s = xsdSimpleTypeDefinition.getVariety() + "";//$NON-NLS-1$ } } else if ((XSDVariety.UNION_LITERAL == xsdSimpleTypeDefinition.getVariety()) | (XSDVariety.LIST_LITERAL == xsdSimpleTypeDefinition.getVariety())) { s += "List of ";//$NON-NLS-1$ s += getSimpleTypeDefinition(xsdSimpleTypeDefinition.getItemTypeDefinition()); } else if (xsdSimpleTypeDefinition.getName() != null) { s += xsdSimpleTypeDefinition.getName(); } else if (xsdSimpleTypeDefinition.getEffectivePatternFacet() != null) { // s+= xsdSimpleTypeDefinition.getEffectivePatternFacet().getLexicalValue()); s += "a restricted xpath expression";//$NON-NLS-1$ } else { s += "";//$NON-NLS-1$ } String tail = xsdSimpleTypeDefinition.getTargetNamespace() == null ? "" : xsdSimpleTypeDefinition.getTargetNamespace();//$NON-NLS-1$ if (tail.equals(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001) || tail.equals(XSDConstants.SCHEMA_FOR_SCHEMA_URI_1999)) { tail = "";//$NON-NLS-1$ } else if (!tail.equals("")) { //$NON-NLS-1$ tail = " : " + tail;//$NON-NLS-1$ } return s + tail; } private XSDElementDeclaration entity; public void updateLabel(ViewerLabel label, TreePath elementPath) { if (elementPath.getFirstSegment() instanceof XSDElementDeclaration) { entity = (XSDElementDeclaration) elementPath.getFirstSegment(); } Object lastSegment = elementPath.getLastSegment(); label.setText(getText(lastSegment)); label.setImage(getImage(lastSegment)); } public Font getFont(Object element) { if (filter != null) { if (filter.check(element) == FilterResult.ENABLE) { return FONT_BOLD; } } return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object) */ public Color getForeground(Object element) { if (filter != null) { switch (filter.check(element)) { case ENABLE: return COLOR_BLACK; case DISABLE: case IGNORE: return COLOR_GREY; } } return null; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object) */ public Color getBackground(Object element) { return null; } }