package org.eclipse.uml2.diagram.clazz.details;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.FilteringStyle;
import org.eclipse.gmf.runtime.notation.NotationFactory;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.uml2.diagram.clazz.edit.parts.AssociationClassAttributesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.AssociationClassClassesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.AssociationClassOperationsEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.ClassAttributesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.ClassClassesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.ClassOperationsEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.DataTypeAttributesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.DataTypeOperationsEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.EnumerationAttributesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.EnumerationLiteralEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.EnumerationOperationsEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.InterfaceAttributesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.InterfaceClassesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.InterfaceOperationsEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.PackageClassifiersEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.PackageOtherEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.PrimitiveTypeAttributesEditPart;
import org.eclipse.uml2.diagram.clazz.edit.parts.PrimitiveTypeOperationsEditPart;
import org.eclipse.uml2.diagram.clazz.part.CustomMessages;
public abstract class UMLDetailLevel {
public abstract void init(View view);
public ParserOptions getParserOptions() {
return ParserOptions.NONE;
}
public String getLabel() {
return CustomMessages.UMLDetailLevel_none_detail_level;
}
public List<EditElementCommand> getApplyCommands(TransactionalEditingDomain editingDomain, View view) {
return Collections.emptyList();
}
public List<EditElementCommand> getUnapplyCommands(TransactionalEditingDomain editingDomain, View view) {
return Collections.emptyList();
}
public List<View> getAffectedViews(Diagram diagram) {
ArrayList<View> result = new ArrayList<View>();
// we use Views as EditPart doesn't return invisible children
EList<?> classifiers = diagram.getChildren();
for (Object classifier : classifiers) {
List<?> compartments = ((View) classifier).getChildren();
for (Object compartment : compartments) {
if (isAffected(compartment)) {
View view = (View) compartment;
result.add(view);
}
}
}
return result;
}
public boolean isAffected(Object compartment) {
return compartment instanceof View && oursAffectedVIDs.contains(((View) compartment).getType());
}
private static List<String> oursAffectedVIDs = new ArrayList<String>();
static {
oursAffectedVIDs.add(String.valueOf(AssociationClassAttributesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(AssociationClassOperationsEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(AssociationClassClassesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(ClassAttributesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(ClassOperationsEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(ClassClassesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(DataTypeAttributesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(DataTypeOperationsEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(EnumerationAttributesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(EnumerationOperationsEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(EnumerationLiteralEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(InterfaceAttributesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(InterfaceOperationsEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(InterfaceClassesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(PackageClassifiersEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(PackageOtherEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(PrimitiveTypeAttributesEditPart.VISUAL_ID));
oursAffectedVIDs.add(String.valueOf(PrimitiveTypeOperationsEditPart.VISUAL_ID));
}
public EditElementCommand getSetLevelCommand(TransactionalEditingDomain editingDomain, Diagram diagram) {
List<String> filteringKeys = Collections.singletonList(getId());
FilteringStyle style = (FilteringStyle) diagram.getStyle(NotationPackage.eINSTANCE.getFilteringStyle());
SetRequest setKeysRequest;
if (style == null) {
style = NotationFactory.eINSTANCE.createFilteringStyle();
style.setFilteringKeys(filteringKeys);
setKeysRequest = new SetRequest(editingDomain, diagram, NotationPackage.eINSTANCE.getView_Styles(), style);
} else {
setKeysRequest = new SetRequest(editingDomain, style, NotationPackage.eINSTANCE.getFilteringStyle_FilteringKeys(), filteringKeys);
}
return new SetValueCommand(setKeysRequest);
}
public String getId() {
return ""; //$NON-NLS-1$
}
}