/*******************************************************************************
* Copyright (c) 2010 Mia-Software.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Bros (Mia-Software) - initial API and implementation
*******************************************************************************/
package org.eclipse.papyrus.infra.emf.providers;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.facet.infra.browser.uicore.CustomizableModelContentProvider;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.resource.ModelUtils;
import org.eclipse.papyrus.infra.core.resource.uml.UmlModel;
import org.eclipse.papyrus.infra.core.resource.uml.UmlUtils;
import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
import org.eclipse.papyrus.infra.core.sasheditor.di.contentprovider.DiSashModelMngr;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
import org.eclipse.papyrus.infra.emf.Activator;
/**
* the content provider that inherits of modisco properties
*
* @deprecated Use SemanticUMLContentProvider instead
*/
@Deprecated
public class MoDiscoContentProvider extends CustomizableModelContentProvider {
/** The ModelSet containing all the models. This is the initial input. */
protected ModelSet modelSet;
/** The list of open pages (diagrams) */
protected IPageMngr pageMngr;
/**
* Creates a new MoDiscoContentProvider.
*/
public MoDiscoContentProvider() {
super(Activator.getDefault().getCustomizationManager());
}
@Override
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
@Override
public Object[] getChildren(final Object parentElement) {
ArrayList<Object> result = new ArrayList<Object>();
Object[] arrayObject = super.getChildren(parentElement);
if(arrayObject != null) {
for(int i = 0; i < arrayObject.length; i++) {
result.add(arrayObject[i]);
}
}
/**
* Refactoring with bug 358732
*/
//
// if (parentElement instanceof IAdaptable) {
// EObject eObject = (EObject)((IAdaptable)parentElement).getAdapter(EObject.class);
// if(eObject !=null) {
// List<Diagram> diagramList = findAllExistingDiagrams(eObject);
// Iterator<Diagram> iterator = diagramList.iterator();
// while (iterator.hasNext()) {
// result.add(iterator.next());
// }
// }
//
// }
return result.toArray();
}
/**
* @param owner
* the owner of the diagrams
* @return the list of diagrams contained by the given owner
*/
private List<Diagram> findAllExistingDiagrams(EObject owner) {
ArrayList<Diagram> diagrams = new ArrayList<Diagram>();
// Walk on page (Diagram) references
for(Object page : pageMngr.allPages()) {
if(!(page instanceof Diagram)) {
continue;
}
// We have a GMF Diagram
Diagram diagram = (Diagram)page;
if(owner.equals(diagram.getElement())) {
diagrams.add(diagram);
}
}
return diagrams;
}
/**
* Return the initial values from the input.
* Input should be of type {@link UmlModel}.
*
* @see org.eclipse.gmt.modisco.infra.browser.uicore.CustomizableModelContentProvider#getRootElements(java.lang.Object)
*
* @param inputElement
* @return
*/
@Override
public EObject[] getRootElements(Object inputElement) {
try {
if(!(inputElement instanceof ServicesRegistry)) {
return null;
}
ServicesRegistry servicesRegistry = (ServicesRegistry)inputElement;
modelSet = ModelUtils.getModelSetChecked(servicesRegistry);
pageMngr = servicesRegistry.getService(DiSashModelMngr.class).getIPageMngr();
return getRootElements(modelSet);
} catch (Exception e) {
Activator.log.error(e);
}
return new EObject[0];
}
/**
* apex updated
*
* Get the roots elements from the {@link ModelSet} provided as input.
*
* @return
*/
protected EObject[] getRootElements(ModelSet modelSet) {
UmlModel umlModel = (UmlUtils.getUmlModel(modelSet));
if(umlModel == null) {
return null;
}
EList<EObject> contents = umlModel.getResource().getContents();
ArrayList<EObject> result = new ArrayList<EObject>();
Iterator<EObject> iterator = contents.iterator();
while(iterator.hasNext()) {
EObject eObject = iterator.next();
result.add(eObject);
}
return result.toArray(new EObject[result.size()]);
}
}