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.ecore.EObject;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.FilteringStyle;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.uml2.diagram.clazz.part.CustomMessages;
import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.uml2.uml.VisibilityKind;
public class UMLDetailLevelService {
public static final String SORT_BY_VISIBILITY = "org.eclipse.uml2.diagram.clazz.sort.visibility"; //$NON-NLS-1$
public static final String FILTER_BY_VISIBILITY = "org.eclipse.uml2.diagram.clazz.filter.visibility"; //$NON-NLS-1$
public static UMLDetailLevel getLevel(View view) {
Diagram diagram = view.getDiagram();
if (diagram == null) {
// XXX: workaround for 186343
// it is unclear why notification goes to
// edit part for just deleted view
return DEFAULT_LEVEL;
}
FilteringStyle style = (FilteringStyle) diagram.getStyle(NotationPackage.eINSTANCE.getFilteringStyle());
if (style == null) {
return DEFAULT_LEVEL;
}
List<String> keys = getFilteringKeysImpl(style);
return keys.isEmpty() ? DEFAULT_LEVEL : getLevel(keys.get(0));
}
public static UMLDetailLevel getLevel(String id) {
if (ID_DETAIL_LEVEL_ANALYSIS.equals(id)) {
return ANALYSIS_LEVEL;
}
if (ID_DETAIL_LEVEL_DETAILS_SUPPRESSED.equals(id)) {
return DETAILS_SUPPRESSED_LEVEL;
}
if (ID_DETAIL_LEVEL_IMPLEMENTATION.equals(id)) {
return IMPLEMENTATION_LEVEL;
}
return EMPTY_LEVEL;
}
public static List<View> filterChildrenByVisibility(View view) {
if (view == null) {
return Collections.emptyList();
}
EList<?> visibleChildren = view.getVisibleChildren();
List<View> result = new ArrayList<View>();
for (Object child : visibleChildren) {
if (child instanceof View) {
EObject childElement = ((View) child).getElement();
if (childElement instanceof NamedElement && ((NamedElement) childElement).getVisibility() != VisibilityKind.PUBLIC_LITERAL) {
result.add((View) child);
}
}
}
return result;
}
public static final UMLDetailLevel DETAILS_SUPPRESSED_LEVEL = new DetailsSuppressedLevel();
public static final UMLDetailLevel IMPLEMENTATION_LEVEL = new ImplementationLevel();
public static final UMLDetailLevel ANALYSIS_LEVEL = new AnalysisLevel();
public static final UMLDetailLevel DEFAULT_LEVEL = IMPLEMENTATION_LEVEL;
public static final String ID_DETAIL_LEVEL_IMPLEMENTATION = ImplementationLevel.ID;
public static final String ID_DETAIL_LEVEL_ANALYSIS = AnalysisLevel.ID;
public static final String ID_DETAIL_LEVEL_DETAILS_SUPPRESSED = DetailsSuppressedLevel.ID;
public static final UMLDetailLevel EMPTY_LEVEL = new UMLDetailLevel() {
@Override
public void init(View view) {
// nothing to do
}
};
@SuppressWarnings("unchecked")//$NON-NLS-1$
private static List<String> getFilteringKeysImpl(FilteringStyle style) {
return style.getFilteringKeys();
}
}