| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2007 IBM Corporation and others. |
| // 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: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.migration.diagram; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.epf.library.util.ResourceUtil; |
| import org.eclipse.epf.library.xmi.IDiagramMigration; |
| import org.eclipse.epf.migration.diagram.ad.services.WorkflowExportService; |
| import org.eclipse.epf.migration.diagram.util.MigrationUtil; |
| import org.eclipse.epf.persistence.MultiFileResourceSetImpl; |
| import org.eclipse.epf.uma.Activity; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.epf.uma.Process; |
| import org.eclipse.epf.uma.ProcessPackage; |
| import org.eclipse.epf.uma.util.UmaUtil; |
| |
| /** |
| * Implementation class for digram migration |
| * |
| * @author Weiping Lu - April 04, 2007 |
| * @since 1.2 |
| */ |
| public class DiagramMigration implements IDiagramMigration { |
| |
| protected boolean debug; |
| |
| public void migrate(Collection<Process> processes) throws Exception { |
| // debug |
| debug = DiagramMigrationPlugin.getDefault().isDebugging(); |
| |
| WorkflowExportService service = new WorkflowExportService(); |
| |
| int errorCount = 0; |
| MethodLibrary lib = null; |
| |
| for (Iterator<Process> it = processes.iterator(); it.hasNext();) { |
| Process proc = it.next(); |
| if (lib == null) { |
| lib = UmaUtil.getMethodLibrary(proc); |
| } |
| |
| if (debug) { |
| System.out.println("LD> proc: " + proc); //$NON-NLS-1$ |
| System.out.println("LD> proc.eResource(): " + proc.eResource());//$NON-NLS-1$ |
| if (proc.eResource() != null) { |
| System.out.println("LD> proc.eResource().getURI(): " + proc.eResource()); //$NON-NLS-1$ |
| } |
| } |
| |
| String modelFilePath = proc.eResource() == null ? null : |
| proc.eResource().getURI().toFileString(); |
| if (modelFilePath == null) { |
| continue; |
| } |
| |
| File cpFolderPath = new File(modelFilePath).getParentFile(); |
| String diagramFilePath = cpFolderPath.getAbsolutePath() + File.separator + |
| "diagram.xmi"; //$NON-NLS-1$ |
| File diagramFile = new File(diagramFilePath); |
| if (diagramFile.exists()) { |
| diagramFile.delete(); |
| System.out.println("LD> Deleted diagramFile: " + diagramFile);//$NON-NLS-1$ |
| ResourceUtil.refreshResources(lib, null); |
| } |
| //diagramFile.createNewFile(); |
| if (debug) { |
| System.out.println("LD> diagramFile: " + diagramFile);//$NON-NLS-1$ |
| } |
| try { |
| service.export(proc, proc, "diagram.xmi", cpFolderPath); //$NON-NLS-1$ |
| } catch (Exception e) { |
| errorCount++; |
| if (debug) { |
| System.out.println("LD> failed: " + diagramFile); //$NON-NLS-1$ |
| } |
| } |
| } |
| if (debug) { |
| System.out.println("LD> processes.size(): " + processes.size()); //$NON-NLS-1$ |
| System.out.println("LD> errorCount: " + errorCount); //$NON-NLS-1$ |
| System.out.println(""); //$NON-NLS-1$ |
| } |
| |
| removeOldDiagrams(processes, lib); |
| |
| } |
| |
| private void removeOldDiagrams(Collection<Process> processes, MethodLibrary lib) { |
| if (lib == null) { |
| return; |
| } |
| boolean needSave = false; |
| if (debug) { |
| System.out.println("LD> removeOldDiagrams ..."); //$NON-NLS-1$ |
| } |
| for (Iterator<Process> it = processes.iterator(); it.hasNext();) { |
| Process proc = it.next(); |
| boolean dirty = false; |
| try { |
| Map activities = MigrationUtil.getActivities(proc, true); |
| for (Iterator iit = activities.values().iterator(); iit.hasNext();) { |
| Activity act = (Activity) iit.next(); |
| EObject container = act.eContainer(); |
| if (container instanceof ProcessPackage) { |
| ProcessPackage pkg = (ProcessPackage) container; |
| if (! pkg.getDiagrams().isEmpty()) { |
| ArrayList removeList = new ArrayList(pkg.getDiagrams()); |
| pkg.getDiagrams().removeAll(removeList); |
| dirty = true; |
| if (debug) { |
| System.out.println("LD> proc: " + proc); //$NON-NLS-1$ |
| System.out.println("LD> pkg: "); //$NON-NLS-1$ |
| } |
| } |
| } |
| } |
| if (dirty) { |
| proc.eResource().setModified(true); |
| needSave = true; |
| } |
| } catch (Exception e) { |
| if (debug) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| if (needSave) { |
| Resource resource = lib.eResource(); |
| MultiFileResourceSetImpl resourceSet = (MultiFileResourceSetImpl) resource.getResourceSet(); |
| Map saveOptions = resourceSet.getDefaultSaveOptions(); |
| try { |
| resourceSet.save(saveOptions, true); |
| } catch (Exception e) { |
| if (debug) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| } |
| |
| } |