Eclipseplugins
UserExitGeneratorHandler.java
1 package com.proalpha.pds.ui.handlers;
2 
3 import java.lang.reflect.InvocationTargetException;
4 
5 import org.eclipse.core.commands.AbstractHandler;
6 import org.eclipse.core.commands.ExecutionEvent;
7 import org.eclipse.core.commands.ExecutionException;
8 import org.eclipse.core.resources.IFile;
9 import org.eclipse.core.resources.IResource;
10 import org.eclipse.core.resources.ResourcesPlugin;
11 import org.eclipse.core.runtime.jobs.ISchedulingRule;
12 import org.eclipse.jface.dialogs.MessageDialog;
13 import org.eclipse.jface.operation.IRunnableContext;
14 import org.eclipse.jface.operation.IRunnableWithProgress;
15 import org.eclipse.swt.widgets.Display;
16 import org.eclipse.swt.widgets.Shell;
17 import org.eclipse.ui.PlatformUI;
18 
19 import com.proalpha.pds.generator.GeneratorFactory;
20 import com.proalpha.pds.generator.OOABLExitFileGenerator;
21 import com.proalpha.pds.generator.UserExitFileGenerator;
22 import com.proalpha.pds.paconnector.PaProject;
23 import com.proalpha.pds.paconnector.parameter.ParameterFactory;
24 import com.proalpha.pds.paconnector.parameter.StartparameterReader;
25 import com.proalpha.pds.paconnector.utils.ExceptionUtils;
26 import com.proalpha.pds.templates.data.DataContainerFactory;
27 import com.proalpha.pds.templates.data.IGeneratorDataContainer;
28 import com.proalpha.pds.ui.Activator;
29 
36 public class UserExitGeneratorHandler extends AbstractHandler {
37 
38  private DataContainerFactory dataContainerFactory;
39  private GeneratorFactory generatorFactory;
40  private ParameterFactory parameterFactory;
41 
42  public UserExitGeneratorHandler() {
43  dataContainerFactory = new DataContainerFactory();
44  generatorFactory = new GeneratorFactory();
45  parameterFactory = new ParameterFactory();
46  }
47 
48  @Override
49  public Object execute(ExecutionEvent event) throws ExecutionException {
50 
51  PaProject paProject = com.proalpha.pds.paconnector.Activator.getDefault().getProjectManager().getPaProjectByTextSelection();
52  if (paProject != null && paProject.isAvailable()) {
53  generateUserExits(paProject);
54  }
55  return null;
56  }
57 
58  private void generateUserExits(PaProject paProject) {
59 
60  IRunnableWithProgress runnable = monitor -> {
61  IFile file = null;
62  String pAProcedure = null;
63 
64  try {
65 
66  monitor.beginTask("Generate Userexit", 4);
67  monitor.worked(1);
68  IGeneratorDataContainer datacontainer = dataContainerFactory.createDataContainer(paProject);
69  StartparameterReader pAStartParam = parameterFactory
70  .createStartparameterReader(paProject);
71 
72  file = com.proalpha.pds.paconnector.Activator.getDefault().getProjectManager().getFileFromActiveSelection();
73 
74  if (file != null) {
75  pAProcedure = file.getName();
76  }
77  else {
78  final Shell activeShell = Display.getDefault().getActiveShell();
79  MessageDialog.openError(activeShell, "no procedure name", "can't find filename in current selection.");
80  return;
81  }
82 
83  monitor.worked(2);
84  datacontainer.setFileName(pAProcedure);
85  datacontainer.setVersion(paProject.getVersion());
86  datacontainer.setCustomLevel(paProject.getCustomLevel());
87  datacontainer.setObjectInfo(datacontainer.getRepositoryInformations().getProgramShortDesc(pAProcedure));
88 
89  if (pAProcedure.endsWith(".cls")) {
90  // informations about the Parent Claas
91  String pAParentClaasObj = datacontainer.getRepositoryInformations().getClassOBJ(pAProcedure);
92  datacontainer
93  .setParentObject(datacontainer.getRepositoryInformations().getClassName(pAParentClaasObj));
94 
95  OOABLExitFileGenerator gen = generatorFactory.createOOABLExitFileGenerator(datacontainer,
96  "pAOOABLStdClass");
97 
99 
100  } else {
101  datacontainer.setParentObject(pAProcedure);
102  UserExitFileGenerator gen = generatorFactory.createUserExitFileGenerator(datacontainer);
104 
105  }
106  monitor.worked(2);
107  // Job.getJobManager().join(ContentGenerator.JOB_FAMILY, monitor);
108 
109  pAStartParam.getWorkingDirectory().refreshLocal(IResource.DEPTH_INFINITE, monitor);
110  monitor.done();
111  } catch (Exception exception) {
113  }
114 
115  };
116 
117  ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
118  IRunnableContext context = PlatformUI.getWorkbench().getProgressService();
119 
120  try {
121  PlatformUI.getWorkbench().getProgressService().runInUI(context, runnable, rule);
122  } catch (InvocationTargetException e) {
124  } catch (InterruptedException e) {
126  Thread.currentThread().interrupt();
127  }
128  }
129 }
static void showAndLogErrorMessage(AbstractUIPlugin plugin, Throwable exception)