2 * Copyright 2015 Samsung Electronics All Rights Reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package oic.simulator.serviceprovider.view;
19 import java.util.ArrayList;
20 import java.util.List;
22 import oic.simulator.serviceprovider.Activator;
23 import oic.simulator.serviceprovider.listener.IResourceListChangedUIListener;
24 import oic.simulator.serviceprovider.manager.ResourceManager;
25 import oic.simulator.serviceprovider.resource.DeleteCategory;
26 import oic.simulator.serviceprovider.utils.Constants;
27 import oic.simulator.serviceprovider.utils.Utility;
28 import oic.simulator.serviceprovider.view.dialogs.CreateResourceWizard;
29 import oic.simulator.serviceprovider.view.dialogs.DeleteResourceWizard;
30 import oic.simulator.serviceprovider.view.dialogs.ResourceWizardDialog;
32 import org.eclipse.jface.dialogs.MessageDialog;
33 import org.eclipse.jface.viewers.ITreeContentProvider;
34 import org.eclipse.jface.viewers.LabelProvider;
35 import org.eclipse.jface.viewers.TreeViewer;
36 import org.eclipse.jface.viewers.Viewer;
37 import org.eclipse.jface.wizard.WizardDialog;
38 import org.eclipse.swt.SWT;
39 import org.eclipse.swt.events.MenuAdapter;
40 import org.eclipse.swt.events.MenuEvent;
41 import org.eclipse.swt.events.SelectionAdapter;
42 import org.eclipse.swt.events.SelectionEvent;
43 import org.eclipse.swt.graphics.Color;
44 import org.eclipse.swt.graphics.Image;
45 import org.eclipse.swt.layout.GridData;
46 import org.eclipse.swt.layout.GridLayout;
47 import org.eclipse.swt.widgets.Button;
48 import org.eclipse.swt.widgets.Composite;
49 import org.eclipse.swt.widgets.Display;
50 import org.eclipse.swt.widgets.Group;
51 import org.eclipse.swt.widgets.Menu;
52 import org.eclipse.swt.widgets.MenuItem;
53 import org.eclipse.swt.widgets.Tree;
54 import org.eclipse.swt.widgets.TreeItem;
55 import org.eclipse.ui.PlatformUI;
56 import org.eclipse.ui.dialogs.FilteredTree;
57 import org.eclipse.ui.dialogs.PatternFilter;
58 import org.eclipse.ui.part.ViewPart;
61 * This class manages and shows the resource manager view in the perspective.
63 public class ResourceManagerView extends ViewPart {
65 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.resourcemanager";
67 private Button createButton;
68 private Button deleteButton;
70 private TreeViewer treeViewer;
72 private IResourceListChangedUIListener resourceListChangedListener;
74 private ResourceManager resourceManager;
76 public ResourceManagerView() {
78 resourceManager = Activator.getDefault().getResourceManager();
80 resourceListChangedListener = new IResourceListChangedUIListener() {
83 public void onResourceCreation() {
84 Display.getDefault().asyncExec(new Runnable() {
88 if (null != treeViewer) {
92 // Trigger the visibility of delete button
93 changeDeleteVisibility();
99 public void onResourceDeletion() {
100 Display.getDefault().asyncExec(new Runnable() {
104 if (null != treeViewer) {
105 treeViewer.refresh();
108 // Trigger the visibility of delete button
109 changeDeleteVisibility();
116 public void changeDeleteVisibility() {
117 if (null == treeViewer) {
121 Tree tree = treeViewer.getTree();
122 if (null != tree && !tree.isDisposed() && tree.getItemCount() > 0) {
127 if (null != deleteButton && !deleteButton.isDisposed()) {
128 deleteButton.setEnabled(visibility);
133 public void createPartControl(Composite parent) {
134 Composite compContent = new Composite(parent, SWT.NONE);
135 GridLayout baseLayout = new GridLayout(1, false);
136 compContent.setLayout(baseLayout);
138 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
139 compContent.setLayoutData(gd);
141 Composite buttonComp = new Composite(compContent, SWT.NONE);
142 buttonComp.setLayout(new GridLayout(2, false));
145 gd.horizontalAlignment = SWT.FILL;
146 gd.grabExcessHorizontalSpace = true;
148 buttonComp.setLayoutData(gd);
150 createButton = new Button(buttonComp, SWT.PUSH);
151 createButton.setText("Create");
152 createButton.setToolTipText("Create Simulator Resource(s)");
156 createButton.setLayoutData(gd);
158 deleteButton = new Button(buttonComp, SWT.PUSH);
159 deleteButton.setText("Delete");
160 deleteButton.setToolTipText("Delete Simulator Resource(s)");
164 deleteButton.setLayoutData(gd);
166 Group resourceGroup = new Group(compContent, SWT.NONE);
167 resourceGroup.setText("Created Resources");
169 Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
170 resourceGroup.setBackground(color);
172 resourceGroup.setLayout(new GridLayout(1, false));
173 gd = new GridData(SWT.FILL, SWT.FILL, true, true);
174 resourceGroup.setLayoutData(gd);
176 PatternFilter filter = new PatternFilter();
177 FilteredTree filteredTree = new FilteredTree(resourceGroup,
178 SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE, filter, true);
179 treeViewer = filteredTree.getViewer();
180 treeViewer.getTree().setLayoutData(
181 new GridData(SWT.FILL, SWT.FILL, true, true));
182 treeViewer.setContentProvider(new TreeContentProvider());
183 treeViewer.setLabelProvider(new TreeLabelProvider());
184 treeViewer.setInput(new Object());
188 addManagerListeners();
190 // If there is at least one resource exist, then enable the delete
192 changeDeleteVisibility();
195 private void addUIListeners() {
197 createButton.addSelectionListener(new SelectionAdapter() {
199 public void widgetSelected(SelectionEvent e) {
200 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
204 CreateResourceWizard createWizard = new CreateResourceWizard();
205 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
206 PlatformUI.getWorkbench().getDisplay()
207 .getActiveShell(), createWizard);
208 int open = wizardDialog.open();
209 if (open == WizardDialog.OK) {
210 String configFilePath;
212 configFilePath = createWizard.getConfigFilePath();
213 System.out.println("Resultant config file path is "
215 count = createWizard.getResourceCount();
218 // Single resource creation
220 .createResource(configFilePath);
222 // Multi-resource creation
223 resourceManager.createResource(
224 configFilePath, count);
233 deleteButton.addSelectionListener(new SelectionAdapter() {
235 public void widgetSelected(SelectionEvent e) {
236 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
240 DeleteResourceWizard deleteWizard = new DeleteResourceWizard();
241 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
242 PlatformUI.getWorkbench().getDisplay()
243 .getActiveShell(), deleteWizard);
244 int open = wizardDialog.open();
245 if (open == WizardDialog.OK) {
246 DeleteCategory deleteCategory = deleteWizard
247 .getDeleteCategory();
248 if (deleteCategory == DeleteCategory.BY_URI) {
249 String uri = deleteWizard.getDeleteCandidate();
251 boolean dispName = Activator.getDefault()
252 .getResourceManager()
257 .getResourceManager()
258 .getCompleteUriFromDisplayName(
261 resourceManager.deleteResourceByURI(uri);
263 } else if (deleteCategory == DeleteCategory.BY_TYPE) {
265 .deleteResourceByType(deleteWizard
266 .getDeleteCandidate());
267 } else if (deleteCategory == DeleteCategory.ALL) {
268 resourceManager.deleteAllResources();
276 if (null != treeViewer) {
277 final Tree resourceTreeHead = treeViewer.getTree();
278 if (null != resourceTreeHead) {
279 // Below code adds a listener to the tree for selection changes
280 // and notifies the resource manager
281 resourceTreeHead.addSelectionListener(new SelectionAdapter() {
283 public void widgetSelected(SelectionEvent e) {
284 TreeItem selectedItem = (TreeItem) e.item;
285 if (null != selectedItem) {
286 String selectedItemText = selectedItem.getText();
287 selectedItemText = resourceManager
288 .getCompleteUriFromDisplayName(selectedItemText);
289 // Propagate this selection change event to manager
291 .resourceSelectionChanged(selectedItemText);
295 // Below code creates menu entries and shows them on right
296 // clicking a resource
297 final Menu menu = new Menu(resourceTreeHead);
298 resourceTreeHead.setMenu(menu);
299 menu.addMenuListener(new MenuAdapter() {
301 public void menuShown(MenuEvent e) {
302 // Clear existing menu items
303 MenuItem[] items = menu.getItems();
304 for (int index = 0; index < items.length; index++) {
305 items[index].dispose();
308 final String selectedItem = resourceTreeHead
309 .getSelection()[0].getText();
310 // Check whether automation can be done on this
312 if (!resourceManager.isResourceAutomationAllowed(resourceManager
313 .getCompleteUriFromDisplayName(selectedItem))) {
317 MenuItem startItem = new MenuItem(menu, SWT.NONE);
318 startItem.setText(Constants.START_RESOURCE_AUTOMATION);
319 startItem.addSelectionListener(new SelectionAdapter() {
321 public void widgetSelected(SelectionEvent e) {
322 // Block starting resource level
323 // automation if any attribute level
324 // automation is in progress for the
326 boolean started = resourceManager
327 .isAttributeAutomationStarted(resourceManager
328 .getCompleteUriFromDisplayName(selectedItem));
334 "Attribute automation is in progress",
335 "Attribute level automation for this resource is already in progress!!!\nPlease stop all "
336 + "running attribute level automations to start resource level automation.");
338 boolean status = resourceManager
339 .startResourceAutomationUIRequest(resourceManager
340 .getCompleteUriFromDisplayName(selectedItem));
341 String statusMsg = status ? "Automation started successfully!!!"
342 : "Automation request failed!!!";
343 MessageDialog.openInformation(Display
344 .getDefault().getActiveShell(),
345 "Automation Status", statusMsg);
350 MenuItem stopItem = new MenuItem(menu, SWT.NONE);
351 stopItem.setText(Constants.STOP_RESOURCE_AUTOMATION);
352 stopItem.addSelectionListener(new SelectionAdapter() {
354 public void widgetSelected(SelectionEvent e) {
355 boolean status = resourceManager
356 .stopResourceAutomationUIRequest(resourceManager
357 .getCompleteUriFromDisplayName(selectedItem));
358 String statusMsg = status ? "Automation stop requested!!!"
359 : "Automation stop failed.";
360 MessageDialog.openInformation(Display
361 .getDefault().getActiveShell(),
362 "Automation Status", statusMsg);
366 // Set the initial visibility of menu items
367 boolean status = resourceManager.isResourceAutomationStarted(resourceManager
368 .getCompleteUriFromDisplayName(selectedItem));
369 startItem.setEnabled(!status);
370 stopItem.setEnabled(status);
377 public void addManagerListeners() {
379 .addResourceListChangedUIListener(resourceListChangedListener);
383 public void setFocus() {
387 public void dispose() {
388 // Unregister the listener
389 if (null != resourceListChangedListener) {
391 .removeResourceListChangedUIListener(resourceListChangedListener);
392 resourceManager.resourceSelectionChanged(null);
398 class TreeContentProvider implements ITreeContentProvider {
401 public void dispose() {
405 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
409 public Object[] getChildren(Object parent) {
414 public Object[] getElements(Object parent) {
415 List<String> uriList;
416 uriList = Activator.getDefault().getResourceManager().getURIList();
417 if (null == uriList) {
418 uriList = new ArrayList<String>();
420 return uriList.toArray();
424 public Object getParent(Object child) {
429 public boolean hasChildren(Object parent) {
434 class TreeLabelProvider extends LabelProvider {
436 public String getText(Object element) {
437 String value = (String) element;
438 value = Utility.uriToDisplayName(value);
443 public Image getImage(Object element) {
444 ResourceManager resourceManager = Activator.getDefault()
445 .getResourceManager();
446 return resourceManager.getImage((String) element);