/******************************************************************************* * Copyright (c) 2010-2015 Henshin developers. 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: * TU Berlin, University of Luxembourg, SES S.A. *******************************************************************************/ /** * HenshinSelectionUtil.java * created on 08.02.2012 21:11:16 */ package de.tub.tfs.henshin.editor.util; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Vector; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.henshin.model.Graph; import org.eclipse.emf.henshin.model.Module; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import de.tub.tfs.henshin.editor.editparts.graph.graphical.EdgeEditPart; import de.tub.tfs.henshin.editor.editparts.graph.graphical.GraphEditPart; import de.tub.tfs.henshin.editor.editparts.graph.graphical.NodeEditPart; import de.tub.tfs.henshin.editor.ui.graph.GraphPage; import de.tub.tfs.henshin.editor.ui.graph.GraphView; import de.tub.tfs.muvitor.ui.MuvitorPage; /** * @author huuloi * */ public class HenshinSelectionUtil { private static HenshinSelectionUtil instance = null; private HenshinSelectionUtil() { } public static synchronized HenshinSelectionUtil getInstance() { if (instance == null) { instance = new HenshinSelectionUtil(); } return instance; } /** * * @return all opened graph pages */ public List<GraphPage> getOpenedPages() { List<GraphPage> openedPages = new ArrayList<GraphPage>(); final IWorkbench workbench = PlatformUI.getWorkbench(); final IWorkbenchPage page = workbench.getActiveWorkbenchWindow() .getActivePage(); if (page != null) { IViewReference[] viewRefs = page.getViewReferences(); if (viewRefs != null) { for (IViewReference viewRef : viewRefs) { IViewPart viewPart = viewRef.getView(false); if (viewPart != null) { if (viewPart instanceof GraphView) { GraphView graphView = (GraphView) viewPart; if (graphView != null) { GraphPage openedPage = graphView .getCurrentGraphPage(); openedPages.add(openedPage); } } } } } } return openedPages; } /** * * @return the active page, if this page instance of GraphPage, otherwise * return null */ public MuvitorPage getActivePage() { MuvitorPage activePage = null; final IWorkbench workbench = PlatformUI.getWorkbench(); final IWorkbenchPage page = workbench.getActiveWorkbenchWindow() .getActivePage(); if (page != null) { IWorkbenchPart activePart = page.getActivePart(); if (activePart instanceof GraphView) { GraphView graphView = (GraphView) activePart; activePage = (MuvitorPage) graphView.getCurrentPage(); } } return activePage; } public GraphView getActiveGraphView(Graph graph) { GraphView graphView = null; final IWorkbench workbench = PlatformUI.getWorkbench(); final IWorkbenchPage page = workbench.getActiveWorkbenchWindow() .getActivePage(); if (page != null) { IViewReference[] viewRefs = page.getViewReferences(); if (viewRefs != null) { for (IViewReference viewRef : viewRefs) { IViewPart viewPart = viewRef.getView(false); if (viewPart != null) { if (viewPart instanceof GraphView) { GraphView viewer = (GraphView) viewPart; GraphPage graphPage = viewer.getCurrentGraphPage(); if (graphPage.getCastedModel() == graph) { graphView = viewer; } } } } } } return graphView; } /** * * @return all NodeEditPart in opened pages */ public List<NodeEditPart> getNodeEditParts() { List<GraphPage> openedPages = getOpenedPages(); List<NodeEditPart> nodes = new ArrayList<NodeEditPart>(); List<GraphEditPart> graphEditParts = new ArrayList<GraphEditPart>(); for (GraphPage page : openedPages) { graphEditParts.add((GraphEditPart) page.getCurrentViewer() .getEditPartRegistry().get(page.getCastedModel())); } for (GraphEditPart graphEditPart : graphEditParts) { List<?> children = graphEditPart.getChildren(); for (Object object : children) { if (object instanceof NodeEditPart) { NodeEditPart node = (NodeEditPart) object; nodes.add(node); } } } return nodes; } public List<NodeEditPart> getNodeEditParts(Graph graph) { List<NodeEditPart> nodeEditParts = new ArrayList<NodeEditPart>(); GraphView graphView = getActiveGraphView(graph); GraphPage graphPage = graphView.getCurrentGraphPage(); Object object = graphPage.getCurrentViewer().getEditPartRegistry().get(graph); if (object instanceof GraphEditPart) { GraphEditPart graphEditPart = (GraphEditPart) object; List<?> children = graphEditPart.getChildren(); for (Object obj : children) { if (obj instanceof NodeEditPart) { NodeEditPart nodeEditPart = (NodeEditPart) obj; nodeEditParts.add(nodeEditPart); } } } return nodeEditParts; } public List<EdgeEditPart> getEdgeEditParts(Graph graph) { List<EdgeEditPart> edgeEditParts = new ArrayList<EdgeEditPart>(); GraphView graphView = getActiveGraphView(graph); GraphPage graphPage = graphView.getCurrentGraphPage(); Object object = graphPage.getCurrentViewer().getEditPartRegistry().get(graph); if (object instanceof GraphEditPart) { GraphEditPart graphEditPart = (GraphEditPart) object; List<?> children = graphEditPart.getChildren(); for (Object obj : children) { if (obj instanceof EdgeEditPart) { EdgeEditPart edgeEditPart = (EdgeEditPart) obj; edgeEditParts.add(edgeEditPart); } } } return edgeEditParts; } public List<EClass> getNodeTypes() { List<EClass> eClasses = new Vector<EClass>(); List<Graph> graphs = getOpenedGraphs(); for (Graph graph : graphs) { eClasses.addAll(NodeTypes.getNodeTypes(graph, true)); } return eClasses; } /** * * @return all opened graphs */ public List<Graph> getOpenedGraphs() { List<GraphPage> openedPages = getOpenedPages(); List<Graph> graphs = new ArrayList<Graph>(); for (GraphPage page : openedPages) { graphs.add(page.getCastedModel()); } return graphs; } /** * * @return the Module object */ public Module getTransformationSystem() { Module transformationSystem = null; List<GraphPage> openedPages = getOpenedPages(); if (!openedPages.isEmpty()) { GraphPage graphPage = openedPages.get(0); Graph graph = graphPage.getCastedModel(); transformationSystem = ModelUtil.getModelRoot(graph, Module.class); } return transformationSystem; } /** * * @return all imported EPackages */ public List<EPackage> getImportedEPackages() { List<EPackage> ePackages = new ArrayList<EPackage>(); Module transformationSystem = getTransformationSystem(); if (transformationSystem != null) { ePackages = transformationSystem.getImports(); } return ePackages; } /** * * @param ePackage * the given EPackage * @return all node types of ePackage */ public List<EClass> getAllNodeTypeOf(EPackage ePackage) { return NodeTypes.getNodeTypesOfEPackage(ePackage, true); } public Map<?, ?> getEditPartRegistry(Graph graph) { GraphView graphView = getActiveGraphView(graph); GraphPage graphPage = graphView.getCurrentGraphPage(); Map<?, ?> editPartRegistry = graphPage.getCurrentViewer().getEditPartRegistry(); return editPartRegistry; } }