/* * Copyright (c) 2006, 2007 Borland Software Corporation * * 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: * Alexander Fedorov (Borland) - initial API and implementation */ package org.eclipse.gmf.internal.bridge.transform; import java.lang.reflect.InvocationTargetException; 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.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.gmf.internal.bridge.ui.Plugin; import org.eclipse.gmf.internal.common.ui.ModelSelectionPage; import org.eclipse.gmf.internal.common.ui.ResourceLocationProvider; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.ui.actions.WorkspaceModifyOperation; public class ModelConfigurationPage extends ModelSelectionPage { public ModelConfigurationPage(String pageId, ResourceLocationProvider rlp, ResourceSet resourceSet) { super(pageId, rlp, resourceSet); } @Override protected Resource loadResource() { Resource current = getResource(); if (current != null) { current.getResourceSet().getResources().remove(current); } final Resource[] result = new Resource[1]; WorkspaceModifyOperation initializeOperation = new WorkspaceModifyOperation() { protected void execute(IProgressMonitor progressMonitor) throws CoreException { IProgressMonitor monitor = null; try { monitor = (progressMonitor != null) ? new SubProgressMonitor(progressMonitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK) : new NullProgressMonitor(); setStatusMessage(Status.OK_STATUS); result[0] = doLoadResource(monitor); } catch (CoreException exception) { throw exception; } catch (Exception exception) { throw new CoreException(Plugin.createError(exception.getMessage(), exception)); } finally { if (monitor != null) { monitor.done(); } } } }; try { getContainer().run(false, false, initializeOperation); setStatusMessage(Status.OK_STATUS); } catch (InvocationTargetException e) { Throwable target = e.getTargetException(); if (target instanceof CoreException) { CoreException ce = (CoreException) target; setStatusMessage(ce.getStatus()); } else { setStatusMessage(Plugin.createError(target.getMessage(), target)); } } catch (InterruptedException e) { setStatusMessage(Status.CANCEL_STATUS); } return result[0]; } protected Resource doLoadResource(IProgressMonitor monitor) throws CoreException { try { Resource r = super.loadResource(); return r; } catch (Exception e) { throw new CoreException(Plugin.createError(e.getMessage(), e)); } finally { if (monitor != null) { monitor.done(); } } } void setStatusMessage(IStatus status) { if (status == null || status.isOK()) { setMessage(null); setErrorMessage(null); } else if (IStatus.INFO == status.getSeverity()) { setMessage(status.getMessage(), IMessageProvider.INFORMATION); setErrorMessage(null); } else if (IStatus.WARNING == status.getSeverity()) { setMessage(status.getMessage(), IMessageProvider.WARNING); setErrorMessage(null); } else if (IStatus.ERROR == status.getSeverity()) { setMessage(null); setErrorMessage(status.getMessage()); } else if (IStatus.CANCEL == status.getSeverity()) { setMessage(null); setErrorMessage(status.getMessage()); } } }