/** * Copyright (c) 2005-2008 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 - Initial API and implementation */ package org.eclipse.emf.exporter.ui.contribution.base; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbench; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.codegen.ecore.genmodel.provider.GenModelEditPlugin; import org.eclipse.emf.common.ui.dialogs.DiagnosticDialog; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.DiagnosticException; import org.eclipse.emf.common.util.Monitor; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.converter.ui.contribution.base.ModelConverterWizard; import org.eclipse.emf.exporter.ExporterPlugin; import org.eclipse.emf.exporter.ModelExporter; import org.osgi.service.prefs.BackingStoreException; /** * @since 2.2.0 */ public abstract class ModelExporterWizard extends ModelConverterWizard { protected static final String PREFERENCE_SAVE_EXPORTER = "ModelExporterWizard.SaveExporter"; protected static final String PREFERENCE_SAVE_PACKAGE_URI = "ModelExporterWizard.SavePackageURI"; public ModelExporter getModelExporter() { return (ModelExporter)getModelConverter(); } @Override public void init(IWorkbench workbench, IStructuredSelection selection) { super.init(workbench, selection); Object object = selection.getFirstElement(); try { if (object instanceof IFile) { URI uri = URI.createPlatformResourceURI(((IFile)object).getFullPath().toString(), true); getModelExporter().loadGenModel(uri); } else if (object instanceof GenModel) { getModelExporter().setGenModel((GenModel)object); } } catch (DiagnosticException exception) { Diagnostic diagnostic = exception.getDiagnostic(); DiagnosticDialog.openProblem (getShell(), GenModelEditPlugin.INSTANCE.getString("_UI_ModelProblems_title"), ExporterPlugin.INSTANCE.getString("_UI_InvalidModel_message"), diagnostic); } readPreferencesSettings(); if (getModelExporter().getDirectoryURI() == null) { GenModel genModel = getModelExporter().getGenModel(); if (genModel != null && genModel.eResource() != null) { URI uri = genModel.eResource().getURI().trimSegments(1); getModelExporter().setDirectoryURI(uri.toString() + "/"); } } } protected void readPreferencesSettings() { IPreferencesService preferencesService = Platform.getPreferencesService(); ModelExporter modelExporter = getModelExporter(); modelExporter.setSaveEPackageArtifactURI(preferencesService.getBoolean(ExporterPlugin.ID, PREFERENCE_SAVE_PACKAGE_URI, false, null)); modelExporter.setSaveExporter(preferencesService.getBoolean(ExporterPlugin.ID, PREFERENCE_SAVE_EXPORTER, false, null)); } @SuppressWarnings("deprecation") private static final InstanceScope INSTANCE_SCOPE = new InstanceScope(); protected void writePreferencesSettings() { IEclipsePreferences node = INSTANCE_SCOPE.getNode(ExporterPlugin.ID); ModelExporter modelExporter = getModelExporter(); node.putBoolean(PREFERENCE_SAVE_PACKAGE_URI, modelExporter.isSaveEPackageArtifactURI()); node.putBoolean(PREFERENCE_SAVE_EXPORTER, modelExporter.isSaveExporter()); try { node.flush(); } catch (BackingStoreException exception) { ExporterPlugin.INSTANCE.log(exception); } } @Override protected Diagnostic doPerformFinish(Monitor monitor) throws Exception { Diagnostic diagnostic = getModelExporter().export(monitor); getModelExporter().save(); writePreferencesSettings(); return diagnostic; } }