1 package com.proalpha.pds.projconf.importwizards;
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;
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;
35 private final class CheckTextboxListener
implements KeyListener {
37 public void keyPressed(KeyEvent e) {
42 public void keyReleased(KeyEvent e) {
43 if (!singleprojectFile.getText().isEmpty())
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";
52 private Text singleprojectFile;
53 private Map<String, String> installedProjects;
54 private Map<String, String> selectedProjects;
55 private List<String> eclipseAvailableprojects;
59 setTitle(
"select proALPHA Installations");
60 setDescription(
"Import proALPHA DEMAS installations into the PDS");
62 installedProjects =
new HashMap<>();
63 selectedProjects =
new HashMap<>();
64 eclipseAvailableprojects = getPDSProjects();
68 public void createControl(Composite parent) {
72 container =
new Composite(parent, SWT.NONE);
73 container.setLayout(
new GridLayout(3,
false));
75 Label projectFileInformation =
new Label(container, SWT.NONE);
76 projectFileInformation.setText(
"Project Information File");
79 singleprojectFile =
new Text(container, SWT.BORDER | SWT.SINGLE);
80 singleprojectFile.addKeyListener(
new CheckTextboxListener());
83 final Button button =
new Button(container, SWT.PUSH);
84 button.setText(
"...");
86 singleprojectFile.setLayoutData(
new GridData(GridData.FILL_HORIZONTAL));
89 button.addSelectionListener(
new SelectionAdapter() {
91 public void widgetSelected(SelectionEvent event) {
93 FileDialog fileopen =
new FileDialog(Display.getCurrent().getActiveShell());
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);
107 setControl(container);
108 new Label(container, SWT.NONE);
113 Table table =
new Table(container, SWT.CHECK | SWT.MULTI | SWT.V_SCROLL);
115 GridData gridData =
new GridData();
116 gridData.heightHint = 254;
117 gridData.horizontalAlignment = GridData.FILL;
119 table.setLayoutData(gridData);
120 table.setBackground(projectFileInformation.getBackground());
121 CheckboxTableViewer paprojecttable;
122 paprojecttable =
new CheckboxTableViewer(table);
125 paprojecttable.addCheckStateListener(
new ICheckStateListener() {
126 public void checkStateChanged(CheckStateChangedEvent event) {
127 final String selproject =
event.getElement().toString();
129 if (event.getChecked())
130 selectedProjects.put(selproject, installedProjects.get(selproject));
132 selectedProjects.remove(selproject);
139 installedProjects = getInstalledProjects(PROJECT_DIR);
142 for (Map.Entry<String, String> e : installedProjects.entrySet()) {
143 paprojecttable.add(e.getKey());
146 new Label(container, SWT.NONE);
147 new Label(container, SWT.NONE);
149 paprojecttable.setAllChecked(
true);
151 Button selectAllItems =
new Button(container, SWT.CHECK);
152 selectAllItems.setText(
"select all items");
153 selectAllItems.addSelectionListener(
new SelectionAdapter() {
156 public void widgetSelected(SelectionEvent event) {
157 Button btn = (Button) event.getSource();
158 boolean allItemsSelected = btn.getSelection();
160 if (allItemsSelected) {
162 paprojecttable.setAllChecked(
true);
164 for (Map.Entry<String, String> p : installedProjects.entrySet()) {
165 selectedProjects.put(p.getKey(), p.getValue());
170 paprojecttable.setAllChecked(
false);
172 selectedProjects.clear();
180 selectAllItems.setSelection(
true);
182 for (Map.Entry<String, String> p : installedProjects.entrySet()) {
183 selectedProjects.put(p.getKey(), p.getValue());
186 new Label(container, SWT.NONE);
200 if (!singleprojectFile.getText().isEmpty() || checkIniParams(singleprojectFile.getText())) {
201 allProjects.add(singleprojectFile.getText());
206 allProjects.addAll(selectedProjects.values());
218 private Map<String, String> getInstalledProjects(String searchDir) {
220 Map<String, String> projects =
new HashMap<>();
221 File dir =
new File(searchDir);
222 File[] filesList = dir.listFiles();
225 for (File file : filesList) {
228 if (file.isDirectory()) {
231 List<String> envs = getInstalledEnvs(file.getAbsolutePath());
234 for (
int i = 0; i < envs.size(); i++) {
236 Path envdir = Paths.get(file.getAbsolutePath());
238 envdir = envdir.resolve(envs.get(i)).resolve(
"dev").resolve(DEMAS_CONFIG_FILE);
240 if (
new File(envdir.toString()).isFile() && checkIniParams(envdir.toString())) {
241 String projectname = file.getName().concat(
"-").concat(envs.get(i));
243 if (!eclipseAvailableprojects.contains(projectname)) {
244 projects.put(projectname, envdir.toString());
255 private List<String> getInstalledEnvs(String searchdir) {
260 List<String> envs =
new ArrayList<>();
261 File dir =
new File(searchdir);
262 File[] filesList = dir.listFiles();
264 for (File file : filesList) {
266 if (file.isDirectory()) {
267 envs.add(file.getName());
275 private boolean checkIniParams(String filename) {
280 ReadDemasFile demasini =
new ReadDemasFile(filename);
281 String missingProp =
"";
283 File file =
new File(filename);
288 if (!file.getName().equals(DEMAS_CONFIG_FILE))
291 missingProp = demasini.getmissingField();
292 if (!missingProp.isEmpty()) {
293 setErrorMessage(String.format(
"the keyname %s is missing in Filename", missingProp));
297 if (eclipseAvailableprojects.contains(demasini.getFullProjectName())) {
302 setErrorMessage(
null);
306 private void checkPageIsReady() {
312 boolean singleprojectFileVaild = !singleprojectFile.getText().isEmpty()
313 && checkIniParams(singleprojectFile.getText());
316 if (selectedProjects.size() > 0 || singleprojectFileVaild) {
317 setPageComplete(
true);
319 setPageComplete(
false);
328 private List<String> getPDSProjects() {
329 List<IProject> pdsProjects = Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects());
330 List<String> projectlist =
new ArrayList<>();
332 for (IProject p : pdsProjects)
333 projectlist.add(p.getName());
344 List<String> selProjects =
new ArrayList<>();
346 for (String projectfile : selectedProjects.values())
347 selProjects.add(projectfile);
List< String > getProjectFiles()
List< String > getSelectedList()