// ============================================================================
//
// 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;
}
}