| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 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.export.services; |
| |
| import java.io.File; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.epf.common.utils.FileUtil; |
| import org.eclipse.epf.export.ExportPlugin; |
| import org.eclipse.epf.export.ExportResources; |
| import org.eclipse.epf.persistence.MultiFileSaveUtil; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.epf.uma.MethodPackage; |
| import org.eclipse.epf.uma.MethodPlugin; |
| |
| |
| /** |
| * Exports a library configuration specification. |
| * |
| * @author Jinhua Xi |
| * @since 1.0 |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=162153 |
| */ |
| public class ConfigurationSpecsExportService extends BaseExportService { |
| |
| private ConfigurationExportData data; |
| |
| /** |
| * Creates a new instance. |
| */ |
| public ConfigurationSpecsExportService(ConfigurationExportData data) { |
| this.data = data; |
| } |
| |
| /** |
| * Run to export a configuration specificaiton. |
| */ |
| public void run(IProgressMonitor monitor) { |
| if (data.selectedConfigs == null || data.selectedConfigs.size() == 0) { |
| return; |
| } |
| |
| monitor.setTaskName(ExportResources.ConfigurationSpecsExportService_MSG0); |
| |
| // Create the export library folder. |
| File libFolder; |
| File exportLibFolder; |
| |
| String exportLibPath = (new File(data.llData.getParentFolder())).getAbsolutePath(); |
| exportLibFolder = new File(exportLibPath); |
| if (!exportLibFolder.exists()) { |
| exportLibFolder.mkdir(); |
| } |
| |
| MethodConfiguration config = (MethodConfiguration) data.selectedConfigs |
| .get(0); |
| MethodLibrary lib = (MethodLibrary) config.eContainer(); |
| URI uri = lib.eResource().getURI(); |
| String path = uri.toFileString(); |
| libFolder = (new File(path)).getParentFile(); |
| |
| // Prepare the id selections, |
| getSelectedIds(data.selectedConfigs); |
| |
| // Load the library.xmi and remove unneeded elements. |
| LibraryDocument document = processLibraryFile(new File(libFolder, libraryFile), new File( |
| exportLibFolder, exportFile)); |
| |
| if ( document != null ) { |
| // copy the conifuration files |
| // 143033 - update config specs' importing and exporting to match with the new file format |
| copyConfigurationFiles(document, libFolder, exportLibFolder); |
| } |
| |
| monitor.setTaskName(ExportResources.ConfigurationSpecsExportService_MSG1); |
| |
| } |
| |
| private void copyConfigurationFiles(LibraryDocument document, File libFolder, File exportLibFolder) { |
| // 143033 - update config specs' importing and exporting to match with the new file format |
| for (Iterator it = data.selectedConfigs.iterator(); it.hasNext();) { |
| MethodConfiguration config = (MethodConfiguration) it.next(); |
| String guid = config.getGuid(); |
| String uri = document.getResourceUri(guid); |
| String srcUri = null; |
| if (uri == null) { |
| URI resUri = config.eResource().getURI(); |
| srcUri = resUri.toFileString(); |
| uri = MultiFileSaveUtil.METHOD_CONFIGURATION_FOLDER_NAME + File.separator + resUri.lastSegment(); |
| uri = document.decodeUri(uri); |
| } |
| if ( uri != null ) { |
| File src = srcUri == null ? new File(libFolder, uri) : new File(srcUri); |
| File target = new File(exportLibFolder, uri); |
| FileUtil.copyFile(src, target); |
| } |
| } |
| } |
| |
| private void getSelectedIds(List configs) { |
| selectedIds.clear(); |
| selectedPluginNames.clear(); |
| |
| // Get selected config ids. |
| if (configs == null || configs.size() == 0) { |
| return; |
| } |
| |
| for (Iterator it = configs.iterator(); it.hasNext();) { |
| MethodConfiguration config = (MethodConfiguration) it.next(); |
| String guid = config.getGuid(); |
| if (selectedIds.contains(guid)) { |
| continue; |
| } |
| |
| // Add the configuration. |
| selectedIds.add(guid); |
| |
| // For each configuration, we need to save the method plugin ids and |
| // method package ids so that their entries in the resource file can |
| // be kept. |
| List refs = config.eCrossReferences(); |
| for (Iterator itr = refs.iterator(); itr.hasNext();) { |
| Object o = itr.next(); |
| if (o instanceof MethodPlugin || o instanceof MethodPackage) { |
| guid = ((MethodElement) o).getGuid(); |
| if (!selectedIds.contains(guid)) { |
| selectedIds.add(guid); |
| } |
| } else { |
| ExportPlugin |
| .getDefault() |
| .getLogger() |
| .logError( |
| "Unexpected element type '" + ((MethodElement) o).getType().getName() //$NON-NLS-1$ |
| + "' in configuration '" + config.getName() + "'"); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| } |
| } |
| } |