/* * 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.modelgenerator.wsdl.ui.wizards.soap; import java.util.ArrayList; import java.util.Collection; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.xsd.XSDAttributeUse; import org.eclipse.xsd.XSDComplexTypeDefinition; import org.eclipse.xsd.XSDParticle; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.SchemaTreeModel.SchemaNode; /** * @since 8.0 */ public class SchemaTreeContentProvider extends AdapterFactoryContentProvider { @SuppressWarnings("unused") private static final Class<?> IStructuredItemContentProviderClass = IStructuredItemContentProvider.class; public SchemaTreeContentProvider(AdapterFactory adapterFactory) { super(adapterFactory); } /* (non-Javadoc) * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getChildren(java.lang.Object) */ @Override public Object[] getChildren(Object object) { if( object instanceof SchemaNode ) { SchemaNode node = (SchemaNode)object; Collection<SchemaNode> result = node.getChildren(); Collection<Object> filteredNodes = new ArrayList<Object>(); if( node.getChildren().isEmpty() && node.getElement() instanceof XSDParticle ) { return super.getChildren(node.getElement()); } else { for( Object child : result ) { if( showObject(child) ) { filteredNodes.add(child); } } } return filteredNodes.toArray( new Object[filteredNodes.size()]); } else { Object[] result = super.getChildren(object); Collection<Object> filteredNodes = new ArrayList<Object>(); for( Object child : result ) { if( showObject(child) ) { filteredNodes.add(child); } } return filteredNodes.toArray( new Object[filteredNodes.size()]); } } @Override public Object[] getElements(Object object) { if (object instanceof SchemaNodeWrapper) { Collection<Object> filteredNodes = new ArrayList<Object>(); for (SchemaNode child : ((SchemaNodeWrapper)object).getChildren()) { filteredNodes.add(child); } return filteredNodes.toArray(new Object[filteredNodes.size()]); } return new Object[0]; } @Override public boolean hasChildren(Object object) { if( object instanceof SchemaNode ) { SchemaNode node = (SchemaNode)object; if( node.getElement() instanceof XSDAttributeUse ) { return super.hasChildren(node.getElement()); } else if( node.getChildren().isEmpty() && node.getElement() instanceof XSDParticle ) { return super.hasChildren(node.getElement()); } return node.getChildren().size() > 0; } return false; } private boolean showObject(Object object) { if( object instanceof SchemaNode ) { SchemaNode node = (SchemaNode) object; if( node.getElement() instanceof XSDComplexTypeDefinition ) { String name = ((XSDComplexTypeDefinition) node.getElement()).getName(); if(name !=null && "ANYTYPE".equals(name.toUpperCase())) { //$NON-NLS-1$ return false; } } if( node.getElement() instanceof XSDParticle || node.getElement() instanceof XSDAttributeUse ) { return true; } return true; } return false; } }