/** | |
* Copyright (c) 2010-2012 ISBAN S.L | |
* | |
* 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: | |
* Ruben De Dios (ISBAN S.L) | |
* Andrez Alvarez Mattos (ISBAN S.L) | |
*/ | |
package org.eclipse.gmf.tooling.simplemap.migrate.ui; | |
import java.text.MessageFormat; | |
import org.eclipse.core.runtime.CoreException; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.core.runtime.NullProgressMonitor; | |
import org.eclipse.core.runtime.Status; | |
import org.eclipse.core.runtime.SubProgressMonitor; | |
import org.eclipse.emf.common.util.URI; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.emf.ecore.resource.ResourceSet; | |
import org.eclipse.gmf.internal.common.migrate.ModelLoadHelper; | |
import org.eclipse.gmf.mappings.Mapping; | |
//[artem] XXX Why it's in the bridge.ui??? | |
public class TransformToSimpleMappingOperation { | |
private Mapping myMapping; | |
private final ResourceSet myResourceSet; | |
public TransformToSimpleMappingOperation(ResourceSet rs) { | |
assert rs != null; | |
myResourceSet = rs; | |
} | |
public final ResourceSet getResourceSet() { | |
return myResourceSet; | |
} | |
Mapping getMapping() { | |
return this.myMapping; | |
} | |
private void setMapping(Mapping m) { | |
this.myMapping = m; | |
} | |
public Mapping loadMappingModel(URI uri, IProgressMonitor pm) throws CoreException { | |
Mapping content = null; | |
IStatus status = Status.CANCEL_STATUS; | |
IProgressMonitor monitor = null; | |
try { | |
if (uri == null) { | |
throw new IllegalArgumentException(Messages.TransformToGenModelOperation_e_null_map_uri); | |
} | |
monitor = (pm != null) ? new SubProgressMonitor(pm, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); | |
String cancelMessage = Messages.TransformToGenModelOperation_e_map_load_cancelled; | |
monitor.beginTask("", 100); //$NON-NLS-1$ | |
subTask(monitor, 0, Messages.TransformToGenModelOperation_task_load, cancelMessage); | |
ModelLoadHelper loadHelper = new ModelLoadHelper(getResourceSet(), uri); | |
if (!loadHelper.isOK()) { | |
throw new CoreException(loadHelper.getStatus()); | |
} | |
subTask(monitor, 20, Messages.TransformToGenModelOperation_task_validate, cancelMessage); | |
EObject root = loadHelper.getContentsRoot(); | |
if (!(root instanceof Mapping)) { | |
String msg = MessageFormat.format(Messages.TransformToGenModelOperation_e_wrong_root_element, root.getClass().getName()); | |
status = Plugin.createError(msg, null); | |
throw new CoreException(status); | |
} | |
content = (Mapping) loadHelper.getContentsRoot(); | |
monitor.worked(60); | |
return content; | |
} catch (CoreException e) { | |
throw e; | |
} catch (Exception e) { | |
IStatus error = Plugin.createError(Messages.TransformToGenModelOperation_e_load_mapping_model, e); | |
throw new CoreException(error); | |
} finally { | |
setMapping(content); | |
if (monitor != null) { | |
monitor.done(); | |
} | |
} | |
} | |
private static void subTask(IProgressMonitor monitor, int ticks, String name, String cancelMessage) throws CoreException { | |
if (monitor == null) { | |
return; | |
} | |
if (monitor.isCanceled()) { | |
IStatus cancel = Plugin.createCancel(cancelMessage); | |
throw new CoreException(cancel); | |
} | |
if (ticks > 0) { | |
monitor.worked(ticks); | |
} | |
if (name != null) { | |
monitor.subTask(name); | |
} | |
} | |
} |