Eclipseplugins
GenerateMissingDbTriggerHandler.java
1 package com.proalpha.pds.ui.handlers;
2 
3 import java.io.File;
4 import java.lang.reflect.InvocationTargetException;
5 import java.util.List;
6 
7 import org.eclipse.core.commands.ExecutionEvent;
8 import org.eclipse.core.commands.ExecutionException;
9 import org.eclipse.core.resources.ResourcesPlugin;
10 import org.eclipse.core.runtime.IProgressMonitor;
11 import org.eclipse.core.runtime.jobs.ISchedulingRule;
12 import org.eclipse.jface.operation.IRunnableContext;
13 import org.eclipse.jface.operation.IRunnableWithProgress;
14 import org.eclipse.ui.PlatformUI;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17 
18 import com.proalpha.pds.exception.ProALPHANotAvailableException;
19 import com.proalpha.pds.generator.GeneratorFactory;
20 import com.proalpha.pds.generator.TriggerFileGenerator;
21 import com.proalpha.pds.jaxb.TtDECMissingTrigger;
22 import com.proalpha.pds.jaxb.TtDECMissingTrigger.TtDECMissingTriggerRow;
23 import com.proalpha.pds.paconnector.Activator;
24 import com.proalpha.pds.paconnector.PaProject;
25 import com.proalpha.pds.paconnector.utils.ExceptionUtils;
26 import com.proalpha.pds.paconnector.utils.JaxbUnmarshallerGeneric;
27 import com.proalpha.pds.templates.data.DataContainerFactory;
28 import com.proalpha.pds.templates.data.IGeneratorDataContainer;
29 import com.proalpha.pds.ui.AbstractProAlphaHandler;
30 
32 
33  @Override
34  public Object execute(ExecutionEvent event) throws ExecutionException {
35 
36  PaProject paProject;
37  try {
38  paProject = getPaProjectOfEvent(event);
39  runProgram(paProject);
40  } catch (ProALPHANotAvailableException e) {
42  }
43 
44  return null;
45  }
46 
47  private static void runProgram(PaProject paProject) {
48  IRunnableWithProgress runnable = new IRunnableWithProgress() {
49 
50  private final Logger logger = LoggerFactory.getLogger(GenerateMissingDbTriggerHandler.class);
51 
52  @Override
53  public void run(IProgressMonitor monitor) {
54 
55  try {
56  monitor.beginTask("Create missing database triggers", 2);
57 
58  monitor.worked(1);
59 
60  monitor.subTask("Fetch list of missing triggers");
61 
62  File file = paProject.getBridge().createMissingTriggersXMLFile();
63  logger.debug("Exported missing triggers to file {}", file);
64 
65  List<TtDECMissingTriggerRow> missingTriggers = retrieveMissingTriggers(file);
66 
67  monitor.beginTask("Create missing database triggers", missingTriggers.size() + 1);
68 
69  for (TtDECMissingTriggerRow trigger : missingTriggers) {
70  String triggerName = trigger.getTriggerFileName().getValue();
71  logger.debug("Create trigger {}", triggerName);
72  monitor.subTask("Create trigger " + triggerName);
73  DataContainerFactory dataContainerFactory = new DataContainerFactory();
74  IGeneratorDataContainer datacontainer = dataContainerFactory
75  .createDataContainer(paProject);
76 
77  datacontainer.setFileName(trigger.getTriggerFileName().getValue());
78  datacontainer.setTriggerMode(trigger.getTriggerMode().getValue());
79  datacontainer.setTableName(trigger.getTriggerTableName().getValue());
80  datacontainer.setAuthor(System.getProperty("user.name"));
81  datacontainer.setVersion(paProject.getVersion());
82 
83  GeneratorFactory generatorFactory = new GeneratorFactory();
84  TriggerFileGenerator gen = generatorFactory.createTriggerFileGenerator(datacontainer);
85 
86  gen.generate();
87 
88  monitor.worked(1);
89  }
90  } catch (Exception exception) {
92  } finally {
93  monitor.done();
94  }
95  }
96 
97  private List<TtDECMissingTriggerRow> retrieveMissingTriggers(File file) {
98 
100  TtDECMissingTrigger.class);
101 
102  TtDECMissingTrigger missingTriggers = unmarshaller.readXMLFile(file);
103  return missingTriggers.getTtDECMissingTriggerRow();
104  }
105  };
106 
107  ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
108  IRunnableContext context = PlatformUI.getWorkbench().getProgressService();
109 
110  try {
111  PlatformUI.getWorkbench().getProgressService().runInUI(context, runnable, rule);
112  } catch (InvocationTargetException e) {
114  } catch (InterruptedException e) {
116  Thread.currentThread().interrupt();
117  }
118  }
119 
120 }
List< TtDECMissingTrigger.TtDECMissingTriggerRow > getTtDECMissingTriggerRow()
static void showAndLogErrorMessage(AbstractUIPlugin plugin, Throwable exception)
PaProject getPaProjectOfEvent(ExecutionEvent event)