/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.schema.tools.model.schema.impl; import java.util.Iterator; import org.eclipse.xsd.XSDElementDeclaration; import org.eclipse.xsd.XSDParticle; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.XSDTypeDefinition; import org.teiid.designer.schema.tools.model.schema.Column; import org.teiid.designer.schema.tools.model.schema.ISchemaModelCopyTraversalContext; import org.teiid.designer.schema.tools.model.schema.Relationship; import org.teiid.designer.schema.tools.model.schema.RootElement; import org.teiid.designer.schema.tools.model.schema.SchemaObject; import org.teiid.designer.schema.tools.model.schema.SchemaObjectKey; /** * @since 8.0 */ public class ElementImpl extends BaseSchemaObject { protected XSDElementDeclaration elem; public XSDElementDeclaration getElem() { return elem; } public ElementImpl( XSDElementDeclaration elem, String namespacePrefix, XSDTypeDefinition type, XSDSchema schema ) { super(namespacePrefix, type, schema); this.elem = elem; this.doesNotHaveUniqueName = false; } @Override public SchemaObject copy( ISchemaModelCopyTraversalContext ctx ) { ElementImpl copy = new ElementImpl(elem, getNamespacePrefix(), type, schema); return copy; } @Override public boolean equals( Object obj ) { if (obj instanceof ElementImpl) { ElementImpl test = (ElementImpl)obj; if (elem == test.elem) { return true; } } return false; } @Override public String getSimpleName() { String elemName = elem.getName(); String uniqueName; if (doesNotHaveUniqueName) { String typeName = elem.getType().getName(); uniqueName = elemName + '(' + typeName + ')'; } else { uniqueName = elemName; } return uniqueName; } @Override public XSDTypeDefinition getType() { return type; } @Override public String getElementTypeNamespace() { String namespace = elem.getType().getTargetNamespace(); return namespace; } @Override public String getNamespace() { return elem.getTargetNamespace(); } @Override public String getName() { return elem.getName(); } @Override public String toString() { String retval = elem.getName(); if (elem.getTargetNamespace() != null) { retval += " (" + elem.getTargetNamespace() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ } return retval; } @Override public RootElement getRootRepresentation() { return new RootElementImpl(getKey(), getSimpleName(), getNamespace(), isCanBeRoot()); } @Override public String getCatalog() { return null; } @Override public int getMinOccurs() { XSDTypeDefinition def = elem.getTypeDefinition(); XSDParticle particle = def.getComplexType(); if (particle == null) return 1; return particle.getMinOccurs(); } @Override public int getMaxOccurs() { XSDTypeDefinition def = elem.getTypeDefinition(); XSDParticle particle = def.getComplexType(); if (particle == null) return 1; return particle.getMaxOccurs(); } public void printDebug() { StringBuffer buff = new StringBuffer(); buff.append("\t SchemaObject: SimpleName = " + getSimpleName()); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ buff.append("Prefix = " + getNamespacePrefix()); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ buff.append("AvailableRoot = " + availableRoot); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ buff.append("doesNotHaveUniqueName = " + doesNotHaveUniqueName); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ buff.append("filename = " + fileName); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ buff.append("representAsTable = " + representAsTable); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ buff.append("withinSelectedHierarchy = " + withinSelectedHierarchy); //$NON-NLS-1$ buff.append(" "); //$NON-NLS-1$ System.out.println(buff.toString()); if (attributes.size() > 0) System.out.println("\t Attributes"); //$NON-NLS-1$ for (Iterator iter = attributes.iterator(); iter.hasNext();) { Column column = (Column)iter.next(); column.printDebug(); } if (children.size() > 0) System.out.println("\t Children"); //$NON-NLS-1$ for (Iterator iter = children.iterator(); iter.hasNext();) { Relationship relationship = (Relationship)iter.next(); relationship.printDebug(); } if (parents.size() > 0) System.out.println("\t Parents"); //$NON-NLS-1$ for (Iterator iter = parents.iterator(); iter.hasNext();) { Relationship relationship = (Relationship)iter.next(); relationship.printDebug(); } } @Override public SchemaObjectKey getKey() { return new ElementImplKey(elem); } }