package com.intellij.lang.javascript.uml;
import com.intellij.diagram.*;
import com.intellij.diagram.actions.DiagramAddElementAction;
import com.intellij.diagram.extras.DiagramExtras;
import com.intellij.diagram.settings.DiagramConfigElement;
import com.intellij.diagram.settings.DiagramConfigGroup;
import com.intellij.diagram.util.DiagramUtils;
import com.intellij.lang.javascript.flex.FlexBundle;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* @author Kirill Safonov
* @author Konstantin Bulenkov
*/
public class FlashUmlExtras extends DiagramExtras<Object> {
private static final DiagramElementsProvider[] PROVIDERS = {new FlashUmlSupersProvider(), new FlashUmlImplementationsProvider()};
private static final FlashUmlDndProvider DND_PROVIDER = new FlashUmlDndProvider();
private static final DiagramConfigGroup[] ADDITIONAL_SETTINGS_GROUPS;
static {
DiagramConfigGroup dependenciesGroup = new DiagramConfigGroup(FlexBundle.message("uml.dependencies.settings.group.title"));
for (FlashUmlDependenciesSettingsOption option : FlashUmlDependenciesSettingsOption.values()) {
dependenciesGroup.addElement(new DiagramConfigElement(option.getDisplayName(), true));
}
ADDITIONAL_SETTINGS_GROUPS = new DiagramConfigGroup[]{dependenciesGroup};
}
@Override
public DiagramElementsProvider<Object>[] getElementsProviders() {
//noinspection unchecked
return PROVIDERS;
}
@Override
public FlashUmlDndProvider getDnDProvider() {
return DND_PROVIDER;
}
@Override
public DiagramAddElementAction getAddElementHandler() {
return DEFAULT_ADD_HANDLER;
}
@NotNull
@Override
public DiagramConfigGroup[] getAdditionalDiagramSettings() {
return ADDITIONAL_SETTINGS_GROUPS;
}
@Override
public Object getData(final String dataId, final List<DiagramNode<Object>> diagramNodes, final DiagramBuilder builder) {
if (!CommonDataKeys.NAVIGATABLE.is(dataId)) {
return null;
}
final List<DiagramEdge> edges = DiagramUtils.getSelectedEdges(builder);
if (edges.size() != 1) {
return null;
}
final DiagramEdge edge = edges.get(0);
if (edge instanceof FlashUmlEdge) {
DiagramRelationshipInfo relationship = edge.getRelationship();
return relationship instanceof FlashUmlRelationship ? ((FlashUmlRelationship)relationship).getElement() : null;
}
return null;
}
@Override
public boolean isExpandCollapseActionsImplemented() {
return true;
}
}