/******************************************************************************* * 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. *******************************************************************************/ package de.tub.tfs.henshin.tggeditor.actions.exports; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.ui.dialogs.ResourceDialog; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.impl.EStructuralFeatureImpl; import org.eclipse.emf.henshin.interpreter.util.HenshinEGraph; import org.eclipse.emf.henshin.model.Graph; import org.eclipse.gef.EditPart; import org.eclipse.gef.ui.actions.SelectionAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import de.tub.tfs.henshin.tggeditor.editparts.tree.graphical.GraphTreeEditPart; import de.tub.tfs.muvitor.ui.utils.EMFModelManager; //import de.tub.tfs.henshin.editor.editparts.tree.graph.GraphTreeEditPart; //import de.tub.tfs.henshin.editor.editparts.tree.rule.GraphElementsTreeEditPart; //import de.tub.tfs.henshin.editor.internal.GraphElementsContainterEObject; //import de.tub.tfs.henshin.editor.util.IconUtil; public class ExportInstanceModelAction extends SelectionAction { /** The Constant ID. */ public static final String ID = "henshineditor.actions.ExportInstanceModelAction"; /** The graph. */ private Graph graph; public ExportInstanceModelAction(IWorkbenchPart part) { super(part); setId(ID); setText("Export an instance model."); // setImageDescriptor(IconUtil.getDescriptor("attr16.png")); setToolTipText("Export an instance model."); } /* (non-Javadoc) * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() */ @Override protected boolean calculateEnabled() { List<?> selectedObjects = getSelectedObjects(); if (selectedObjects.size() != 1) { return false; } Object selectedObject = selectedObjects.get(0); if ((selectedObject instanceof EditPart)) { EditPart editpart = (EditPart) selectedObject; if (editpart instanceof GraphTreeEditPart) { graph = (Graph) editpart.getModel(); return true; } // if (editpart instanceof GraphElementsTreeEditPart) { // graph = ((GraphElementsContainterEObject) editpart.getModel()).getModel(); // return true; // } } return false; } @Override public void run() { Shell shell = new Shell(); ResourceDialog dialog = new ResourceDialog(shell, "Please select a file name for the instance graph.", SWT.SAVE + SWT.SINGLE); //FileDialog dialog = new FileDialog(shell); //dialog.setFilterExtensions(new String[]{"*.ecore"}); //dialog. int p = dialog.open(); if (p == SWT.CANCEL || p == 1){ MessageDialog.open(SWT.ERROR, PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage() .getActivePart().getSite().getShell(), "Cannot save instance graph.", "Please select a valid file name.",SWT.SHEET ); return; } List<URI> urIs = dialog.getURIs(); if (urIs.isEmpty()){ MessageDialog.open(SWT.ERROR, PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage() .getActivePart().getSite().getShell(), "Cannot save instance graph.", "Please select a valid file name.",SWT.SHEET ); return; } //for (URI uri : urIs) { try { EMFModelManager modelManager = EMFModelManager.createModelManager(""); Path path = new Path(urIs.get(0).toPlatformString(true)); // List<EObject> obj = modelManager.load(path,new LinkedList<EObject>()); HenshinEGraph gr = new HenshinEGraph(graph); // obj.addAll(gr.getRoots()); for (EObject eObject : gr.getRoots()) { EList<EStructuralFeature> features = eObject.eClass().getEAllStructuralFeatures(); for (EStructuralFeature feature : features) { if (feature.getDefaultValueLiteral() == null){ ((EStructuralFeatureImpl)feature).setDefaultValueLiteral(""); } } } try { modelManager.save(path,gr.getRoots().toArray(new EObject[0])); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } for (EObject eObject : gr.getRoots()) { EList<EStructuralFeature> features = eObject.eClass().getEAllStructuralFeatures(); for (EStructuralFeature feature : features) { if (feature.getDefaultValueLiteral() == null){ feature.setDefaultValueLiteral(null); } } } //} //resourceSet.getURIConverter().getURIMap().put(uri, URI.createFileURI(p)); } catch (NullPointerException ex){ MessageDialog.open(SWT.ERROR, PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage() .getActivePart().getSite().getShell(), "Cannot save instance graph.", "Please select a valid file name.",SWT.SHEET ); } shell.dispose(); super.run(); } }