// ============================================================================
//
// 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;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.xsd.XSDAnnotation;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDNamedComponent;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import com.amalto.workbench.utils.Util;
public class TypesTreeContentProvider extends SchemaTreeContentProvider {
public TypesTreeContentProvider(IWorkbenchPartSite site, XSDSchema invisibleRoot) {
super(site, invisibleRoot);
}
@Override
protected Object[] findChildren(Object parent) {
if (parent instanceof XSDComplexTypeDefinition)
return getXSDComplexTypeDefinitionChildren((XSDComplexTypeDefinition) parent);
return super.findChildren(parent);
}
protected Object[] getXSDComplexTypeDefinitionChildren(XSDComplexTypeDefinition parent) {
List<Object> list = new ArrayList<Object>();
list.addAll(parent.getAttributeContents());
EList<XSDAnnotation> annotations = parent.getAnnotations();
if (annotations != null)
list.addAll(Arrays.asList(annotations.toArray()));
if (parent.getContent() == null) {
list.add(parent.getBaseTypeDefinition());
} else if (parent.getContent() instanceof XSDSimpleTypeDefinition) {
list.add(parent.getContent());
} else if (parent.getContent() instanceof XSDParticle) {
list.removeAll(parent.getAttributeContents());
Object[] xsdParticleChildren = getXSDParticleChildren((XSDParticle) parent.getContent());
list.addAll(Arrays.asList(xsdParticleChildren));
} else {
list.add(parent.getContent());
}
return list.toArray();
}
@Override
protected Object[] getXSDSchemaChildren(XSDSchema schema) {
return Util.filterOutDuplicatedElems(schema.getTypeDefinitions().toArray(
new XSDNamedComponent[schema.getTypeDefinitions().size()]));
}
@Override
protected Object[] getXSDSimpleTypeDefinitionChildren(XSDSimpleTypeDefinition parent) {
List<Object> resultList = new ArrayList<Object>();
if (!Util.isBuildInType(parent)){
if(parent.getAnnotations() != null) {
EList<XSDAnnotation> annotations = parent.getAnnotations();
resultList.addAll(Arrays.asList(annotations.toArray()));
}
}
Object[] xsdSimpleTypeDefinition = super.getXSDSimpleTypeDefinitionChildren(parent);
resultList.addAll(Arrays.asList(xsdSimpleTypeDefinition));
return resultList.toArray();
}
}