// ============================================================================
//
// 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.datamodel.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.swt.graphics.Image;
import org.eclipse.xsd.XSDAnnotation;
import org.eclipse.xsd.XSDAttributeGroupDefinition;
import org.eclipse.xsd.XSDAttributeUse;
import org.eclipse.xsd.XSDAttributeUseCategory;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDCompositor;
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.XSDSimpleTypeDefinition;
import org.eclipse.xsd.XSDWildcard;
import org.eclipse.xsd.XSDXPathDefinition;
import org.eclipse.xsd.XSDXPathVariety;
import org.w3c.dom.Element;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.EImage;
import com.amalto.workbench.image.ImageCache;
import com.amalto.workbench.utils.Util;
public class SchemaItemImageCreator {
private static Log log = LogFactory.getLog(SchemaItemImageCreator.class);
private static SchemaItemImageCreator INSTANCE;
protected SchemaItemImageCreator() {
}
public static synchronized SchemaItemImageCreator getInstance() {
if (INSTANCE == null)
INSTANCE = new SchemaItemImageCreator();
return INSTANCE;
}
protected Image getImageForUnknown() {
return ImageCache.getCreatedImage(EImage.SMALL_WARN.getPath());
}
protected Image getImageForXSDElementDeclaration(XSDElementDeclaration element) {
for (XSDIdentityConstraintDefinition eachIDConsDef : element.getIdentityConstraintDefinitions()) {
if (eachIDConsDef.getIdentityConstraintCategory().equals(XSDIdentityConstraintCategory.UNIQUE_LITERAL))
return ImageCache.getCreatedImage(EImage.CONCEPT.getPath());
}
return ImageCache.getCreatedImage(EImage.ELEMENT_ONLY.getPath());
}
protected Image getImageForXSDParticle(XSDParticle element) {
if (element.getTerm() instanceof XSDElementDeclaration)
return getImageForXSDParticle_Term_XSDElementDeclaration(element, (XSDElementDeclaration) element.getTerm());
if (element.getTerm() instanceof XSDModelGroup)
return getImageForXSDParticle_Term_XSDModelGroup(element, (XSDModelGroup) element.getTerm());
if (element.getTerm() instanceof XSDWildcard)
return getImageForXSDParticle_Term_XSDWildcard();
return getImageForXSDParticle_WrongStatus(element);
}
protected Image getImageForXSDParticle_Term_XSDElementDeclaration(XSDParticle element, XSDElementDeclaration term) {
// get Type of Parent Group
if (Util.getKeyInfo(term) != null && Util.getKeyInfo(term).size() > 0)
return ImageCache.getCreatedImage(EImage.PRIMARYKEY.getPath());
if (element.getContainer() instanceof XSDModelGroup)
return ImageCache.getCreatedImage(EImage.SCHEMAELEMENT.getPath());
return getImageForXSDParticle_WrongStatus(element);
}
protected Image getImageForXSDParticle_Term_XSDModelGroup(XSDParticle element, XSDModelGroup term) {
int type = term.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());
default:
return getImageForXSDParticle_WrongStatus(element);
}
}
protected Image getImageForXSDParticle_Term_XSDWildcard() {
return ImageCache.getCreatedImage(EImage.WILDCARD.getPath());
}
protected Image getImageForXSDParticle_WrongStatus(XSDParticle element) {
log.info(Messages.bind(Messages.SchemaItemImageCreator_Loginfo, element.getTerm().getClass().getName()));
return ImageCache.getCreatedImage(EImage.ERROR.getPath());
}
protected Image getImageForXSDSimpleTypeDefinition() {
return ImageCache.getCreatedImage(EImage.SIMPLETYPE.getPath());
}
protected Image getImageForXSDComplexTypeDef(XSDComplexTypeDefinition element) {
if (element.getContent() instanceof XSDParticle)
return getImageForXSDComplexTypeDef_Cotent_XSDParticle((XSDParticle) element.getContent());
return getImageForXSDComplexTypeDef_WrangStatus(element);
}
protected Image getImageForXSDComplexTypeDef_Cotent_XSDParticle(XSDParticle content) {
if (content.getTerm() instanceof XSDModelGroup) {
int type = ((XSDModelGroup) content.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());
}
}
return getImageForUnknown();
}
protected Image getImageForXSDComplexTypeDef_WrangStatus(XSDComplexTypeDefinition element) {
log.info(Messages.bind(Messages.SchemaItemImageCreator_Loginfo1, element.getContent().getClass().getName()));
return ImageCache.getCreatedImage(EImage.ERROR.getPath());
}
protected Image getImageForXSDModelGroup(XSDModelGroup element) {
switch (element.getCompositor().getValue()) {
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());
default:
return getImageForUnknown();
}
}
protected Image getImageForXSDFacet() {
return ImageCache.getCreatedImage(EImage.FACET.getPath());
}
protected Image getImageForXSDIdentityConstraintDef(XSDIdentityConstraintDefinition element) {
if (element.getIdentityConstraintCategory().equals(XSDIdentityConstraintCategory.UNIQUE_LITERAL))
return ImageCache.getCreatedImage(EImage.KEYS.getPath());
return ImageCache.getCreatedImage(EImage.PRIMARYKEY.getPath());
}
protected Image getImageForXSDXPathDefinition(XSDXPathDefinition element) {
if (element.getVariety().equals(XSDXPathVariety.FIELD_LITERAL))
return ImageCache.getCreatedImage(EImage.FIELD.getPath());
return ImageCache.getCreatedImage(EImage.SELECTOR.getPath());
}
protected Image getImageForXSDAttributeGroupDef() {
return ImageCache.getCreatedImage(EImage.ATTRIBUTE_GROUP.getPath());
}
protected Image getImageForXSDAttributeUse(XSDAttributeUse element) {
if ("xmlns".equals(element.getAttributeDeclaration().getTargetNamespace()))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.ANNOTATION.getPath());
if (XSDAttributeUseCategory.REQUIRED_LITERAL.equals(element.getUse()))
return ImageCache.getCreatedImage(EImage.ATTRIBUTE_MANDATORY.getPath());
return ImageCache.getCreatedImage(EImage.ATTRIBUTE.getPath());
}
protected Image getImageForXSDAnnotation() {
return ImageCache.getCreatedImage(EImage.ANNOTATION.getPath());
}
protected Image getImageForElement(Element element) {
try {
if ("documentation".equals(element.getLocalName()))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath());
if ("appinfo".equals(element.getLocalName())) {//$NON-NLS-1$
String source = element.getAttribute("source");//$NON-NLS-1$
if (source != null) {
if (source.startsWith("X_Label_"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.LABEL.getPath());
if (source.equals("X_ForeignKey"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.PRIMARYKEY.getPath());
if (source.equals("X_ForeignKeyInfo"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.KEYINFO.getPath());
if (source.equals("X_Retrieve_FKinfos"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.KEYINFO.getPath());
if (source.equals("X_FKIntegrity"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.KEYINFO.getPath());
if (source.equals("X_FKIntegrity_Override"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.KEYINFO.getPath());
if (source.equals("X_SourceSystem"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.SOURCESYSTEM.getPath());
if (source.equals("X_TargetSystem"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.TARGETSYSTEM.getPath());
if (source.startsWith("X_Description_"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath());
if (source.equals("X_Write"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath());
if (source.equals("X_Lookup_Field"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.BROWSE.getPath());
if (source.equals("X_Hide"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.SECURITYANNOTATION.getPath());
if (source.equals("X_Schematron"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.ROUTINE.getPath());
if (source.equals("X_Workflow"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.WORKFLOW_PROCESS.getPath());
if (source.equals("X_ForeignKey_Filter"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.FILTER_PS.getPath());
if (source.startsWith("X_Display_Format_"))//$NON-NLS-1$
return ImageCache.getCreatedImage(EImage.THIN_MIN_VIEW.getPath());
}
}
return ImageCache.getCreatedImage(EImage.DOCUMENTATION.getPath());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return getImageForUnknown();
}
public Image getImage(Object obj) {
if (obj instanceof XSDElementDeclaration)
return getImageForXSDElementDeclaration((XSDElementDeclaration) obj);
if (obj instanceof XSDParticle)
return getImageForXSDParticle((XSDParticle) obj);
if (obj instanceof XSDSimpleTypeDefinition)
return getImageForXSDSimpleTypeDefinition();
if (obj instanceof XSDComplexTypeDefinition)
return getImageForXSDComplexTypeDef((XSDComplexTypeDefinition) obj);
if (obj instanceof XSDModelGroup)
return getImageForXSDModelGroup((XSDModelGroup) obj);
if (obj instanceof XSDFacet)
return getImageForXSDFacet();
if (obj instanceof XSDIdentityConstraintDefinition)
return getImageForXSDIdentityConstraintDef((XSDIdentityConstraintDefinition) obj);
if (obj instanceof XSDXPathDefinition)
return getImageForXSDXPathDefinition((XSDXPathDefinition) obj);
if (obj instanceof XSDAttributeGroupDefinition)
return getImageForXSDAttributeGroupDef();
if (obj instanceof XSDAttributeUse)
return getImageForXSDAttributeUse((XSDAttributeUse) obj);
if (obj instanceof XSDAnnotation)
return getImageForXSDAnnotation();
if (obj instanceof Element)
return getImageForElement((Element) obj);
return getImageForUnknown();
}
}