package fr.inria.atlanmod.neo4emf.partition.impl; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.resource.Resource; import fr.inria.atlanmod.neo4emf.partition.IPartition; import fr.inria.atlanmod.neo4emf.partition.IPartitioning; public class Partitioning implements IPartitioning { private Resource resource; private List<IPartition> partitions; public Partitioning(){} public Partitioning (Resource r) { resource = r; partitions=new ArrayList<IPartition>(); for (EReference ref : getAllContainments()){ partitions.add(new Partition(ref)); } } @Override public List<EPackage> getAllPacakges(){ if (resource == null || resource.getContents()==null) return null; List<EPackage> listPck = new ArrayList<EPackage>(); for (EObject obj : resource.getContents()) if (obj instanceof EPackage){ listPck.add((EPackage)obj); getSubPackages(obj,listPck); } return listPck; } public Resource getResource() { return resource; } public List<IPartition> getPartitions() { return partitions; } private void getSubPackages(EObject obj, List<EPackage> listPck) { if (obj.eContents() == null) return; for (EObject object : obj.eContents()) if (object instanceof EPackage) { listPck.add((EPackage)object); getSubPackages(object, listPck); } } @Override public List<EClass> getAllClasses(){ List<EPackage> listPck = getAllPacakges(); if (listPck == null) return null; List<EClass> listCls = new ArrayList<EClass>(); for (EPackage pck : listPck){ if (pck.eContents() == null) continue; for (EObject obj : pck.eContents()){ if (obj instanceof EClass && !((EClass) obj).isAbstract()) listCls.add((EClass)obj); } } return listCls; } @Override public List<EReference> getAllContainments(){ List<EClass> listCls = getAllClasses(); if (listCls == null) return null; List<EReference> listCont = new ArrayList<EReference>(); for (EClass cls : listCls){ if (cls.getEAllContainments()== null ) continue; listCont.addAll(cls.getEAllContainments()); } return listCont; } @Override public EClass getClassByName(String name){ if (getAllClasses()==null) return null; for (EClass cls : getAllClasses()){ if (name.equals(cls.getName())) return cls; } return null; } }