/*******************************************************************************
* 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.launch;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.m2m.internal.qvt.oml.common.MdaException;
import org.eclipse.m2m.internal.qvt.oml.common.launch.IQvtLaunchConstants;
import org.eclipse.m2m.internal.qvt.oml.common.launch.ISetMessageEx;
import org.eclipse.m2m.internal.qvt.oml.common.ui.launch.TransformationControls;
import org.eclipse.m2m.internal.qvt.oml.emf.util.EmfUtil;
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.config.QvtConfigurationProperty;
import org.eclipse.m2m.internal.qvt.oml.runtime.ui.QvtRuntimeUIPlugin;
import org.eclipse.m2m.internal.qvt.oml.runtime.ui.QvtTransformationConfigurationUI;
import org.eclipse.m2m.internal.qvt.oml.runtime.ui.QvtTransformationConfigurationUI.PropertyChangeListener;
import org.eclipse.m2m.internal.qvt.oml.runtime.ui.wizards.ApplyTransformationData;
import org.eclipse.m2m.internal.qvt.oml.runtime.util.MiscUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
public class QvtTransformationConfigurationTab extends AbstractLaunchConfigurationTab {
public QvtTransformationConfigurationTab(ITransformationMaker transformationMaker) {
myTransformationMaker = transformationMaker;
myData = new ApplyTransformationData();
myUI = new QvtTransformationConfigurationUI(myData, new ISetMessageEx() {
public void setErrorMessage(String message) {
QvtTransformationConfigurationTab.this.setErrorMessage(message);
QvtTransformationConfigurationTab.this.getLaunchConfigurationDialog().updateMessage();
}
public void setMessage(String message) {
QvtTransformationConfigurationTab.this.setMessage(message);
QvtTransformationConfigurationTab.this.getLaunchConfigurationDialog().updateMessage();
}
public void setWarningMessage(String message) {
if (!AbstractLaunchConfigurationTabCompatibility.setWarningMessage(QvtTransformationConfigurationTab.this, message)) {
QvtTransformationConfigurationTab.this.setMessage(message);
}
QvtTransformationConfigurationTab.this.getLaunchConfigurationDialog().updateMessage();
}
});
myUI.addPropertyChangeListener(new PropertyChangeListener() {
public void changePerformed(QvtConfigurationProperty property) {
updateLaunchConfigurationDialog();
}
});
}
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(TransformationControls.GRID, false));
myUI.createControl(composite);
setControl(composite);
Dialog.applyDialogFont(composite);
}
public void initializeFrom(ILaunchConfiguration configuration) {
String fileName = ""; //$NON-NLS-1$
try {
fileName = configuration.getAttribute(IQvtLaunchConstants.MODULE, ""); //$NON-NLS-1$
} catch (CoreException e) {
QvtRuntimeUIPlugin.getDefault().getLog().log(MiscUtil.makeErrorStatus(e));
}
QvtTransformation qvtTransformation = null;
try {
URI uri = EmfUtil.makeUri(fileName);
if (uri != null) {
qvtTransformation = myTransformationMaker.makeTransformation(uri);
}
} catch (MdaException e) {
QvtRuntimeUIPlugin.getDefault().getLog().log(MiscUtil.makeErrorStatus(e));
}
myData.setTransformation(qvtTransformation);
Map<String, String> valueMap = Collections.<String, String>emptyMap();
try {
valueMap = configuration.getAttribute(IQvtLaunchConstants.CONFIGURATION_PROPERTIES, Collections.<String, String>emptyMap());
} catch (CoreException e) {
QvtRuntimeUIPlugin.getDefault().getLog().log(MiscUtil.makeErrorStatus(e));
}
myData.getConfiguration().clear();
myData.getConfiguration().putAll(valueMap);
myUI.loadValues();
}
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
myUI.performApply();
Map<String, String> map = new HashMap<String, String>(myData.getConfiguration());
configuration.setAttribute(IQvtLaunchConstants.CONFIGURATION_PROPERTIES, map);
}
public String getName() {
return Messages.QvtTransformationConfigurationTab_Name;
}
@Override
public boolean isValid(ILaunchConfiguration launchConfig) {
myUI.validate();
return myUI.isValid();
}
@Override
public Image getImage() {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_DEF_VIEW);
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
}
private final ApplyTransformationData myData;
private final QvtTransformationConfigurationUI myUI;
private final ITransformationMaker myTransformationMaker;
}