/******************************************************************************* * Copyright (c) 2014-2016 IncQuery Labs Ltd. * 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: * Akos Horvath, Abel Hegedus, Zoltan Ujhelyi - initial API and implementation *******************************************************************************/ package org.eclipse.viatra.examples.cps.view; import java.util.Collection; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.gef.layout.ILayoutAlgorithm; import org.eclipse.gef.layout.algorithms.SpaceTreeLayoutAlgorithm; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import org.eclipse.viatra.addon.viewers.runtime.model.ViatraViewerDataModel; import org.eclipse.viatra.addon.viewers.runtime.model.ViewerDataFilter; import org.eclipse.viatra.addon.viewers.runtime.model.ViewerState; import org.eclipse.viatra.addon.viewers.runtime.model.ViewerState.ViewerStateFeature; import org.eclipse.viatra.addon.viewers.runtime.model.listeners.IViewerStateListener; import org.eclipse.viatra.addon.viewers.runtime.notation.Containment; import org.eclipse.viatra.addon.viewers.runtime.notation.Edge; import org.eclipse.viatra.addon.viewers.runtime.notation.Item; import org.eclipse.viatra.addon.viewers.runtime.zest.ViatraGraphViewers; import org.eclipse.viatra.examples.cps.cyberPhysicalSystem.presentation.CyberPhysicalSystemEditor; import org.eclipse.viatra.integration.zest.viewer.ModifiableZestContentViewer; import org.eclipse.viatra.integration.zest.viewer.ZestContentViewer; import org.eclipse.viatra.query.runtime.api.IQuerySpecification; import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; import org.eclipse.viatra.query.runtime.emf.EMFScope; import org.eclipse.viatra.query.runtime.exception.ViatraQueryException; import com.google.common.collect.ImmutableSet; public abstract class AbstractCpsViewPart extends ViewPart implements IPartListener2 { private ModifiableZestContentViewer viewer; private ViatraQueryEngine engine = null; protected IEditorPart activeEditor; public AbstractCpsViewPart() { IWorkbenchPage workbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); workbenchPage.addPartListener(this); } protected ViatraQueryEngine getEngine() { return engine; } protected abstract Collection<IQuerySpecification<?>> getSpecifications() throws ViatraQueryException; @Override public void createPartControl(Composite parent) { this.viewer = new ModifiableZestContentViewer(); viewer.createControl(parent, SWT.BORDER); } @Override public void setFocus() { viewer.getControl().setFocus(); } protected void engineUpdated() { try { ViewerState state = ViatraViewerDataModel.newViewerState(getEngine(), getSpecifications(), ViewerDataFilter.UNFILTERED, ImmutableSet.of(ViewerStateFeature.EDGE, ViewerStateFeature.CONTAINMENT)); ViatraGraphViewers.bind(viewer, state, true); viewer.setLayoutAlgorithm(getLayout()); } catch (ViatraQueryException e) { e.printStackTrace(); } } protected ILayoutAlgorithm getLayout() { return new SpaceTreeLayoutAlgorithm(); } @Override public void partActivated(IWorkbenchPartReference partRef) { activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (activeEditor instanceof CyberPhysicalSystemEditor) { CyberPhysicalSystemEditor edp = (CyberPhysicalSystemEditor) activeEditor; ResourceSet resourceSet = edp.getEditingDomain().getResourceSet(); if(engine != null && resourceSet == engine.getScope()) return; try { engine = ViatraQueryEngine.on(new EMFScope(resourceSet)); } catch (ViatraQueryException e) { e.printStackTrace(); } engineUpdated(); } } @Override public void partBroughtToTop(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } @Override public void partClosed(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } @Override public void partDeactivated(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } @Override public void partOpened(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } @Override public void partHidden(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } @Override public void partVisible(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } @Override public void partInputChanged(IWorkbenchPartReference partRef) { // TODO Auto-generated method stub } }