1 package oic.simulator.serviceprovider.view;
3 import java.util.ArrayList;
6 import oic.simulator.serviceprovider.Activator;
7 import oic.simulator.serviceprovider.listener.IResourceListChangedUIListener;
8 import oic.simulator.serviceprovider.manager.ResourceManager;
9 import oic.simulator.serviceprovider.resource.DeleteCategory;
10 import oic.simulator.serviceprovider.utils.Constants;
11 import oic.simulator.serviceprovider.utils.Utility;
12 import oic.simulator.serviceprovider.view.dialogs.CreateResourceWizard;
13 import oic.simulator.serviceprovider.view.dialogs.DeleteResourceWizard;
14 import oic.simulator.serviceprovider.view.dialogs.ResourceWizardDialog;
16 import org.eclipse.jface.dialogs.MessageDialog;
17 import org.eclipse.jface.viewers.ITreeContentProvider;
18 import org.eclipse.jface.viewers.LabelProvider;
19 import org.eclipse.jface.viewers.TreeViewer;
20 import org.eclipse.jface.viewers.Viewer;
21 import org.eclipse.jface.wizard.WizardDialog;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.MenuAdapter;
24 import org.eclipse.swt.events.MenuEvent;
25 import org.eclipse.swt.events.SelectionAdapter;
26 import org.eclipse.swt.events.SelectionEvent;
27 import org.eclipse.swt.graphics.Color;
28 import org.eclipse.swt.graphics.Image;
29 import org.eclipse.swt.layout.GridData;
30 import org.eclipse.swt.layout.GridLayout;
31 import org.eclipse.swt.widgets.Button;
32 import org.eclipse.swt.widgets.Composite;
33 import org.eclipse.swt.widgets.Display;
34 import org.eclipse.swt.widgets.Group;
35 import org.eclipse.swt.widgets.Menu;
36 import org.eclipse.swt.widgets.MenuItem;
37 import org.eclipse.swt.widgets.Tree;
38 import org.eclipse.swt.widgets.TreeItem;
39 import org.eclipse.ui.PlatformUI;
40 import org.eclipse.ui.dialogs.FilteredTree;
41 import org.eclipse.ui.dialogs.PatternFilter;
42 import org.eclipse.ui.part.ViewPart;
44 public class ResourceManagerView extends ViewPart {
46 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.resourcemanager";
48 private Button createButton;
49 private Button deleteButton;
51 private TreeViewer treeViewer;
53 private IResourceListChangedUIListener resourceListChangedListener;
55 private ResourceManager resourceManager;
57 public ResourceManagerView() {
59 resourceManager = Activator.getDefault().getResourceManager();
61 resourceListChangedListener = new IResourceListChangedUIListener() {
64 public void onResourceCreation() {
65 Display.getDefault().asyncExec(new Runnable() {
69 if (null != treeViewer) {
73 // Trigger the visibility of delete button
74 changeDeleteVisibility();
80 public void onResourceDeletion() {
81 Display.getDefault().asyncExec(new Runnable() {
85 if (null != treeViewer) {
89 // Trigger the visibility of delete button
90 changeDeleteVisibility();
97 public void changeDeleteVisibility() {
98 if (null == treeViewer) {
102 Tree tree = treeViewer.getTree();
103 if (null != tree && !tree.isDisposed() && tree.getItemCount() > 0) {
108 if (null != deleteButton && !deleteButton.isDisposed()) {
109 deleteButton.setEnabled(visibility);
114 public void createPartControl(Composite parent) {
115 Composite compContent = new Composite(parent, SWT.NONE);
116 GridLayout baseLayout = new GridLayout(1, false);
117 compContent.setLayout(baseLayout);
119 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
120 compContent.setLayoutData(gd);
122 Composite buttonComp = new Composite(compContent, SWT.NONE);
123 buttonComp.setLayout(new GridLayout(2, false));
126 gd.horizontalAlignment = SWT.FILL;
127 gd.grabExcessHorizontalSpace = true;
129 buttonComp.setLayoutData(gd);
131 createButton = new Button(buttonComp, SWT.PUSH);
132 createButton.setText("Create");
133 createButton.setToolTipText("Create Simulator Resource(s)");
137 createButton.setLayoutData(gd);
139 deleteButton = new Button(buttonComp, SWT.PUSH);
140 deleteButton.setText("Delete");
141 deleteButton.setToolTipText("Delete Simulator Resource(s)");
145 deleteButton.setLayoutData(gd);
147 Group resourceGroup = new Group(compContent, SWT.NONE);
148 resourceGroup.setText("Created Resources");
150 Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
151 resourceGroup.setBackground(color);
153 resourceGroup.setLayout(new GridLayout(1, false));
154 gd = new GridData(SWT.FILL, SWT.FILL, true, true);
155 resourceGroup.setLayoutData(gd);
157 PatternFilter filter = new PatternFilter();
158 FilteredTree filteredTree = new FilteredTree(resourceGroup,
159 SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE, filter, true);
160 treeViewer = filteredTree.getViewer();
161 treeViewer.getTree().setLayoutData(
162 new GridData(SWT.FILL, SWT.FILL, true, true));
163 treeViewer.setContentProvider(new TreeContentProvider());
164 treeViewer.setLabelProvider(new TreeLabelProvider());
165 treeViewer.setInput(new Object());
169 addManagerListeners();
171 // If there is at least one resource exist, then enable the delete
173 changeDeleteVisibility();
176 private void addUIListeners() {
178 createButton.addSelectionListener(new SelectionAdapter() {
180 public void widgetSelected(SelectionEvent e) {
181 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
185 CreateResourceWizard createWizard = new CreateResourceWizard();
186 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
187 PlatformUI.getWorkbench().getDisplay()
188 .getActiveShell(), createWizard);
189 int open = wizardDialog.open();
190 if (open == WizardDialog.OK) {
191 String configFilePath;
193 configFilePath = createWizard.getConfigFilePath();
194 System.out.println("Resultant config file path is "
196 count = createWizard.getResourceCount();
198 // Single resource creation
199 resourceManager.createResource(configFilePath);
201 // Multi-resource creation
202 resourceManager.createResource(configFilePath,
211 deleteButton.addSelectionListener(new SelectionAdapter() {
213 public void widgetSelected(SelectionEvent e) {
214 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
218 DeleteResourceWizard deleteWizard = new DeleteResourceWizard();
219 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
220 PlatformUI.getWorkbench().getDisplay()
221 .getActiveShell(), deleteWizard);
222 int open = wizardDialog.open();
223 if (open == WizardDialog.OK) {
224 DeleteCategory deleteCategory = deleteWizard
225 .getDeleteCategory();
226 if (deleteCategory == DeleteCategory.BY_URI) {
227 String uri = deleteWizard.getDeleteCandidate();
228 boolean completeURI = Utility
231 uri = Utility.displayNameToUri(uri);
233 resourceManager.deleteResourceByURI(uri);
234 } else if (deleteCategory == DeleteCategory.BY_TYPE) {
236 .deleteResourceByType(deleteWizard
237 .getDeleteCandidate());
238 } else if (deleteCategory == DeleteCategory.ALL) {
239 resourceManager.deleteAllResources();
247 if (null != treeViewer) {
248 final Tree resourceTreeHead = treeViewer.getTree();
249 if (null != resourceTreeHead) {
250 // Below code adds a listener to the tree for selection changes
251 // and notifies the resource manager
252 resourceTreeHead.addSelectionListener(new SelectionAdapter() {
254 public void widgetSelected(SelectionEvent e) {
255 TreeItem selectedItem = (TreeItem) e.item;
256 if (null != selectedItem) {
257 String selectedItemText = selectedItem.getText();
258 selectedItemText = Utility
259 .displayNameToUri(selectedItemText);
260 // Propagate this selection change event to manager
262 .resourceSelectionChanged(selectedItemText);
266 // Below code creates menu entries and shows them on right
267 // clicking a resource
268 final Menu menu = new Menu(resourceTreeHead);
269 resourceTreeHead.setMenu(menu);
270 menu.addMenuListener(new MenuAdapter() {
272 public void menuShown(MenuEvent e) {
273 // Clear existing menu items
274 MenuItem[] items = menu.getItems();
275 for (int index = 0; index < items.length; index++) {
276 items[index].dispose();
278 final String selectedItem = resourceTreeHead
279 .getSelection()[0].getText();
280 MenuItem startItem = new MenuItem(menu, SWT.NONE);
281 startItem.setText(Constants.START_RESOURCE_AUTOMATION);
282 startItem.addSelectionListener(new SelectionAdapter() {
284 public void widgetSelected(SelectionEvent e) {
285 // Block starting resource level
286 // automation if any attribute level
287 // automation is in progress for the
289 boolean started = resourceManager.isAttributeAutomationStarted(Utility
290 .displayNameToUri(selectedItem));
296 "Attribute automation is in progress",
297 "Attribute level automation for this resource is already in progress!!!\nPlease stop all "
298 + "running attribute level automations to start resource level automation.");
300 boolean status = resourceManager
301 .startResourceAutomationUIRequest(Utility
302 .displayNameToUri(selectedItem));
303 String statusMsg = status ? "Automation started successfully!!!"
304 : "Automation request failed!!!";
305 MessageDialog.openInformation(Display
306 .getDefault().getActiveShell(),
307 "Automation Status", statusMsg);
312 MenuItem stopItem = new MenuItem(menu, SWT.NONE);
313 stopItem.setText(Constants.STOP_RESOURCE_AUTOMATION);
314 stopItem.addSelectionListener(new SelectionAdapter() {
316 public void widgetSelected(SelectionEvent e) {
317 boolean status = resourceManager
318 .stopResourceAutomationUIRequest(Utility
319 .displayNameToUri(selectedItem));
320 String statusMsg = status ? "Automation stop requested!!!"
321 : "Automation stop failed.";
322 MessageDialog.openInformation(Display
323 .getDefault().getActiveShell(),
324 "Automation Status", statusMsg);
328 // Set the initial visibility of menu items
329 boolean status = resourceManager
330 .isResourceAutomationStarted(Utility
331 .displayNameToUri(selectedItem));
332 startItem.setEnabled(!status);
333 stopItem.setEnabled(status);
340 public void addManagerListeners() {
342 .addResourceListChangedUIListener(resourceListChangedListener);
346 public void setFocus() {
350 public void dispose() {
351 // Unregister the listener
352 if (null != resourceListChangedListener) {
354 .removeResourceListChangedUIListener(resourceListChangedListener);
355 resourceManager.resourceSelectionChanged(null);
361 class TreeContentProvider implements ITreeContentProvider {
364 public void dispose() {
368 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
372 public Object[] getChildren(Object parent) {
377 public Object[] getElements(Object parent) {
378 List<String> uriList;
379 uriList = Activator.getDefault().getResourceManager().getURIList();
380 if (null == uriList) {
381 uriList = new ArrayList<String>();
383 return uriList.toArray();
387 public Object getParent(Object child) {
392 public boolean hasChildren(Object parent) {
397 class TreeLabelProvider extends LabelProvider {
399 public String getText(Object element) {
400 String value = (String) element;
401 value = Utility.uriToDisplayName(value);
406 public Image getImage(Object element) {
407 ResourceManager resourceManager = Activator.getDefault()
408 .getResourceManager();
409 return resourceManager.getImage((String) element);