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.IPropertiesChangedListener;
24 import oic.simulator.serviceprovider.listener.IResourceListChangedListener;
25 import oic.simulator.serviceprovider.manager.ResourceManager;
26 import oic.simulator.serviceprovider.manager.UiListenerHandler;
27 import oic.simulator.serviceprovider.model.AutomationSettingHelper;
28 import oic.simulator.serviceprovider.model.Resource;
29 import oic.simulator.serviceprovider.model.ResourceType;
30 import oic.simulator.serviceprovider.model.SingleResource;
31 import oic.simulator.serviceprovider.utils.Constants;
32 import oic.simulator.serviceprovider.utils.Utility;
33 import oic.simulator.serviceprovider.view.dialogs.AutomationSettingDialog;
34 import oic.simulator.serviceprovider.view.dialogs.CreateResourceWizard;
35 import oic.simulator.serviceprovider.view.dialogs.DeleteResourceWizard;
36 import oic.simulator.serviceprovider.view.dialogs.MainPage.Option;
37 import oic.simulator.serviceprovider.view.dialogs.ResourceWizardDialog;
39 import org.eclipse.jface.dialogs.MessageDialog;
40 import org.eclipse.jface.viewers.ISelectionChangedListener;
41 import org.eclipse.jface.viewers.IStructuredSelection;
42 import org.eclipse.jface.viewers.ITreeContentProvider;
43 import org.eclipse.jface.viewers.LabelProvider;
44 import org.eclipse.jface.viewers.SelectionChangedEvent;
45 import org.eclipse.jface.viewers.StructuredSelection;
46 import org.eclipse.jface.viewers.TreeViewer;
47 import org.eclipse.jface.viewers.Viewer;
48 import org.eclipse.jface.window.Window;
49 import org.eclipse.jface.wizard.WizardDialog;
50 import org.eclipse.swt.SWT;
51 import org.eclipse.swt.events.MenuAdapter;
52 import org.eclipse.swt.events.MenuEvent;
53 import org.eclipse.swt.events.SelectionAdapter;
54 import org.eclipse.swt.events.SelectionEvent;
55 import org.eclipse.swt.graphics.Color;
56 import org.eclipse.swt.graphics.Image;
57 import org.eclipse.swt.layout.GridData;
58 import org.eclipse.swt.layout.GridLayout;
59 import org.eclipse.swt.widgets.Button;
60 import org.eclipse.swt.widgets.Composite;
61 import org.eclipse.swt.widgets.Display;
62 import org.eclipse.swt.widgets.Group;
63 import org.eclipse.swt.widgets.Menu;
64 import org.eclipse.swt.widgets.MenuItem;
65 import org.eclipse.swt.widgets.Tree;
66 import org.eclipse.ui.PlatformUI;
67 import org.eclipse.ui.dialogs.FilteredTree;
68 import org.eclipse.ui.dialogs.PatternFilter;
69 import org.eclipse.ui.part.ViewPart;
70 import org.oic.simulator.SimulatorException;
71 import org.oic.simulator.server.SimulatorResource.AutoUpdateType;
74 * This class manages and shows the resource manager view in the perspective.
76 public class ResourceManagerView extends ViewPart {
78 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.resourcemanager";
80 private Button createButton;
81 private Button deleteButton;
83 private TreeViewer singleResTreeViewer;
85 private IResourceListChangedListener resourceListChangedListener;
87 private IPropertiesChangedListener resourcePropertiesChangedListener;
89 private ResourceManager resourceManager;
91 public ResourceManagerView() {
93 resourceManager = Activator.getDefault().getResourceManager();
95 resourceListChangedListener = new IResourceListChangedListener() {
98 public void onResourceCreation(final ResourceType type) {
99 Display.getDefault().asyncExec(new Runnable() {
103 if (type == ResourceType.SINGLE) {
104 if (null != singleResTreeViewer) {
105 singleResTreeViewer.refresh();
109 // Trigger the visibility of delete button
110 changeDeleteVisibility();
116 public void onResourceDeletion(final ResourceType type) {
117 Display.getDefault().asyncExec(new Runnable() {
123 if (null != singleResTreeViewer)
124 singleResTreeViewer.refresh();
128 // Trigger the visibility of delete button
129 changeDeleteVisibility();
135 public void onResourceListUpdate(final ResourceType type) {
136 Display.getDefault().asyncExec(new Runnable() {
142 if (null != singleResTreeViewer)
143 singleResTreeViewer.refresh();
151 resourcePropertiesChangedListener = new IPropertiesChangedListener() {
154 public void onResourcePropertyChange() {
155 Display.getDefault().asyncExec(new Runnable() {
158 if (null != singleResTreeViewer)
159 singleResTreeViewer.refresh();
166 public void changeDeleteVisibility() {
167 boolean visibility = resourceManager.isAnyResourceExist();
168 if (null != deleteButton && !deleteButton.isDisposed()) {
169 deleteButton.setEnabled(visibility);
174 public void createPartControl(Composite parent) {
175 Composite compContent = new Composite(parent, SWT.NONE);
176 GridLayout baseLayout = new GridLayout(1, false);
177 compContent.setLayout(baseLayout);
179 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
180 compContent.setLayoutData(gd);
182 Composite buttonComp = new Composite(compContent, SWT.NONE);
183 buttonComp.setLayout(new GridLayout(2, false));
186 gd.horizontalAlignment = SWT.FILL;
187 gd.grabExcessHorizontalSpace = true;
189 buttonComp.setLayoutData(gd);
191 createButton = new Button(buttonComp, SWT.PUSH);
192 createButton.setText("Create");
193 createButton.setToolTipText("Create Simulator Resource(s)");
197 createButton.setLayoutData(gd);
199 deleteButton = new Button(buttonComp, SWT.PUSH);
200 deleteButton.setText("Delete");
201 deleteButton.setToolTipText("Delete Simulator Resource(s)");
205 deleteButton.setLayoutData(gd);
207 createSimpleResourcesArea(compContent);
211 addManagerListeners();
213 // If there is at least one resource exist, then enable the delete
215 changeDeleteVisibility();
218 private void createSimpleResourcesArea(Composite compContent) {
219 // Create a group to show all the discovered resources.
220 // Adding the group to the folder.
221 Group resourceGroup = new Group(compContent, SWT.NONE);
223 Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
224 resourceGroup.setBackground(color);
226 resourceGroup.setLayout(new GridLayout(1, false));
227 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
228 resourceGroup.setLayoutData(gd);
230 PatternFilter filter = new PatternFilter();
231 FilteredTree filteredTree = new FilteredTree(resourceGroup,
232 SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE, filter, true);
233 singleResTreeViewer = filteredTree.getViewer();
234 singleResTreeViewer.getTree().setLayoutData(
235 new GridData(SWT.FILL, SWT.FILL, true, true));
237 .setContentProvider(new SingleResourceContentProvider());
238 singleResTreeViewer.setLabelProvider(new TreeLabelProvider());
239 singleResTreeViewer.setInput(new Object());
242 .addSelectionChangedListener(new ISelectionChangedListener() {
244 public void selectionChanged(SelectionChangedEvent e) {
245 IStructuredSelection selection = (IStructuredSelection) e
247 if (null == selection) {
252 int size = selection.size();
254 res = (Resource) selection.getFirstElement();
256 resourceManager.resourceSelectionChanged(res);
260 addMenuToSimpleResources();
263 private void addMenuToSimpleResources() {
264 if (null != singleResTreeViewer) {
265 final Tree resourceTreeHead = singleResTreeViewer.getTree();
266 if (null != resourceTreeHead) {
267 // Below code creates menu entries and shows them on right
268 // clicking a resource
269 final Menu menu = new Menu(resourceTreeHead);
270 resourceTreeHead.setMenu(menu);
271 menu.addMenuListener(new MenuAdapter() {
273 public void menuShown(MenuEvent e) {
274 // Clear existing menu items
275 MenuItem[] items = menu.getItems();
276 for (int index = 0; index < items.length; index++) {
277 items[index].dispose();
280 IStructuredSelection selection = ((IStructuredSelection) singleResTreeViewer
282 final SingleResource resource = (SingleResource) selection
284 if (null == resource) {
288 addAutomationMenu(menu, resource);
290 // Menu to remove the resource.
291 MenuItem deleteResource = new MenuItem(menu, SWT.NONE);
292 deleteResource.setText("Delete");
294 .addSelectionListener(new SelectionAdapter() {
296 public void widgetSelected(SelectionEvent e) {
299 .removeResource(resource);
300 singleResTreeViewer.refresh();
303 .resourceSelectionChanged(null);
305 MessageDialog.openInformation(
309 "Resource deleted.");
310 } catch (SimulatorException e1) {
312 .openInformation(Display
316 "Failed to delete the resource.");
318 changeDeleteVisibility();
327 private void addAutomationMenu(final Menu menu,
328 final SingleResource selectedResource) {
329 MenuItem startItem = new MenuItem(menu, SWT.NONE);
330 startItem.setText(Constants.START_RESOURCE_AUTOMATION);
331 startItem.addSelectionListener(new SelectionAdapter() {
333 public void widgetSelected(SelectionEvent e) {
334 // Block starting resource level
335 // automation if any attribute level
336 // automation is in progress for the
338 boolean started = resourceManager
339 .isAttributeAutomationStarted(selectedResource);
343 Display.getDefault().getActiveShell(),
344 "Attribute automation is in progress",
345 "Attribute level automation for this resource is already in progress!!!\nPlease stop all "
346 + "running attribute level automations to start resource level automation.");
349 // Start the automation
350 // Fetch the settings data
351 List<AutomationSettingHelper> automationSettings;
352 automationSettings = AutomationSettingHelper
353 .getAutomationSettings(null);
355 // Open the settings dialog
356 AutomationSettingDialog dialog = new AutomationSettingDialog(
357 Activator.getDefault().getWorkbench()
358 .getActiveWorkbenchWindow().getShell(),
361 if (dialog.open() == Window.OK) {
362 String automationType = dialog.getAutomationType();
363 String updateFreq = dialog.getUpdateFrequency();
365 AutoUpdateType autoType = AutoUpdateType
366 .valueOf(automationType);
367 int updFreq = Utility
368 .getUpdateIntervalFromString(updateFreq);
369 boolean status = resourceManager
370 .startResourceAutomationUIRequest(autoType,
371 updFreq, selectedResource);
372 String statusMsg = status ? "Automation started successfully!!!"
373 : "Automation request failed!!!";
374 MessageDialog.openInformation(Display.getDefault()
375 .getActiveShell(), "Automation Status",
382 MenuItem stopItem = new MenuItem(menu, SWT.NONE);
383 stopItem.setText(Constants.STOP_RESOURCE_AUTOMATION);
384 stopItem.addSelectionListener(new SelectionAdapter() {
386 public void widgetSelected(SelectionEvent e) {
387 boolean status = resourceManager
388 .stopResourceAutomationUIRequest(selectedResource);
389 String statusMsg = status ? "Automation stopped!!!"
390 : "Automation stop failed.";
391 MessageDialog.openInformation(Display.getDefault()
392 .getActiveShell(), "Automation Status", statusMsg);
396 // Set the initial visibility of menu items
397 boolean status = resourceManager
398 .isResourceAutomationStarted(selectedResource);
399 startItem.setEnabled(!status);
400 stopItem.setEnabled(status);
403 private void addUIListeners() {
405 createButton.addSelectionListener(new SelectionAdapter() {
407 public void widgetSelected(SelectionEvent e) {
408 if (resourceManager.getResourceCount() >= Constants.MAX_RESOURCE_COUNT) {
410 .openInformation(Display.getDefault()
412 "Resource limit exceeded",
413 "Exceeded the limit of resources that can exist in the server.");
416 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
420 CreateResourceWizard createWizard = new CreateResourceWizard();
421 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
422 Display.getDefault().getActiveShell(),
424 createWizard.setWizardDialog(wizardDialog);
425 int open = wizardDialog.open();
426 if (open == WizardDialog.OK
427 || createWizard.isDlgForceClosed()) {
429 Option option = createWizard.getMainPage()
431 if (option == Option.SIMPLE_FROM_RAML
432 || option == Option.SIMPLE) {
433 SingleResource res = (SingleResource) createWizard
434 .getCreatedResource();
436 boolean canSelect = true;
437 if (option == Option.SIMPLE_FROM_RAML
438 && createWizard.getResourceCount() > 1) {
442 singleResTreeViewer.setSelection(
443 new StructuredSelection(res),
446 .resourceSelectionChanged(res);
451 MessageDialog.openInformation(Display.getDefault()
453 "Resource Creation Status", createWizard
461 deleteButton.addSelectionListener(new SelectionAdapter() {
463 public void widgetSelected(SelectionEvent e) {
464 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
468 boolean exist = resourceManager.isAnyResourceExist();
472 DeleteResourceWizard deleteWizard = new DeleteResourceWizard();
473 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
474 PlatformUI.getWorkbench().getDisplay()
475 .getActiveShell(), deleteWizard);
476 int open = wizardDialog.open();
477 if (open == Window.OK) {
478 singleResTreeViewer.refresh();
479 MessageDialog.openInformation(Display.getDefault()
481 "Resource Deletion Status", deleteWizard
484 changeDeleteVisibility();
492 public void addManagerListeners() {
493 UiListenerHandler.getInstance().addResourceListChangedUIListener(
494 resourceListChangedListener);
495 UiListenerHandler.getInstance().addResourcePropertiesChangedUIListener(
496 resourcePropertiesChangedListener);
500 public void setFocus() {
504 public void dispose() {
505 // Unregister the listener
506 if (null != resourceListChangedListener) {
507 UiListenerHandler.getInstance()
508 .removeResourceListChangedUIListener(
509 resourceListChangedListener);
510 resourceManager.resourceSelectionChanged(null);
512 if (null != resourcePropertiesChangedListener) {
513 UiListenerHandler.getInstance()
514 .removeResourcePropertiesChangedUIListener(
515 resourcePropertiesChangedListener);
521 class SingleResourceContentProvider implements ITreeContentProvider {
524 public void dispose() {
528 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
532 public Object[] getChildren(Object parent) {
537 public Object[] getElements(Object parent) {
538 List<SingleResource> resList;
539 resList = Activator.getDefault().getResourceManager()
540 .getSingleResourceList();
541 if (null == resList) {
542 resList = new ArrayList<SingleResource>();
544 return resList.toArray();
548 public Object getParent(Object child) {
553 public boolean hasChildren(Object parent) {
558 class TreeLabelProvider extends LabelProvider {
560 public String getText(Object element) {
561 if (element instanceof Resource) {
562 Resource res = (Resource) element;
563 return res.getResourceName();
569 public Image getImage(Object element) {
570 if (element instanceof SingleResource) {
571 return Activator.getDefault().getImageRegistry()
572 .get(Constants.SINGLE_RESOURCE);