Eclipseplugins
ImportPageOne.java
1 package com.proalpha.pds.projconf.importwizards;
2 
3 import java.io.File;
4 import java.nio.file.Path;
5 import java.nio.file.Paths;
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.HashMap;
9 import java.util.List;
10 import java.util.Map;
11 
12 import org.eclipse.core.resources.IProject;
13 import org.eclipse.core.resources.ResourcesPlugin;
14 import org.eclipse.jface.viewers.CheckStateChangedEvent;
15 import org.eclipse.jface.viewers.CheckboxTableViewer;
16 import org.eclipse.jface.viewers.ICheckStateListener;
17 import org.eclipse.jface.wizard.WizardPage;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.events.KeyEvent;
20 import org.eclipse.swt.events.KeyListener;
21 import org.eclipse.swt.events.SelectionAdapter;
22 import org.eclipse.swt.events.SelectionEvent;
23 import org.eclipse.swt.layout.GridData;
24 import org.eclipse.swt.layout.GridLayout;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Display;
28 import org.eclipse.swt.widgets.FileDialog;
29 import org.eclipse.swt.widgets.Label;
30 import org.eclipse.swt.widgets.Table;
31 import org.eclipse.swt.widgets.Text;
32 
33 public class ImportPageOne extends WizardPage {
34 
35  private final class CheckTextboxListener implements KeyListener {
36  @Override
37  public void keyPressed(KeyEvent e) {
38  // key-event not needed here
39  }
40 
41  @Override
42  public void keyReleased(KeyEvent e) {
43  if (!singleprojectFile.getText().isEmpty())
44  checkPageIsReady();
45  }
46  }
47 
48  private static final String DEMAS_CONFIG_FILE = "PDSconfig.properties";
49  private static final String DEMAS_CONFIG_LABEL = "DEMAS Install Files";
50  private static final String PROJECT_DIR = "D:\\proALPHA\\proalpha-code";
51 
52  private Text singleprojectFile;
53  private Map<String, String> installedProjects;
54  private Map<String, String> selectedProjects;
55  private List<String> eclipseAvailableprojects;
56 
57  public ImportPageOne() {
58  super("First Page");
59  setTitle("select proALPHA Installations");
60  setDescription("Import proALPHA DEMAS installations into the PDS");
61 
62  installedProjects = new HashMap<>();
63  selectedProjects = new HashMap<>();
64  eclipseAvailableprojects = getPDSProjects();
65  }
66 
67  @Override
68  public void createControl(Composite parent) {
69 
70  // Layout Page
71  Composite container;
72  container = new Composite(parent, SWT.NONE);
73  container.setLayout(new GridLayout(3, false));
74 
75  Label projectFileInformation = new Label(container, SWT.NONE);
76  projectFileInformation.setText("Project Information File");
77 
78  // Textfile File Search
79  singleprojectFile = new Text(container, SWT.BORDER | SWT.SINGLE);
80  singleprojectFile.addKeyListener(new CheckTextboxListener());
81 
82  // Button for File select
83  final Button button = new Button(container, SWT.PUSH);
84  button.setText("...");
85 
86  singleprojectFile.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
87 
88  // add section listener for Button to select File
89  button.addSelectionListener(new SelectionAdapter() {
90  @Override
91  public void widgetSelected(SelectionEvent event) {
92 
93  FileDialog fileopen = new FileDialog(Display.getCurrent().getActiveShell());
94 
95  String[] filterExtensions = { DEMAS_CONFIG_FILE };
96  fileopen.setFilterExtensions(filterExtensions);
97  String[] filterNames = { DEMAS_CONFIG_LABEL };
98  fileopen.setFilterNames(filterNames);
99  String targetFile = fileopen.open();
100  if (targetFile != null && checkIniParams(targetFile)) {
101  singleprojectFile.setText(targetFile);
102  checkPageIsReady();
103  }
104  }
105  });
106 
107  setControl(container);
108  new Label(container, SWT.NONE);
109 
110  // second the combo box Table with all installed Projects.
111 
112  // Create the CheckboxTableViewer to display the files in the source dir
113  Table table = new Table(container, SWT.CHECK | SWT.MULTI | SWT.V_SCROLL);
114 
115  GridData gridData = new GridData();
116  gridData.heightHint = 254;
117  gridData.horizontalAlignment = GridData.FILL;
118 
119  table.setLayoutData(gridData);
120  table.setBackground(projectFileInformation.getBackground());
121  CheckboxTableViewer paprojecttable;
122  paprojecttable = new CheckboxTableViewer(table);
123 
124  // on click change
125  paprojecttable.addCheckStateListener(new ICheckStateListener() {
126  public void checkStateChanged(CheckStateChangedEvent event) {
127  final String selproject = event.getElement().toString();
128 
129  if (event.getChecked())
130  selectedProjects.put(selproject, installedProjects.get(selproject));
131  else
132  selectedProjects.remove(selproject);
133 
134  checkPageIsReady();
135  }
136  });
137 
138  // Get all Installed projects
139  installedProjects = getInstalledProjects(PROJECT_DIR);
140 
141  // add projects to Combo List
142  for (Map.Entry<String, String> e : installedProjects.entrySet()) {
143  paprojecttable.add(e.getKey());
144  }
145 
146  new Label(container, SWT.NONE);
147  new Label(container, SWT.NONE);
148 
149  paprojecttable.setAllChecked(true);
150  // select all button
151  Button selectAllItems = new Button(container, SWT.CHECK);
152  selectAllItems.setText("select all items");
153  selectAllItems.addSelectionListener(new SelectionAdapter() {
154 
155  @Override
156  public void widgetSelected(SelectionEvent event) {
157  Button btn = (Button) event.getSource();
158  boolean allItemsSelected = btn.getSelection();
159 
160  if (allItemsSelected) {
161  // select all items in Table
162  paprojecttable.setAllChecked(true);
163  // add all Project to selected List
164  for (Map.Entry<String, String> p : installedProjects.entrySet()) {
165  selectedProjects.put(p.getKey(), p.getValue());
166  }
167 
168  } else {
169  // set all Table Items uncecked
170  paprojecttable.setAllChecked(false);
171  // remove all from Selection List
172  selectedProjects.clear();
173  }
174  // check page ready
175  checkPageIsReady();
176 
177  }
178  });
179 
180  selectAllItems.setSelection(true);
181  // add all Project to selected List
182  for (Map.Entry<String, String> p : installedProjects.entrySet()) {
183  selectedProjects.put(p.getKey(), p.getValue());
184  }
185 
186  new Label(container, SWT.NONE);
187 
188  checkPageIsReady();
189 
190  }
191 
197  public List<String> getProjectFiles() {
198  List<String> allProjects = getSelectedList();
199 
200  if (!singleprojectFile.getText().isEmpty() || checkIniParams(singleprojectFile.getText())) {
201  allProjects.add(singleprojectFile.getText());
202  }
203 
204  else {
205  allProjects.clear();
206  allProjects.addAll(selectedProjects.values());
207  }
208 
209  return allProjects;
210  }
211 
218  private Map<String, String> getInstalledProjects(String searchDir) {
219 
220  Map<String, String> projects = new HashMap<>();
221  File dir = new File(searchDir);
222  File[] filesList = dir.listFiles();
223 
224  // List all Projects
225  for (File file : filesList) {
226 
227  // Now the environment directories prod test dev demo...
228  if (file.isDirectory()) {
229 
230  // get all environment directories
231  List<String> envs = getInstalledEnvs(file.getAbsolutePath());
232 
233  // search the CONFIG File in all sub-directories
234  for (int i = 0; i < envs.size(); i++) {
235 
236  Path envdir = Paths.get(file.getAbsolutePath());
237  // If config file exists add project to list
238  envdir = envdir.resolve(envs.get(i)).resolve("dev").resolve(DEMAS_CONFIG_FILE);
239 
240  if (new File(envdir.toString()).isFile() && checkIniParams(envdir.toString())) {
241  String projectname = file.getName().concat("-").concat(envs.get(i));
242  // Only add if no project with this name exists
243  if (!eclipseAvailableprojects.contains(projectname)) {
244  projects.put(projectname, envdir.toString());
245  }
246  }
247  }
248  }
249  }
250 
251  return projects;
252 
253  }
254 
255  private List<String> getInstalledEnvs(String searchdir) {
260  List<String> envs = new ArrayList<>();
261  File dir = new File(searchdir);
262  File[] filesList = dir.listFiles();
263  // List all Projects
264  for (File file : filesList) {
265  // Now the environment dirs prod test dev demo...
266  if (file.isDirectory()) {
267  envs.add(file.getName());
268  }
269  }
270 
271  return envs;
272 
273  }
274 
275  private boolean checkIniParams(String filename) {
280  ReadDemasFile demasini = new ReadDemasFile(filename);
281  String missingProp = "";
282 
283  File file = new File(filename);
284 
285  if (!file.exists())
286  return false;
287 
288  if (!file.getName().equals(DEMAS_CONFIG_FILE))
289  return false;
290 
291  missingProp = demasini.getmissingField();
292  if (!missingProp.isEmpty()) {
293  setErrorMessage(String.format("the keyname %s is missing in Filename", missingProp));
294  return false;
295  }
296 
297  if (eclipseAvailableprojects.contains(demasini.getFullProjectName())) {
298  return false;
299  }
300 
301  // reset the error Message in the
302  setErrorMessage(null);
303  return true;
304  }
305 
306  private void checkPageIsReady() {
311  // single project file contains a valid DEMAS Installation file
312  boolean singleprojectFileVaild = !singleprojectFile.getText().isEmpty()
313  && checkIniParams(singleprojectFile.getText());
314 
315  // if a valid single file or a project in Tableviewer is selected.
316  if (selectedProjects.size() > 0 || singleprojectFileVaild) {
317  setPageComplete(true);
318  } else
319  setPageComplete(false);
320 
321  }
322 
328  private List<String> getPDSProjects() {
329  List<IProject> pdsProjects = Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects());
330  List<String> projectlist = new ArrayList<>();
331 
332  for (IProject p : pdsProjects)
333  projectlist.add(p.getName());
334 
335  return projectlist;
336  }
337 
343  public List<String> getSelectedList() {
344  List<String> selProjects = new ArrayList<>();
345 
346  for (String projectfile : selectedProjects.values())
347  selProjects.add(projectfile);
348 
349  return selProjects;
350 
351  }
352 }