Eclipseplugins
SelectActionPage.java
1 package com.proalpha.pds.gitutils.mylyn;
2 
3 import java.lang.reflect.InvocationTargetException;
4 import java.net.URL;
5 import java.util.Collections;
6 import java.util.List;
7 
8 import org.eclipse.core.runtime.FileLocator;
9 import org.eclipse.core.runtime.Path;
10 import org.eclipse.core.runtime.Platform;
11 import org.eclipse.jface.resource.ImageDescriptor;
12 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
13 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
14 import org.eclipse.jface.viewers.IStructuredContentProvider;
15 import org.eclipse.jface.viewers.LabelProvider;
16 import org.eclipse.jface.viewers.StyledString;
17 import org.eclipse.jface.viewers.TableViewer;
18 import org.eclipse.jface.viewers.TableViewerColumn;
19 import org.eclipse.jface.viewers.Viewer;
20 import org.eclipse.jface.wizard.WizardPage;
21 import org.eclipse.jgit.diff.DiffEntry;
22 import org.eclipse.jgit.lib.Constants;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.events.SelectionAdapter;
25 import org.eclipse.swt.events.SelectionEvent;
26 import org.eclipse.swt.layout.GridData;
27 import org.eclipse.swt.layout.GridLayout;
28 import org.eclipse.swt.widgets.Button;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Group;
31 import org.eclipse.swt.widgets.Label;
32 import org.eclipse.swt.widgets.Table;
33 import org.eclipse.swt.widgets.TableColumn;
34 
35 import com.proalpha.pds.gitutils.Activator;
36 import com.proalpha.pds.gitutils.common.DiffOperation;
37 
45 public class SelectActionPage extends WizardPage {
46 
47  private FeatureBranchSettings settings;
48  private Button btnUpdateStartparameter;
49  private Button btnLoadXml;
50  private Button btnCreateDf;
51  private Button btnLoadDf;
52  private Button btnUpdateArtifacts;
53 
54  // Data viewer
55  private TableViewer pdiViewer;
56  private TableViewer artifactsViewer;
57 
58  // Info labels
59  private Label lblDbCommitId;
60  private Label lblDbNewHeadId;
61  private Label lblArtifactsCommitId;
62  private Label lblArtifNewHeadId;
63  private Label lblArtifactsWarning;
64 
65  private Button btnDelRcodeSmart;
66  private Button btnDelRcodeAll;
67  private Button btnDelRcodeNone;
68  private ReconcileActionSettings recoActionSettings;
69 
77  super(SelectActionPage.class.getName());
78 
79  this.settings = settings;
80  this.recoActionSettings = recoSettings;
81 
82  setTitle("Action Selection");
83  setMessage("Define reconcile actions to refresh your environment", INFORMATION);
84  URL url = FileLocator.find(Platform.getBundle(Activator.PLUGIN_ID), new Path("icons/pA-logox72.png"),
85  Collections.emptyMap());
86 
87  setImageDescriptor(ImageDescriptor.createFromURL(url));
88  }
89 
90  @Override
91  public void createControl(Composite parent) {
92 
93  Composite container = new Composite(parent, SWT.NULL);
94  setControl(container);
95  container.setLayout(new GridLayout(1, false));
96  container.setBackgroundMode(SWT.INHERIT_DEFAULT);
97 
98  GridData gdGrp = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
99  gdGrp.heightHint = 216;
100  gdGrp.widthHint = 450;
101 
102  Group dbFilesGrp = new Group(container, SWT.NONE);
103  dbFilesGrp.setLayoutData(gdGrp);
104  dbFilesGrp.setText("Update database");
105  dbFilesGrp.setBackgroundMode(SWT.INHERIT_DEFAULT);
106 
107  pdiViewer = new TableViewer(dbFilesGrp);
108  Table pdiTable = pdiViewer.getTable();
109  pdiTable.setBounds(10, 40, 450, 122);
110 
111  TableViewerColumn changeViewerColumn = new TableViewerColumn(pdiViewer, SWT.NONE);
112  changeViewerColumn.getColumn().setWidth(40);
113  changeViewerColumn.getColumn().setText("Chg");
114  changeViewerColumn.getColumn().setAlignment(SWT.LEFT);
115  changeViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(new ModifyLabelProvider()));
116 
117  TableViewerColumn fileViewerColumn = new TableViewerColumn(pdiViewer, SWT.NONE);
118  fileViewerColumn.getColumn().setWidth(380);
119  fileViewerColumn.getColumn().setText("Filename");
120  fileViewerColumn.getColumn().setAlignment(SWT.LEFT);
121  fileViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(new FileNameLabelProvider()));
122 
123  btnLoadXml = new Button(dbFilesGrp, SWT.CHECK);
124  btnLoadXml.setText("load Xml");
125  btnLoadXml.setBounds(5, 170, 68, 16);
126  btnLoadXml.addSelectionListener(new SelectionAdapter() {
127  @Override
128  public void widgetSelected(SelectionEvent e) {
129  recoActionSettings.setLoadXml(btnLoadXml.getSelection());
130  }
131  });
132 
133 
134  btnCreateDf = new Button(dbFilesGrp, SWT.CHECK);
135  btnCreateDf.setText("create DF");
136  btnCreateDf.setBounds(80, 170, 68, 16);
137  btnCreateDf.addSelectionListener(new SelectionAdapter() {
138  @Override
139  public void widgetSelected(SelectionEvent e) {
140  recoActionSettings.setCreateDf(btnCreateDf.getSelection());
141  }
142  });
143 
144 
145  btnLoadDf = new Button(dbFilesGrp, SWT.CHECK);
146  btnLoadDf.setText("load DF");
147  btnLoadDf.setBounds(160, 170, 61, 16);
148  btnLoadDf.addSelectionListener(new SelectionAdapter() {
149  @Override
150  public void widgetSelected(SelectionEvent e) {
151  recoActionSettings.setLoadDf(btnLoadDf.getSelection());
152  }
153  });
154 
155 
156  btnUpdateStartparameter = new Button(dbFilesGrp, SWT.CHECK);
157  btnUpdateStartparameter.setText("update startparameter");
158  btnUpdateStartparameter.setBounds(5, 190, 143, 16);
159  btnUpdateStartparameter.addSelectionListener(new SelectionAdapter() {
160  @Override
161  public void widgetSelected(SelectionEvent e) {
162  recoActionSettings.setUpdateStartparam(btnUpdateStartparameter.getSelection());
163  }
164  });
165 
166 
167  Label lblDbCommit = new Label(dbFilesGrp, SWT.NONE);
168  lblDbCommit.setBounds(10, 20, 63, 15);
169  lblDbCommit.setText("dbCommit:");
170 
171  lblDbCommitId = new Label(dbFilesGrp, SWT.NONE);
172  lblDbCommitId.setBounds(72, 20, 70, 15);
173  lblDbCommitId.setText("");
174 
175  Label lblNewHead = new Label(dbFilesGrp, SWT.NONE);
176  lblNewHead.setBounds(170, 20, 61, 15);
177  lblNewHead.setText("new HEAD:");
178 
179  lblDbNewHeadId = new Label(dbFilesGrp, SWT.NONE);
180  lblDbNewHeadId.setBounds(230, 20, 70, 15);
181  lblDbNewHeadId.setText("");
182 
183  GridData gdCoGrp = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
184  gdCoGrp.heightHint = 162;
185  gdCoGrp.widthHint = 450;
186 
187  Group artifactsFilesGrp = new Group(container, SWT.NONE);
188  artifactsFilesGrp.setLayoutData(gdCoGrp);
189  artifactsFilesGrp.setText("Update artifacts");
190  artifactsFilesGrp.setBackgroundMode(SWT.INHERIT_DEFAULT);
191 
192  artifactsViewer = new TableViewer(artifactsFilesGrp);
193  Table artifactsTable = artifactsViewer.getTable();
194  artifactsTable.setBounds(15, 40, 450, 94);
195 
196  TableViewerColumn artChangeViewerColumn = new TableViewerColumn(artifactsViewer, SWT.NONE);
197  TableColumn artChangeTableColumn = artChangeViewerColumn.getColumn();
198  artChangeTableColumn.setWidth(40);
199  artChangeTableColumn.setText("Chg");
200  artChangeViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(new ModifyLabelProvider()));
201 
202  TableViewerColumn artFileViewerColumn = new TableViewerColumn(artifactsViewer, SWT.NONE);
203  TableColumn artFileTableColumn = artFileViewerColumn.getColumn();
204  artFileTableColumn.setWidth(380);
205  artFileTableColumn.setText("Filename");
206  artFileTableColumn.setAlignment(SWT.LEFT);
207  artFileViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(new FileNameLabelProvider()));
208 
209  btnUpdateArtifacts = new Button(artifactsFilesGrp, SWT.CHECK);
210  btnUpdateArtifacts.setBounds(5, 140, 105, 16);
211  btnUpdateArtifacts.setText("update artifacts");
212  btnUpdateArtifacts.addSelectionListener(new SelectionAdapter() {
213  @Override
214  public void widgetSelected(SelectionEvent e) {
215  recoActionSettings.setUpdateArtifacts(btnUpdateArtifacts.getSelection());
216  }
217  });
218 
219  lblArtifactsWarning = new Label(artifactsFilesGrp, SWT.NONE);
220  lblArtifactsWarning.setText("");
221  lblArtifactsWarning.setBounds(5, 160, 450, 16);
222 
223  Label lblArtifactscommit = new Label(artifactsFilesGrp, SWT.NONE);
224  lblArtifactscommit.setText("artifactsCommit:");
225  lblArtifactscommit.setBounds(10, 20, 89, 15);
226 
227  lblArtifactsCommitId = new Label(artifactsFilesGrp, SWT.NONE);
228  lblArtifactsCommitId.setText("");
229  lblArtifactsCommitId.setBounds(100, 20, 70, 15);
230 
231  Label lblArtifNewHead = new Label(artifactsFilesGrp, SWT.NONE);
232  lblArtifNewHead.setText("new HEAD:");
233  lblArtifNewHead.setBounds(170, 20, 61, 15);
234 
235  lblArtifNewHeadId = new Label(artifactsFilesGrp, SWT.NONE);
236  lblArtifNewHeadId.setText("");
237  lblArtifNewHeadId.setBounds(230, 20, 70, 15);
238 
239  Group grpUpdateMisc = new Group(container, SWT.NONE);
240  GridData gdGrpUpdateMisc = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
241  gdGrpUpdateMisc.widthHint = 450;
242  gdGrpUpdateMisc.heightHint = 25;
243  grpUpdateMisc.setLayoutData(gdGrpUpdateMisc);
244  grpUpdateMisc.setText("Delete Rcode");
245  grpUpdateMisc.setBackgroundMode(SWT.INHERIT_DEFAULT);
246 
247  btnDelRcodeSmart = new Button(grpUpdateMisc, SWT.RADIO);
248  btnDelRcodeSmart.setBounds(30, 20, 144, 16);
249  btnDelRcodeSmart.setText("Only wrong (crc check)");
250 
251  btnDelRcodeAll = new Button(grpUpdateMisc, SWT.RADIO);
252  btnDelRcodeAll.setBounds(180, 20, 43, 16);
253  btnDelRcodeAll.setText("All");
254  btnDelRcodeAll.setEnabled(false);
255 
256  btnDelRcodeNone = new Button(grpUpdateMisc, SWT.RADIO);
257  btnDelRcodeNone.setText("None");
258  btnDelRcodeNone.setBounds(229, 20, 50, 16);
259  }
260 
261  @Override
262  public void setVisible(boolean visible) {
263  super.setVisible(visible);
264 
265  if (visible) {
266  initialize();
267  }
268  }
269 
276  private void initialize() {
277 
278  if (!settings.getDbCommit().isEmpty()) {
279 
280  DiffOperation diffOp = new DiffOperation(settings.getRepository(), Constants.DEFAULT_REMOTE_NAME,
281  settings.getSourceBranch(), settings.getTargetBranch(), settings.isUpdateSourceBranch(),
282  settings.isUpdateTargetBranch(), settings.getDbCommit(), settings.getArtifactsCommit());
283  try {
284  diffOp.run();
285  } catch (InvocationTargetException e) {
286  // TODO Auto-generated catch block
287  e.printStackTrace();
288  }
289 
290  lblArtifNewHeadId.setText(diffOp.getNewHead().substring(0, 10));
291  lblDbNewHeadId.setText(diffOp.getNewHead().substring(0, 10));
292  lblDbCommitId.setText(settings.getDbCommit().substring(0, 10));
293  lblArtifactsCommitId.setText(settings.getArtifactsCommit().substring(0, 10));
294 
295  fillTableView(pdiViewer, diffOp.getPdiDiffList());
296  fillTableView(artifactsViewer, diffOp.getStateInfoDiffList());
297 
298  if (diffOp.isAssembliesXmlChanged()) {
299  lblArtifactsWarning.setText("assemblies.xml changed! You may have to compile if you are working with r-code.");
300  }
301 
302  recoActionSettings.deriveFromDiff(diffOp.getPdiDiffList(), diffOp.getStateInfoDiffList());
303  }
304 
305  btnLoadXml.setSelection(recoActionSettings.isLoadXml());
306  btnCreateDf.setSelection(recoActionSettings.isCreateDf());
307  btnLoadDf.setSelection(recoActionSettings.isLoadDf());
308  btnUpdateArtifacts.setSelection(recoActionSettings.isUpdateArtifacts());
309  btnUpdateStartparameter.setSelection(recoActionSettings.isUpdateStartparam());
310  btnDelRcodeSmart.setSelection(recoActionSettings.getDeleteRcodeTyper() == DeleteRcodeType.SMART);
311  btnDelRcodeAll.setSelection(recoActionSettings.getDeleteRcodeTyper() == DeleteRcodeType.ALL);
312  btnDelRcodeNone.setSelection(recoActionSettings.getDeleteRcodeTyper() == DeleteRcodeType.NONE);
313 
314  }
315 
320  private void fillTableView(TableViewer tableViewer, List<DiffEntry> diffList) {
321  tableViewer.setContentProvider(new DiffProvider());
322  tableViewer.setInput(diffList);
323  tableViewer.getTable().setHeaderVisible(true);
324  tableViewer.getTable().setLinesVisible(true);
325  }
326 
327  @Override
328  public boolean canFlipToNextPage() {
329  return false;
330  }
331 }
332 
333 class ModifyLabelProvider extends LabelProvider implements IStyledLabelProvider {
334 
335  @Override
336  public StyledString getStyledText(Object element) {
337  if (element instanceof DiffEntry) {
338  DiffEntry entry = (DiffEntry) element;
339  return new StyledString(entry.getChangeType().toString().substring(0, 3));
340  }
341  return null;
342  }
343 
344 }
345 
346 class FileNameLabelProvider extends LabelProvider implements IStyledLabelProvider {
347 
348  @Override
349  public StyledString getStyledText(Object element) {
350  if (element instanceof DiffEntry) {
351  DiffEntry entry = (DiffEntry) element;
352  if (entry.getNewPath().isEmpty() || entry.getNewPath().equalsIgnoreCase("/dev/null"))
353  return new StyledString(entry.getOldPath().substring(entry.getOldPath().lastIndexOf('/') + 1));
354  return new StyledString(entry.getNewPath().substring(entry.getNewPath().lastIndexOf('/') + 1));
355  }
356  return null;
357  }
358 
359 }
360 
361 class DiffProvider implements IStructuredContentProvider {
362 
363  @Override
364  public void dispose() {
365  //Nope
366  }
367 
368  @Override
369  public Object[] getElements(Object inputElement) {
370  if (inputElement instanceof List) {
371  return ((List<?>) inputElement).toArray();
372  }
373  return new Object[0];
374  }
375 
376  @Override
377  public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
378  //Nope
379  }
380 
381 }
void deriveFromDiff(List<?> pdiDiffList, List<?> stateInfoDiffList)
SelectActionPage(FeatureBranchSettings settings, ReconcileActionSettings recoSettings)