blob: f5c6a39196983f524971a59546ce27730937aa89 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2014 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* CEA LIST - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.moka.ui.launch;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.uml2.uml.Activity;
import org.eclipse.uml2.uml.AssociationClass;
import org.eclipse.uml2.uml.Behavior;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.InstanceSpecification;
import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.uml2.uml.Node;
import org.eclipse.uml2.uml.OpaqueBehavior;
import org.eclipse.uml2.uml.StateMachine;
import org.eclipse.uml2.uml.Stereotype;
public class MokaTriggerComboPopulation implements ModifyListener {
protected transient MokaUMLComboBox list;
public MokaTriggerComboPopulation(MokaUMLComboBox combo) {
this.list = combo;
}
public void modifyText(ModifyEvent e) {
List<NamedElement> namedElements = new ArrayList<NamedElement>();
this.list.removeAll();
Text text = (Text) e.widget;
URI projectUri = URI.createURI(text.getText());
ResourceSet resourceSet = new ResourceSetImpl();
Resource resource = resourceSet.getResource(projectUri, true);
Iterator<EObject> contentIterator = resource.getAllContents();
while (contentIterator.hasNext()) {
EObject eObject = contentIterator.next();
if (eObject instanceof Behavior) {
if (eObject instanceof Activity || eObject instanceof OpaqueBehavior || eObject instanceof StateMachine) {
namedElements.add((NamedElement) eObject);
}
} else if (eObject instanceof Class) {
if (!(eObject instanceof Node) || !(eObject instanceof Stereotype) || !(eObject instanceof AssociationClass)) {
// if(((Class)eObject).isActive()){
namedElements.add((NamedElement) eObject);
// }
}
} else if (eObject instanceof InstanceSpecification) {
namedElements.add((NamedElement) eObject);
}
}
Comparator<NamedElement> comp = new Comparator<NamedElement>() {
public int compare(NamedElement o1, NamedElement o2) {
String s1 = list.generateLabel(o1);
String s2 = list.generateLabel(o2);
return s1.compareTo(s2);
}
};
Collections.sort(namedElements, comp);
for (NamedElement n : namedElements) {
this.list.add(n);
}
this.list.selectFirst();
}
}