/******************************************************************************* * 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.editor.actions.transSys; import java.io.IOException; 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.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import de.tub.tfs.henshin.editor.editparts.graph.tree.GraphTreeEditPart; import de.tub.tfs.henshin.editor.util.ResourceUtil; import de.tub.tfs.muvitor.ui.utils.EMFModelManager; 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..."); setImageDescriptor(ResourceUtil.ICONS.EXPORT.descr(16)); 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; } } return false; } @Override public void run() { ResourceDialog dialog = new ResourceDialog(getWorkbenchPart().getSite() .getShell(), "Please select a file name: ", 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); } } } // EMFModelManager modelManager = new EMFModelManager(""); // URI uri = urIs.get(0); // Path path = uri.isPlatform() ? new Path(urIs.get(0) // .toPlatformString(true)) : new Path(uri.toFileString()); // List<EObject> obj = modelManager.load(path, // new LinkedList<EObject>()); // HenshinGraph gr = new HenshinGraph(graph); // // obj.addAll(gr.getRootObjects()); // for (EObject eObject : gr.getRootObjects()) { // EList<EStructuralFeature> features = eObject.eClass() // .getEAllStructuralFeatures(); // for (EStructuralFeature feature : features) { // if (feature.getDefaultValueLiteral() == null) { // ((EStructuralFeatureImpl) feature) // .setDefaultValueLiteral(""); // } // } // } // try { // // modelManager.save(path, uri.isPlatform()); // } catch (IOException e) { // e.printStackTrace(); // } // for (EObject eObject : gr.getRootObjects()) { // 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); } } }