/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.tuscany.das.ldap.schema.emf.create; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Stack; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.ldap.LdapContext; import org.apache.tuscany.das.ldap.schema.create.SyntaxEntryCreator; import org.apache.tuscany.das.ldap.schema.emf.destroy.EStructuralFeatureTypeDestroyer; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; /** * The Class EcoreTypeSystemCreatorHelper. */ public class EcoreTypeSystemHelper { /** * Creates the E data types list. * * @param ePackage the e package * * @return the list< E data type> */ public static List createEDataTypesList( EPackage ePackage) { List list = ePackage.eContents(); List eDataTypes = new ArrayList(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object object = iterator.next(); if (object instanceof EDataType ) { eDataTypes.add( ( EDataType ) object ); } } return eDataTypes; } public static void createSyntaxCheckerEntries( String oidPrefix, LdapContext syntaxCheckersContext) throws Exception { } /** * Creates the syntax entries. * * @param oidPrefix the oid prefix * @param eDataTypes the e data types * @param syntaxesContext the syntaxes context * * @throws Exception the exception */ public static void createSyntaxEntries( List eDataTypes, String oidPrefix, LdapContext syntaxesContext, LdapContext syntaxCheckersContext) throws Exception { Iterator eDataTypeIterator = eDataTypes.iterator(); String eDataTypeName = null; String eDataTypeNamespaceURI = null; while (eDataTypeIterator.hasNext()) { EDataType eDataType = eDataTypeIterator.next(); eDataTypeName = eDataType.getName(); eDataTypeNamespaceURI = eDataType.getEPackage().getNsURI(); SyntaxEntryCreator.create( oidPrefix, eDataTypeNamespaceURI, eDataTypeName, syntaxesContext, syntaxCheckersContext); } } /** * Creates the E classifiers list. * * @param ePackage the e package * * @return the list< E class> */ public static List createEClassifiersList( EPackage ePackage) { List list = ePackage.eContents(); List eClassifiers = new ArrayList(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object object = iterator.next(); if (object instanceof EClassifier ) { eClassifiers.add( ( EClass ) object ); } } return eClassifiers; } /** * Creates the E classifier entries. * * @param eClassifiers the e classifiers */ public static void createEClassifierEntries( List eClassifiers) { } /** * Load parent E classifier stack. * * @param parentEClassifierStack the parent E classifier stack * @param eClass the e class * * @return the stack< E class> * * Note that clients should pass null for the * parentEClassifierStack argument. The method * creates the stack when needed, and uses * it during recursion. */ public static Stack loadParentEClassifierStack( EClass eClass, Stack parentEClassifierStack) { List eClassParents = eClass.getESuperTypes(); if (eClassParents.size() > 0) { Iterator eClassParentIterator = eClassParents.iterator(); while(eClassParentIterator.hasNext()) { EClass parentEClass = eClassParentIterator.next(); if (!parentEClass.isInterface()) { if (parentEClassifierStack == null) { parentEClassifierStack = new Stack(); } parentEClassifierStack.push( parentEClass ); eClassParents = parentEClass.getESuperTypes(); if (eClassParents.size() == 0) { return parentEClassifierStack; } else { loadParentEClassifierStack( parentEClass, parentEClassifierStack ); } } } } return parentEClassifierStack; } /** * Creates the E object class parents. * * @param oidPrefix the oid prefix * @param objectClassesContext the object classes context * @param eClass the e class * * @throws Exception the exception * @throws NamingException the naming exception */ public static void createEObjectClassParents( DirContext dasModelMetaContext, DirContext attributeTypesContext, DirContext objectClassesContext, EClass eClass, String oidPrefix) throws NamingException, Exception { Stack parentEClassifierStack = EcoreTypeSystemHelper. loadParentEClassifierStack( eClass, null); EClass parentEClass = null; for (int i=0; i eAttributes = eClass.getEAttributes(); Iterator eAttributeIterator = eAttributes.iterator(); while (eAttributeIterator.hasNext()) { EAttribute eAttribute = eAttributeIterator.next(); EAttributeTypeCreator eAttributeTypeCreator = new EAttributeTypeCreator(); eAttributeTypeCreator.create( attributeTypesContext, eAttribute, oidPrefix ); } List eReferences = eClass.getEReferences(); Iterator eReferenceIterator = eReferences.iterator(); while(eReferenceIterator.hasNext()) { EReference eReference = eReferenceIterator. next(); EReferenceTypeCreator eReferenceTypeCreator = new EReferenceTypeCreator(); eReferenceTypeCreator.create( attributeTypesContext, eReference, oidPrefix); } } /** * Destroy attribute types. * * @param oidPrefix the oid prefix * @param eClass the e class * @param attributeTypesContext the attribute types context * * @throws Exception the exception * @throws NamingException the naming exception */ public static void destroyAttributeTypes( DirContext attributeTypesContext, EClass eClass, String oidPrefix) throws NamingException, Exception { List eStructuralFeatures = eClass. getEStructuralFeatures(); Iterator eStructuralFeatureIterator = eStructuralFeatures.iterator(); while (eStructuralFeatureIterator.hasNext()) { EStructuralFeature eStructuralFeature = eStructuralFeatureIterator.next(); EStructuralFeatureTypeDestroyer.destroy( attributeTypesContext, eStructuralFeature, oidPrefix ); } } /** * Gets the E class parent. * * @param eClass the e class * * @return the e class parent */ public static EClass getEClassParent(EClass eClass) { List eClassParents = eClass.getESuperTypes(); if (eClassParents.size() > 0) { Iterator eClassParentIterator = eClassParents.iterator(); while(eClassParentIterator.hasNext()) { EClass parentEClass = eClassParentIterator.next(); if (!parentEClass.isInterface()) { return parentEClass; } else { return null; } } } return null; } }