PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/m2m-qvtoml-3.0.0/org.eclipse.m2m.qvt.oml.runtime.ui/src/org/eclipse/m2m/internal/qvt/oml/runtime/ui/ant/ChooseDataSourcePage.java

#
Java | 309 lines | 252 code | 45 blank | 12 comment | 28 complexity | 55d6618c8b3418682bfddd6e3adbd8e1 MD5 | raw file
  1. /*******************************************************************************
  2. * Copyright (c) 2009 Borland Software Corporation
  3. *
  4. * All rights reserved. This program and the accompanying materials
  5. * are made available under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution, and is available at
  7. * http://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * Borland Software Corporation - initial API and implementation
  11. *******************************************************************************/
  12. package org.eclipse.m2m.internal.qvt.oml.runtime.ui.ant;
  13. import java.util.ArrayList;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. import org.eclipse.core.resources.ResourcesPlugin;
  17. import org.eclipse.core.runtime.CoreException;
  18. import org.eclipse.debug.core.ILaunchConfiguration;
  19. import org.eclipse.debug.core.ILaunchConfigurationType;
  20. import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
  21. import org.eclipse.debug.core.ILaunchManager;
  22. import org.eclipse.debug.ui.DebugUITools;
  23. import org.eclipse.debug.ui.IDebugUIConstants;
  24. import org.eclipse.debug.ui.ILaunchGroup;
  25. import org.eclipse.jface.viewers.ILabelProvider;
  26. import org.eclipse.jface.viewers.ILabelProviderListener;
  27. import org.eclipse.jface.viewers.ISelection;
  28. import org.eclipse.jface.viewers.ISelectionChangedListener;
  29. import org.eclipse.jface.viewers.IStructuredSelection;
  30. import org.eclipse.jface.viewers.ITreeContentProvider;
  31. import org.eclipse.jface.viewers.SelectionChangedEvent;
  32. import org.eclipse.jface.viewers.TreeViewer;
  33. import org.eclipse.jface.viewers.Viewer;
  34. import org.eclipse.jface.viewers.ViewerFilter;
  35. import org.eclipse.jface.window.Window;
  36. import org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchConfigurationDelegate;
  37. import org.eclipse.swt.SWT;
  38. import org.eclipse.swt.events.SelectionEvent;
  39. import org.eclipse.swt.events.SelectionListener;
  40. import org.eclipse.swt.graphics.Image;
  41. import org.eclipse.swt.layout.GridData;
  42. import org.eclipse.swt.layout.GridLayout;
  43. import org.eclipse.swt.widgets.Button;
  44. import org.eclipse.swt.widgets.Composite;
  45. import org.eclipse.ui.model.WorkbenchViewerComparator;
  46. public class ChooseDataSourcePage extends AbstractCompositeWizardPage {
  47. protected ChooseDataSourcePage() {
  48. super("dataSourcePage"); //$NON-NLS-1$
  49. setTitle(Messages.SourcePage_title1);
  50. setDescription(Messages.SourcePage_descr1);
  51. }
  52. @Override
  53. public void setVisible(boolean visible) {
  54. if (visible && getSelectedLaunchConfiguration() == null) {
  55. myViewer.setSelection(new IStructuredSelection() {
  56. public Object getFirstElement() {
  57. Object[] array = toArray();
  58. if (array.length == 0) {
  59. return null;
  60. }
  61. return array[0];
  62. }
  63. public Iterator<Object> iterator() {
  64. return toList().iterator();
  65. }
  66. public int size() {
  67. return toArray().length;
  68. }
  69. public Object[] toArray() {
  70. return ((ITreeContentProvider) myViewer.getContentProvider()).getElements(null);
  71. }
  72. public List<Object> toList() {
  73. Object[] array = toArray();
  74. List<Object> list = new ArrayList<Object>(array.length);
  75. for (Object o : array) {
  76. list.add(o);
  77. }
  78. return list;
  79. }
  80. public boolean isEmpty() {
  81. return toArray().length > 0;
  82. }
  83. });
  84. }
  85. super.setVisible(visible);
  86. }
  87. @Override
  88. protected void doCreateControl(Composite parent) {
  89. myViewer = new TreeViewer(parent);
  90. GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
  91. myViewer.getControl().setLayoutData(data);
  92. myViewer.setLabelProvider(new TypeNamesWithTaskTypes(DebugUITools.newDebugModelPresentation()));
  93. myViewer.setComparator(new WorkbenchViewerComparator());
  94. myViewer.setContentProvider(new LaunchConfigurationTreeContentProvider(ILaunchManager.RUN_MODE, parent.getShell()));
  95. myViewer.addFilter(new AntFilter());
  96. myViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
  97. myViewer.expandAll();
  98. myViewer.addSelectionChangedListener(new ISelectionChangedListener() {
  99. public void selectionChanged(SelectionChangedEvent event) {
  100. getContainer().updateButtons();
  101. myConfigButton.setEnabled(getSelectedConfigType() != null);
  102. }
  103. });
  104. myConfigButton = new Button(parent, SWT.NULL);
  105. myConfigButton.setText(Messages.SourcePage_configBtn);
  106. myConfigButton.setEnabled(false);
  107. myConfigButton.addSelectionListener(new SelectionListener() {
  108. public void widgetSelected(SelectionEvent e) {
  109. ILaunchConfigurationType configType = getSelectedConfigType();
  110. if (configType == null) {
  111. return;
  112. }
  113. try {
  114. if ((myCreatedConfig == null) || (!configType.equals(myCreatedConfig.getType()))) {
  115. ILaunchConfigurationWorkingCopy wc = configType.newInstance(null, "qvto.antTask.newConfiguration"); //$NON-NLS-1$
  116. wc.setAttribute(IDebugUIConstants.ATTR_PRIVATE, true);
  117. myCreatedConfig = wc.doSave();
  118. }
  119. ILaunchGroup launchGroup = DebugUITools.getLaunchGroup(myCreatedConfig, ILaunchManager.RUN_MODE);
  120. if (DebugUITools.openLaunchConfigurationPropertiesDialog(getShell(), myCreatedConfig, launchGroup.getIdentifier()) == Window.OK) {
  121. myConfig = myCreatedConfig;
  122. if (canFlipToNextPage()) {
  123. getContainer().showPage(getNextPage());
  124. myConfig = null;
  125. }
  126. }
  127. getContainer().updateButtons();
  128. } catch (CoreException e1) {
  129. e1.printStackTrace();
  130. }
  131. }
  132. public void widgetDefaultSelected(SelectionEvent e) {
  133. widgetSelected(e);
  134. }
  135. });
  136. Composite container = new Composite(parent, SWT.NULL);
  137. container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  138. GridLayout layout = new GridLayout();
  139. container.setLayout(layout);
  140. layout.numColumns = 2;
  141. layout.verticalSpacing = 9;
  142. }
  143. @Override
  144. public boolean canFlipToNextPage() {
  145. setErrorMessage(null);
  146. myTaskModel = null;
  147. ILaunchConfiguration conf = getSelectedLaunchConfiguration();
  148. if (conf == null) {
  149. return false;
  150. }
  151. try {
  152. myTaskModel = new TaskModel(conf, QVTO_ANTTASK_NAME);
  153. }
  154. catch (Exception e) {
  155. setErrorMessage(e.getMessage());
  156. return false;
  157. }
  158. return true;
  159. }
  160. public TaskModel getTaskModel() {
  161. return myTaskModel;
  162. }
  163. private ILaunchConfiguration getSelectedLaunchConfiguration() {
  164. if (myConfig != null) {
  165. return myConfig;
  166. }
  167. ISelection selection = myViewer.getSelection();
  168. if (selection instanceof IStructuredSelection) {
  169. IStructuredSelection ssel = (IStructuredSelection) selection;
  170. Object firstElement = ssel.getFirstElement();
  171. if (firstElement instanceof ILaunchConfiguration) {
  172. return (ILaunchConfiguration) firstElement;
  173. }
  174. }
  175. return null;
  176. }
  177. private ILaunchConfigurationType getSelectedConfigType() {
  178. ISelection selection = myViewer.getSelection();
  179. if (selection instanceof IStructuredSelection) {
  180. IStructuredSelection ssel = (IStructuredSelection) selection;
  181. Object firstElement = ssel.getFirstElement();
  182. if (firstElement instanceof ILaunchConfigurationType) {
  183. return (ILaunchConfigurationType) firstElement;
  184. }
  185. if (firstElement instanceof ILaunchConfiguration) {
  186. try {
  187. return ((ILaunchConfiguration) firstElement).getType();
  188. } catch (CoreException e) {
  189. }
  190. }
  191. }
  192. return null;
  193. }
  194. private class AntFilter extends ViewerFilter {
  195. @Override
  196. public boolean select(Viewer viewer, Object parentElement, Object element) {
  197. if (element instanceof ILaunchConfigurationType) {
  198. ILaunchConfigurationType type = (ILaunchConfigurationType) element;
  199. return isTypeSupported(type);
  200. }
  201. if (element instanceof ILaunchConfiguration) {
  202. ILaunchConfiguration config = (ILaunchConfiguration) element;
  203. boolean priv = false;
  204. try {
  205. priv = config.getAttribute(IDebugUIConstants.ATTR_PRIVATE, false);
  206. } catch (CoreException e) {
  207. // Ignored
  208. }
  209. if (priv) {
  210. return false;
  211. }
  212. ILaunchConfigurationType type = null;
  213. try {
  214. type = config.getType();
  215. } catch (CoreException e) {
  216. return false;
  217. }
  218. return isTypeSupported(type);
  219. }
  220. return false;
  221. }
  222. private boolean isTypeSupported(ILaunchConfigurationType type) {
  223. return QvtLaunchConfigurationDelegate.LAUNCH_CONFIGURATION_TYPE_ID.equals(type.getIdentifier());
  224. }
  225. }
  226. private static class TypeNamesWithTaskTypes implements ILabelProvider {
  227. TypeNamesWithTaskTypes(ILabelProvider dmp) {
  228. myWrapped = dmp;
  229. }
  230. public Image getImage(Object element) {
  231. return myWrapped.getImage(element);
  232. }
  233. public String getText(Object element) {
  234. String suffix = ""; //$NON-NLS-1$
  235. if (element instanceof ILaunchConfigurationType) {
  236. ILaunchConfigurationType type = (ILaunchConfigurationType) element;
  237. suffix = " (" + getTaskName(type) + ")"; //$NON-NLS-1$//$NON-NLS-2$
  238. }
  239. return myWrapped.getText(element) + suffix;
  240. }
  241. private String getTaskName(ILaunchConfigurationType type) {
  242. return QVTO_ANTTASK_NAME;
  243. }
  244. public void addListener(ILabelProviderListener listener) {
  245. myWrapped.addListener(listener);
  246. }
  247. public void dispose() {
  248. myWrapped.dispose();
  249. }
  250. public boolean isLabelProperty(Object element, String property) {
  251. return myWrapped.isLabelProperty(element, property);
  252. }
  253. public void removeListener(ILabelProviderListener listener) {
  254. myWrapped.removeListener(listener);
  255. }
  256. private final ILabelProvider myWrapped;
  257. }
  258. private TreeViewer myViewer;
  259. private Button myConfigButton;
  260. private ILaunchConfiguration myConfig;
  261. private ILaunchConfiguration myCreatedConfig;
  262. private TaskModel myTaskModel;
  263. private static final String QVTO_ANTTASK_NAME = "qvto:transformation"; //$NON-NLS-1$
  264. }