Eclipseplugins
PaProjectSelection.java
1 package com.proalpha.pds.ui;
2 
3 import java.util.Collections;
4 import java.util.List;
5 import java.util.concurrent.CopyOnWriteArrayList;
6 
7 import org.eclipse.core.runtime.FileLocator;
8 import org.eclipse.core.runtime.Path;
9 import org.eclipse.core.runtime.Platform;
10 import org.eclipse.jface.dialogs.IMessageProvider;
11 import org.eclipse.jface.dialogs.TitleAreaDialog;
12 import org.eclipse.jface.resource.ImageDescriptor;
13 import org.eclipse.jface.viewers.ILabelProvider;
14 import org.eclipse.jface.viewers.ILabelProviderListener;
15 import org.eclipse.jface.viewers.ITreeContentProvider;
16 import org.eclipse.jface.viewers.TreeViewer;
17 import org.eclipse.jface.viewers.Viewer;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.graphics.Image;
20 import org.eclipse.swt.layout.GridData;
21 import org.eclipse.swt.layout.GridLayout;
22 import org.eclipse.swt.widgets.Composite;
23 import org.eclipse.swt.widgets.Control;
24 import org.eclipse.swt.widgets.Shell;
25 import org.eclipse.swt.widgets.TreeItem;
26 
27 import com.proalpha.pds.paconnector.PaProject;
28 
29 public class PaProjectSelection extends TitleAreaDialog {
30 
31  private PaProject selectedProject;
32  private List<PaProject> availableProjects = new CopyOnWriteArrayList<>();
33  private TreeViewer treeViewer;
34  public static final Image icon = ImageDescriptor.createFromURL(FileLocator
35  .find(Platform.getBundle(Activator.PLUGIN_ID), new Path("icons/selectproject.gif"), Collections.emptyMap()))
36  .createImage();
37 
38  public PaProjectSelection(Shell parentShell) {
39  super(parentShell);
40  // Reset selected project
41  selectedProject = null;
42 
43  }
44 
45  public PaProject getSelectedProject() {
46  return selectedProject;
47  }
48 
49  @Override
50  protected Control createDialogArea(Composite parent) {
51  Composite area = (Composite) super.createDialogArea(parent);
52  Composite container = new Composite(area, SWT.NONE);
53  container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
54  GridLayout layout = new GridLayout(1, false);
55  container.setLayout(layout);
56 
57  treeViewer = new TreeViewer(container, SWT.BORDER);
58  GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
59  gridData.widthHint = 220;
60  treeViewer.getTree().setLayoutData(gridData);
61  treeViewer.setContentProvider(new ProjectProvider());
62  treeViewer.setLabelProvider(new ProjectLabelProvider());
63  treeViewer.setInput(availableProjects);
64  return area;
65  }
66 
67  @Override
68  public void create() {
69  super.create();
70  setTitle("Project selection");
71  setMessage("Select your proALPHA Project", IMessageProvider.INFORMATION);
72  }
73 
74  @Override
75  protected boolean isResizable() {
76  return true;
77  }
78 
79  @Override
80  protected void okPressed() {
81  TreeItem[] items = treeViewer.getTree().getSelection();
82  if (items != null && items.length > 0)
83  this.selectedProject = (PaProject) items[0].getData();
84  super.okPressed();
85  }
86 
87  public class ProjectProvider implements ITreeContentProvider {
88 
89  public void inputChanged(Viewer v, Object oldInput, Object newInput) {
90  List<PaProject> paProjects = com.proalpha.pds.paconnector.Activator.getDefault().getProjectManager()
91  .getPaProjects();
92  availableProjects.clear();
93  paProjects.forEach(paProject -> {
94  if (paProject.isAvailable() && paProject.getOeProject().getProject().isOpen()) {
95  availableProjects.add(paProject);
96  }
97  });
98  }
99 
100  @Override
101  public void dispose() {
102  // Dispose is never called directly here
103  }
104 
105  @Override
106  public Object[] getElements(Object inputElement) {
107  if (inputElement instanceof List) {
108  return ((List<?>) inputElement).toArray();
109  }
110  return new Object[0];
111  }
112 
113  @Override
114  public Object[] getChildren(Object parentElement) {
115  return new Object[0];
116  }
117 
118  @Override
119  public Object getParent(Object element) {
120  return null;
121  }
122 
123  @Override
124  public boolean hasChildren(Object element) {
125  return false;
126  }
127 
128  }
129 
130  private class ProjectLabelProvider implements ILabelProvider {
131  public Image getImage(final Object element) {
132  return icon;
133  }
134 
135  public String getText(final Object element) {
136  if (element instanceof PaProject) {
137  PaProject paProject = (PaProject) element;
138  return paProject.getName().substring(2);
139  }
140  return "";
141  }
142 
143  @Override
144  public void addListener(ILabelProviderListener arg0) {
145  }
146 
147  @Override
148  public void dispose() {
149  }
150 
151  @Override
152  public boolean isLabelProperty(Object arg0, String arg1) {
153  return false;
154  }
155 
156  @Override
157  public void removeListener(ILabelProviderListener arg0) {
158  }
159 
160  }
161 }