Eclipseplugins
HandlerTools.java
1 package com.proalpha.java.oea.plugins.querygenerator.runtime;
2 
3 import java.io.File;
4 
5 import org.eclipse.core.resources.IProject;
6 import org.eclipse.core.resources.ProjectScope;
7 import org.eclipse.core.resources.ResourcesPlugin;
8 import org.eclipse.core.runtime.preferences.IScopeContext;
9 import org.eclipse.core.runtime.preferences.InstanceScope;
10 import org.eclipse.jface.preference.IPreferenceStore;
11 import org.eclipse.jface.window.Window;
12 import org.eclipse.ui.IWorkbenchWindow;
13 import org.eclipse.ui.PlatformUI;
14 import org.osgi.service.prefs.BackingStoreException;
15 import org.osgi.service.prefs.Preferences;
16 
17 import com.openedge.core.runtime.IAVMClient;
18 import com.openedge.core.runtime.ProgressCommand;
19 import com.openedge.pdt.project.IOpenEdgeProject;
20 import com.openedge.pdt.project.OEProjectPlugin;
21 import com.openedge.pdt.text.OEutil;
22 import com.openedge.pdt.text.dialogs.OEProjectSelectionDialog;
23 import com.proalpha.java.oea.plugins.querygenerator.Activator;
24 import com.proalpha.java.oea.plugins.querygenerator.preferences.QueryGeneratorPreferenceConstants;
25 
26 public class HandlerTools {
27 
28  private static String PLUGIN_ID = Activator.getDefault().getBundle().getSymbolicName();
29  public static char PARAM_SPLITTER = 3;
30 
31  private static HandlerTools handlerTools = null;
32 
33  private HandlerTools() {
34  super();
35  }
36 
37  public static HandlerTools getInstance() {
38 
39  if (handlerTools == null)
40  handlerTools = new HandlerTools();
41 
42  return handlerTools;
43 
44  }
45 
46  public String getPluginFilePath(String fileName) {
47 
48  File file = OEutil.getPluginFile(PLUGIN_ID, fileName);
49 
50  if (file != null)
51  return file.getAbsolutePath();
52  else
53  return "";
54 
55  }
56 
57  public String runProgram(IAVMClient runtime, QueryGeneratorPrograms program, String parameter, boolean expectResult) {
58 
59  String result = null;
60 
61  if (runtime != null) {
62 
63  IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
64  boolean useDevVersion = preferenceStore.getBoolean(QueryGeneratorPreferenceConstants.PREF_USE_DEV_VERSION);
65 
66  String commandProcedure = program.getAbsoluteFilename();
67  String commandParameter = String.format(
68  "%s|%s",
69  (useDevVersion ? QueryGeneratorPrograms.QUERY_GENERATOR_DEV.getAbsoluteFilename() : QueryGeneratorPrograms.QUERY_GENERATOR.getAbsoluteFilename()),
70  parameter);
71 
72  ProgressCommand progressCommand = new ProgressCommand(
73  commandProcedure,
74  commandParameter,
75  "EXTERNAL",
76  expectResult);
77 
78  runtime.runProgressCommand(progressCommand);
79 
80  if (expectResult)
81  result = progressCommand.getResult();
82 
83  runtime.bringToTop();
84 
85  }
86 
87  return result;
88 
89  }
90 
91  public String runProgram(QueryGeneratorPrograms program, String parameter, boolean expectResult) {
92 
93  IAVMClient runtime = getRuntime();
94  return runProgram(runtime, program, parameter, expectResult);
95 
96  }
97 
98  private Preferences getPrefs(String projectName) {
99 
100  Preferences prefs = null;
101 
102  if (projectName != null && !projectName.isEmpty()) {
103 
104  IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
105 
106  if (project != null && project.exists()) {
107 
108  IScopeContext projectScope = new ProjectScope(project);
109  prefs = projectScope.getNode(PLUGIN_ID);
110 
111  }
112 
113  }
114 
115  if (prefs == null)
116  prefs = InstanceScope.INSTANCE.getNode(PLUGIN_ID);
117 
118  return prefs;
119 
120  }
121 
122  public String readParamString(String paramString, String paramName) {
123 
124  if (paramString == null || paramName == null)
125  return "";
126 
127  String[] parameters = paramString.split(String.valueOf(PARAM_SPLITTER));
128 
129  for (int i = 0; i < parameters.length; i++) {
130 
131  String parameter = parameters[i];
132  int eqPos = parameter.indexOf("=");
133 
134  if (eqPos >= 0 && (parameter.substring(0, eqPos).equals(paramName)))
135  return parameter.substring(eqPos + 1);
136 
137  }
138 
139  return "";
140  }
141 
142  public boolean savePluginSetting(String projectName, String name, String value) {
143 
144  Preferences prefs = getPrefs(projectName);
145 
146  if (prefs == null)
147  return false;
148 
149  prefs.put(name, value);
150 
151  try {
152  prefs.flush();
153  } catch(BackingStoreException e) {
154  return false;
155  }
156 
157  return true;
158 
159  }
160 
161  public String loadPluginSetting(String projectName, String name) {
162 
163  Preferences prefs = getPrefs(projectName);
164 
165  if (prefs == null)
166  return "";
167 
168  return prefs.get(name, "");
169  }
170 
171  public IAVMClient getRuntime() {
172 
173  IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
174  IProject project = null;
175 
176  // Method getProjectSelection will open a project selection dialog if no
177  // editors are open. To prevent this (because we open our own dialog) we
178  // only call that method if there is at least one editor open.
179  if (window.getActivePage().getEditorReferences().length > 0)
180  project = OEutil.getProjectSelection();
181 
182  if (project != null && OEutil.isOpenEdgeProject(project)) {
183 
184  OEProjectPlugin projectPlugin = OEProjectPlugin.getDefault();
185  IOpenEdgeProject oeProject = projectPlugin.getOpenEdgeModel().getOpenEdgeProject(project);
186 
187  return oeProject.getRuntime();
188 
189  } else {
190 
191  OEProjectSelectionDialog dialog = new OEProjectSelectionDialog(window.getShell());
192 
193  if (dialog.open() == Window.OK) {
194 
195  String projectName = dialog.getProjectName();
196  OEProjectPlugin projectPlugin = OEProjectPlugin.getDefault();
197  return projectPlugin.getOpenEdgeModel().getOpenEdgeProject(projectName).getRuntime();
198 
199  }
200 
201  /*
202  ElementListSelectionDialog dialog =
203  new ElementListSelectionDialog(window.getShell(), new AVMClientLabelProvider());
204 
205  dialog.setTitle("AVM client");
206  dialog.setMessage("Please select runtime context:");
207  dialog.setElements(getAvailableRuntimes());
208  dialog.setSize(20, 10);
209  dialog.setMultipleSelection(false);
210 
211  if (dialog.open() == Window.OK)
212  return (IAVMClient) dialog.getFirstResult();
213 
214  else
215  return null;
216  */
217 
218  }
219 
220  return null;
221 
222  }
223 
224  /*
225  private IAVMClient[] getAvailableRuntimes() {
226 
227 
228  OEProjectPlugin projectPlugin = OEProjectPlugin.getDefault();
229  IOpenEdgeProject[] projects = projectPlugin.getOpenEdgeModel().getOpenEdgeProjects();
230 
231  List<IAVMClient> options = new ArrayList<IAVMClient>();
232 
233  for (int i = 0; i < projects.length; i++) {
234 
235  IAVMClient runtime = projects[i].getRuntime();
236 
237  if (runtime != null && runtime.isConnected())
238  options.add(runtime);
239 
240  }
241 
242  return options.toArray(new IAVMClient[options.size()]);
243 
244  }
245 
246  private class AVMClientLabelProvider extends BaseLabelProvider implements ILabelProvider {
247 
248  @Override
249  public Image getImage(Object element) {
250  return null;
251  }
252 
253  @Override
254  public String getText(Object element) {
255 
256  if (element instanceof IAVMClient)
257  return ((IAVMClient) element).getName();
258 
259  else
260  return element.toString();
261 
262  }
263 
264 
265  }
266  */
267 
268 }