/*******************************************************************************
* Copyright (c) 2007, 2014 Borland Software 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:
* Borland Software Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.runtime.ui.wizards;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.m2m.internal.qvt.oml.common.MDAConstants;
import org.eclipse.m2m.internal.qvt.oml.common.MdaException;
import org.eclipse.m2m.internal.qvt.oml.common.launch.TargetUriData;
import org.eclipse.m2m.internal.qvt.oml.common.launch.TargetUriData.ContentProvider;
import org.eclipse.m2m.internal.qvt.oml.common.project.TransformationRegistry;
import org.eclipse.m2m.internal.qvt.oml.common.ui.controls.UniSelectTransformationControl;
import org.eclipse.m2m.internal.qvt.oml.common.ui.controls.UniSelectTransformationControl.ISelectionListener;
import org.eclipse.m2m.internal.qvt.oml.common.ui.launch.TransformationControls;
import org.eclipse.m2m.internal.qvt.oml.common.ui.wizards.ITransformationSelector;
import org.eclipse.m2m.internal.qvt.oml.runtime.project.ITransformationMaker;
import org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtTransformation;
import org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtTransformation.TransformationParameter;
import org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtTransformationRegistry;
import org.eclipse.m2m.internal.qvt.oml.runtime.ui.launch.Messages;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
/**
* @author sboyko
*/
public class SelectInterpretedTransformationPage extends WizardPage implements ITransformationSelector {
public SelectInterpretedTransformationPage(String pageId, URI transfUri, List<TargetUriData> targetUris) {
super(pageId);
setDescription(org.eclipse.m2m.internal.qvt.oml.runtime.ui.wizards.Messages.SelectWorkspaceTransformationPage_Description);
myTransfUri = transfUri;
myTargetUris = targetUris;
}
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, true));
doCreateControl(composite);
setControl(composite);
setPageComplete(validatePage().isOK());
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, MDAConstants.QVTO_TRANSFORMATION_CONTEXTID);
}
protected void doCreateControl(Composite parent) {
ISelectionListener selectionListener = new UniSelectTransformationControl.SelectionListenerAdapter() {
public IStatus selectionChanged(URI uri) {
IStatus status = validatePage();
setPageComplete(status.isOK());
return status;
}
public boolean accept(URI uri) {
try {
QvtTransformation transformation = TRANSFORMATION_MAKER.makeTransformation(uri);
List<TransformationParameter> parameters = transformation.getParameters();
for (int i = 0; i < parameters.size() && i < myTargetUris.size(); ++i) {
ContentProvider contentProvider = myTargetUris.get(i).getContentProvider();
if (contentProvider == null) {
continue;
}
List<URI> targetMetamodels = contentProvider.getMetamodels();
if (targetMetamodels.isEmpty()) {
continue;
}
List<EPackage> paramMetamodels = parameters.get(i).getMetamodels();
for (int j = 0; j < targetMetamodels.size() && j < paramMetamodels.size(); ++j) {
if (!targetMetamodels.get(j).toString().equals(paramMetamodels.get(j).getNsURI())) {
return false;
}
}
}
return true;
}
catch (Exception e) {
}
return false;
}
@Override
public TreeAction getTreeAction(URI uri) {
if (myTransfUri == null) {
return TreeAction.NONE;
}
if (myTransfUri.equals(uri)) {
return TreeAction.SELECT;
}
return myTransfUri.toString().startsWith(uri.toString()) ? TreeAction.EXPAND : TreeAction.NONE;
}
};
myControl = new UniSelectTransformationControl(parent, UniSelectTransformationControl.QVTO_FILE_FILTER,
QvtTransformationRegistry.getInstance(), TransformationRegistry.TRANSFORMATION_FILTER, selectionListener);
}
protected IStatus validatePage() {
setMessage(null);
setErrorMessage(null);
myTransformation = null;
QvtTransformation transformation;
String transfName = null;
try {
URI uri = getSelectedUri();
if (uri == null) {
return TransformationControls.makeStatus(IStatus.ERROR, Messages.QvtLauncherTab_NoTransformationModule);
}
transformation = TRANSFORMATION_MAKER.makeTransformation(uri);
transfName = transformation.getModuleName();
}
catch (Exception e) {
setErrorMessage(e.getMessage());
return TransformationControls.makeStatus(IStatus.ERROR, e.getMessage());
}
setMessage(NLS.bind(Messages.QvtLauncherTab_TransformationSelected, transfName));
myTransformation = transformation;
return TransformationControls.makeStatus(IStatus.OK, NLS.bind(Messages.QvtLauncherTab_TransformationSelected, transfName));
}
public QvtTransformation getTransformation() {
return myTransformation;
}
public void setSelectedTransformationId(String id) {
myControl.selectTransformationByUri(id);
}
public String getSelectedTransformationId() {
URI selectedUri = getSelectedUri();
if (selectedUri == null) {
return null;
}
return selectedUri.path();
}
@Override
public void dispose() {
super.dispose();
try {
TRANSFORMATION_MAKER.cleanup();
} catch (MdaException e) {
}
}
private URI getSelectedUri() {
return myControl != null ? myControl.getSelectedUri() : null;
}
private QvtTransformation myTransformation;
private final ITransformationMaker TRANSFORMATION_MAKER = new ITransformationMaker.CachedTransformationMaker();
private final URI myTransfUri;
private final List<TargetUriData> myTargetUris;
private UniSelectTransformationControl myControl;
}