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().syncExec(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);
304 } catch (SimulatorException e1) {
306 .openInformation(Display
310 "Failed to delete the resource.");
312 changeDeleteVisibility();
321 private void addAutomationMenu(final Menu menu,
322 final SingleResource selectedResource) {
323 MenuItem startItem = new MenuItem(menu, SWT.NONE);
324 startItem.setText(Constants.START_RESOURCE_AUTOMATION);
325 startItem.addSelectionListener(new SelectionAdapter() {
327 public void widgetSelected(SelectionEvent e) {
328 // Block starting resource level
329 // automation if any attribute level
330 // automation is in progress for the
332 boolean started = resourceManager
333 .isAttributeAutomationStarted(selectedResource);
337 Display.getDefault().getActiveShell(),
338 "Attribute automation is in progress",
339 "Attribute level automation for this resource is already in progress!!!\nPlease stop all "
340 + "running attribute level automations to start resource level automation.");
342 // Start the automation
343 // Fetch the settings data
344 List<AutomationSettingHelper> automationSettings;
345 automationSettings = AutomationSettingHelper
346 .getAutomationSettings(null);
348 // Open the settings dialog
349 AutomationSettingDialog dialog = new AutomationSettingDialog(
350 Activator.getDefault().getWorkbench()
351 .getActiveWorkbenchWindow().getShell(),
354 if (dialog.open() == Window.OK) {
355 String automationType = dialog.getAutomationType();
356 String updateFreq = dialog.getUpdateFrequency();
358 AutoUpdateType autoType = AutoUpdateType
359 .valueOf(automationType);
360 int updFreq = Utility
361 .getUpdateIntervalFromString(updateFreq);
362 boolean status = resourceManager
363 .startResourceAutomationUIRequest(autoType,
364 updFreq, selectedResource);
366 String statusMsg = "Automation request failed!!!";
367 MessageDialog.openInformation(Display.getDefault()
368 .getActiveShell(), "Automation Status",
376 MenuItem stopItem = new MenuItem(menu, SWT.NONE);
377 stopItem.setText(Constants.STOP_RESOURCE_AUTOMATION);
378 stopItem.addSelectionListener(new SelectionAdapter() {
380 public void widgetSelected(SelectionEvent e) {
381 boolean status = resourceManager
382 .stopResourceAutomationUIRequest(selectedResource);
384 String statusMsg = "Automation stop failed.";
385 MessageDialog.openInformation(Display.getDefault()
386 .getActiveShell(), "Automation Status", statusMsg);
391 // Set the initial visibility of menu items
392 boolean status = resourceManager
393 .isResourceAutomationStarted(selectedResource);
394 startItem.setEnabled(!status);
395 stopItem.setEnabled(status);
398 private void addUIListeners() {
400 createButton.addSelectionListener(new SelectionAdapter() {
402 public void widgetSelected(SelectionEvent e) {
403 if (resourceManager.getResourceCount() >= Constants.MAX_RESOURCE_COUNT) {
405 .openInformation(Display.getDefault()
407 "Resource limit exceeded",
408 "Exceeded the limit of resources that can exist in the server.");
411 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
415 CreateResourceWizard createWizard = new CreateResourceWizard();
416 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
417 Display.getDefault().getActiveShell(),
419 createWizard.setWizardDialog(wizardDialog);
420 int open = wizardDialog.open();
421 if (open == WizardDialog.OK
422 || createWizard.isDlgForceClosed()) {
424 Option option = createWizard.getMainPage()
426 if (option == Option.SIMPLE_FROM_RAML
427 || option == Option.SIMPLE) {
428 SingleResource res = (SingleResource) createWizard
429 .getCreatedResource();
431 boolean canSelect = true;
432 if (option == Option.SIMPLE_FROM_RAML
433 && createWizard.getResourceCount() > 1) {
437 singleResTreeViewer.setSelection(
438 new StructuredSelection(res),
441 .resourceSelectionChanged(res);
446 MessageDialog.openInformation(Display.getDefault()
448 "Resource Creation Status", createWizard
456 deleteButton.addSelectionListener(new SelectionAdapter() {
458 public void widgetSelected(SelectionEvent e) {
459 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
463 boolean exist = resourceManager.isAnyResourceExist();
467 DeleteResourceWizard deleteWizard = new DeleteResourceWizard();
468 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
469 PlatformUI.getWorkbench().getDisplay()
470 .getActiveShell(), deleteWizard);
471 int open = wizardDialog.open();
472 if (open == Window.OK) {
473 singleResTreeViewer.refresh();
475 if (!deleteWizard.getStatus()) {
477 .openInformation(Display.getDefault()
479 "Resource Deletion Failed",
480 "Failed to delete the resources. Please try again.");
482 changeDeleteVisibility();
490 public void addManagerListeners() {
491 UiListenerHandler.getInstance().addResourceListChangedUIListener(
492 resourceListChangedListener);
493 UiListenerHandler.getInstance().addResourcePropertiesChangedUIListener(
494 resourcePropertiesChangedListener);
498 public void setFocus() {
502 public void dispose() {
503 // Unregister the listener
504 if (null != resourceListChangedListener) {
505 UiListenerHandler.getInstance()
506 .removeResourceListChangedUIListener(
507 resourceListChangedListener);
508 resourceManager.resourceSelectionChanged(null);
510 if (null != resourcePropertiesChangedListener) {
511 UiListenerHandler.getInstance()
512 .removeResourcePropertiesChangedUIListener(
513 resourcePropertiesChangedListener);
519 class SingleResourceContentProvider implements ITreeContentProvider {
522 public void dispose() {
526 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
530 public Object[] getChildren(Object parent) {
535 public Object[] getElements(Object parent) {
536 List<SingleResource> resList;
537 resList = Activator.getDefault().getResourceManager()
538 .getSingleResourceList();
539 if (null == resList) {
540 resList = new ArrayList<SingleResource>();
542 return resList.toArray();
546 public Object getParent(Object child) {
551 public boolean hasChildren(Object parent) {
556 class TreeLabelProvider extends LabelProvider {
558 public String getText(Object element) {
559 if (element instanceof Resource) {
560 Resource res = (Resource) element;
561 return res.getResourceName();
567 public Image getImage(Object element) {
568 if (element instanceof SingleResource) {
569 return Activator.getDefault().getImageRegistry()
570 .get(Constants.SINGLE_RESOURCE);