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 org.eclipse.jface.dialogs.MessageDialog;
20 import org.eclipse.jface.viewers.ISelectionChangedListener;
21 import org.eclipse.jface.viewers.IStructuredSelection;
22 import org.eclipse.jface.viewers.ITreeContentProvider;
23 import org.eclipse.jface.viewers.LabelProvider;
24 import org.eclipse.jface.viewers.SelectionChangedEvent;
25 import org.eclipse.jface.viewers.StructuredSelection;
26 import org.eclipse.jface.viewers.TreeViewer;
27 import org.eclipse.jface.viewers.Viewer;
28 import org.eclipse.jface.window.Window;
29 import org.eclipse.jface.wizard.WizardDialog;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.events.MenuAdapter;
32 import org.eclipse.swt.events.MenuEvent;
33 import org.eclipse.swt.events.SelectionAdapter;
34 import org.eclipse.swt.events.SelectionEvent;
35 import org.eclipse.swt.graphics.Color;
36 import org.eclipse.swt.graphics.Image;
37 import org.eclipse.swt.layout.GridData;
38 import org.eclipse.swt.layout.GridLayout;
39 import org.eclipse.swt.widgets.Button;
40 import org.eclipse.swt.widgets.Composite;
41 import org.eclipse.swt.widgets.Display;
42 import org.eclipse.swt.widgets.Group;
43 import org.eclipse.swt.widgets.Menu;
44 import org.eclipse.swt.widgets.MenuItem;
45 import org.eclipse.swt.widgets.Tree;
46 import org.eclipse.ui.PlatformUI;
47 import org.eclipse.ui.dialogs.FilteredTree;
48 import org.eclipse.ui.dialogs.PatternFilter;
49 import org.eclipse.ui.part.ViewPart;
51 import java.util.ArrayList;
52 import java.util.List;
54 import org.oic.simulator.SimulatorException;
55 import org.oic.simulator.server.SimulatorResource.AutoUpdateType;
57 import oic.simulator.serviceprovider.Activator;
58 import oic.simulator.serviceprovider.listener.IPropertiesChangedListener;
59 import oic.simulator.serviceprovider.listener.IResourceListChangedListener;
60 import oic.simulator.serviceprovider.manager.ResourceManager;
61 import oic.simulator.serviceprovider.manager.UiListenerHandler;
62 import oic.simulator.serviceprovider.model.AutomationSettingHelper;
63 import oic.simulator.serviceprovider.model.Resource;
64 import oic.simulator.serviceprovider.model.ResourceType;
65 import oic.simulator.serviceprovider.model.SingleResource;
66 import oic.simulator.serviceprovider.utils.Constants;
67 import oic.simulator.serviceprovider.utils.Utility;
68 import oic.simulator.serviceprovider.view.dialogs.AutomationSettingDialog;
69 import oic.simulator.serviceprovider.view.dialogs.CreateResourceWizard;
70 import oic.simulator.serviceprovider.view.dialogs.DeleteResourceWizard;
71 import oic.simulator.serviceprovider.view.dialogs.MainPage.Option;
72 import oic.simulator.serviceprovider.view.dialogs.ResourceWizardDialog;
75 * This class manages and shows the resource manager view in the perspective.
77 public class ResourceManagerView extends ViewPart {
79 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.resourcemanager";
81 private Button createButton;
82 private Button deleteButton;
84 private TreeViewer singleResTreeViewer;
86 private IResourceListChangedListener resourceListChangedListener;
88 private IPropertiesChangedListener resourcePropertiesChangedListener;
90 private ResourceManager resourceManager;
92 public ResourceManagerView() {
94 resourceManager = Activator.getDefault().getResourceManager();
96 resourceListChangedListener = new IResourceListChangedListener() {
99 public void onResourceCreation(final ResourceType type) {
100 Display.getDefault().syncExec(new Runnable() {
104 if (type == ResourceType.SINGLE) {
105 if (null != singleResTreeViewer) {
106 singleResTreeViewer.refresh();
110 // Trigger the visibility of delete button
111 changeDeleteVisibility();
117 public void onResourceDeletion(final ResourceType type) {
118 Display.getDefault().asyncExec(new Runnable() {
124 if (null != singleResTreeViewer)
125 singleResTreeViewer.refresh();
129 // Trigger the visibility of delete button
130 changeDeleteVisibility();
136 public void onResourceListUpdate(final ResourceType type) {
137 Display.getDefault().asyncExec(new Runnable() {
143 if (null != singleResTreeViewer)
144 singleResTreeViewer.refresh();
152 resourcePropertiesChangedListener = new IPropertiesChangedListener() {
155 public void onResourcePropertyChange() {
156 Display.getDefault().asyncExec(new Runnable() {
159 if (null != singleResTreeViewer)
160 singleResTreeViewer.refresh();
167 public void changeDeleteVisibility() {
168 boolean visibility = resourceManager.isAnyResourceExist();
169 if (null != deleteButton && !deleteButton.isDisposed()) {
170 deleteButton.setEnabled(visibility);
175 public void createPartControl(Composite parent) {
176 Composite compContent = new Composite(parent, SWT.NONE);
177 GridLayout baseLayout = new GridLayout(1, false);
178 compContent.setLayout(baseLayout);
180 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
181 compContent.setLayoutData(gd);
183 Composite buttonComp = new Composite(compContent, SWT.NONE);
184 buttonComp.setLayout(new GridLayout(2, false));
187 gd.horizontalAlignment = SWT.FILL;
188 gd.grabExcessHorizontalSpace = true;
190 buttonComp.setLayoutData(gd);
192 createButton = new Button(buttonComp, SWT.PUSH);
193 createButton.setText("Create");
194 createButton.setToolTipText("Create Simulator Resource(s)");
198 createButton.setLayoutData(gd);
200 deleteButton = new Button(buttonComp, SWT.PUSH);
201 deleteButton.setText("Delete");
202 deleteButton.setToolTipText("Delete Simulator Resource(s)");
206 deleteButton.setLayoutData(gd);
208 createSimpleResourcesArea(compContent);
212 addManagerListeners();
214 // If there is at least one resource exist, then enable the delete
216 changeDeleteVisibility();
219 private void createSimpleResourcesArea(Composite compContent) {
220 // Create a group to show all the discovered resources.
221 // Adding the group to the folder.
222 Group resourceGroup = new Group(compContent, SWT.NONE);
224 Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
225 resourceGroup.setBackground(color);
227 resourceGroup.setLayout(new GridLayout(1, false));
228 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
229 resourceGroup.setLayoutData(gd);
231 PatternFilter filter = new PatternFilter();
232 FilteredTree filteredTree = new FilteredTree(resourceGroup,
233 SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE, filter, true);
234 singleResTreeViewer = filteredTree.getViewer();
235 singleResTreeViewer.getTree().setLayoutData(
236 new GridData(SWT.FILL, SWT.FILL, true, true));
238 .setContentProvider(new SingleResourceContentProvider());
239 singleResTreeViewer.setLabelProvider(new TreeLabelProvider());
240 singleResTreeViewer.setInput(new Object());
243 .addSelectionChangedListener(new ISelectionChangedListener() {
245 public void selectionChanged(SelectionChangedEvent e) {
246 IStructuredSelection selection = (IStructuredSelection) e
248 if (null == selection) {
253 int size = selection.size();
255 res = (Resource) selection.getFirstElement();
257 resourceManager.resourceSelectionChanged(res);
261 addMenuToSimpleResources();
264 private void addMenuToSimpleResources() {
265 if (null != singleResTreeViewer) {
266 final Tree resourceTreeHead = singleResTreeViewer.getTree();
267 if (null != resourceTreeHead) {
268 // Below code creates menu entries and shows them on right
269 // clicking a resource
270 final Menu menu = new Menu(resourceTreeHead);
271 resourceTreeHead.setMenu(menu);
272 menu.addMenuListener(new MenuAdapter() {
274 public void menuShown(MenuEvent e) {
275 // Clear existing menu items
276 MenuItem[] items = menu.getItems();
277 for (int index = 0; index < items.length; index++) {
278 items[index].dispose();
281 IStructuredSelection selection = ((IStructuredSelection) singleResTreeViewer
283 final SingleResource resource = (SingleResource) selection
285 if (null == resource) {
289 addAutomationMenu(menu, resource);
291 // Menu to remove the resource.
292 MenuItem deleteResource = new MenuItem(menu, SWT.NONE);
293 deleteResource.setText("Delete");
295 .addSelectionListener(new SelectionAdapter() {
297 public void widgetSelected(SelectionEvent e) {
300 .removeResource(resource);
301 singleResTreeViewer.refresh();
304 .resourceSelectionChanged(null);
305 } catch (SimulatorException e1) {
307 .openInformation(Display
311 "Failed to delete the resource.");
313 changeDeleteVisibility();
322 private void addAutomationMenu(final Menu menu,
323 final SingleResource selectedResource) {
324 MenuItem startItem = new MenuItem(menu, SWT.NONE);
325 startItem.setText(Constants.START_RESOURCE_AUTOMATION);
326 startItem.addSelectionListener(new SelectionAdapter() {
328 public void widgetSelected(SelectionEvent e) {
329 // Block starting resource level
330 // automation if any attribute level
331 // automation is in progress for the
333 boolean started = resourceManager
334 .isAttributeAutomationStarted(selectedResource);
338 Display.getDefault().getActiveShell(),
339 "Attribute automation is in progress",
340 "Attribute level automation for this resource is already in progress!!!\nPlease stop all "
341 + "running attribute level automations to start resource level automation.");
343 // Start the automation
344 // Fetch the settings data
345 List<AutomationSettingHelper> automationSettings;
346 automationSettings = AutomationSettingHelper
347 .getAutomationSettings(null);
349 // Open the settings dialog
350 AutomationSettingDialog dialog = new AutomationSettingDialog(
351 Activator.getDefault().getWorkbench()
352 .getActiveWorkbenchWindow().getShell(),
355 if (dialog.open() == Window.OK) {
356 String automationType = dialog.getAutomationType();
357 String updateFreq = dialog.getUpdateFrequency();
359 AutoUpdateType autoType = AutoUpdateType
360 .valueOf(automationType);
361 int updFreq = Utility
362 .getUpdateIntervalFromString(updateFreq);
363 boolean status = resourceManager
364 .startResourceAutomationUIRequest(autoType,
365 updFreq, selectedResource);
367 String statusMsg = "Automation request failed!!!";
368 MessageDialog.openInformation(Display.getDefault()
369 .getActiveShell(), "Automation Status",
377 MenuItem stopItem = new MenuItem(menu, SWT.NONE);
378 stopItem.setText(Constants.STOP_RESOURCE_AUTOMATION);
379 stopItem.addSelectionListener(new SelectionAdapter() {
381 public void widgetSelected(SelectionEvent e) {
382 boolean status = resourceManager
383 .stopResourceAutomationUIRequest(selectedResource);
385 String statusMsg = "Automation stop failed.";
386 MessageDialog.openInformation(Display.getDefault()
387 .getActiveShell(), "Automation Status", statusMsg);
392 // Set the initial visibility of menu items
393 boolean status = resourceManager
394 .isResourceAutomationStarted(selectedResource);
395 startItem.setEnabled(!status);
396 stopItem.setEnabled(status);
399 private void addUIListeners() {
401 createButton.addSelectionListener(new SelectionAdapter() {
403 public void widgetSelected(SelectionEvent e) {
404 if (resourceManager.getResourceCount() >= Constants.MAX_RESOURCE_COUNT) {
406 .openInformation(Display.getDefault()
408 "Resource limit exceeded",
409 "Exceeded the limit of resources that can exist in the server.");
412 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
416 CreateResourceWizard createWizard = new CreateResourceWizard();
417 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
418 Display.getDefault().getActiveShell(),
420 createWizard.setWizardDialog(wizardDialog);
421 int open = wizardDialog.open();
422 if (open == WizardDialog.OK
423 || createWizard.isDlgForceClosed()) {
425 Option option = createWizard.getMainPage()
427 if (option == Option.SIMPLE_FROM_RAML
428 || option == Option.SIMPLE) {
429 SingleResource res = (SingleResource) createWizard
430 .getCreatedResource();
432 boolean canSelect = true;
433 if (option == Option.SIMPLE_FROM_RAML
434 && createWizard.getResourceCount() > 1) {
438 singleResTreeViewer.setSelection(
439 new StructuredSelection(res),
442 .resourceSelectionChanged(res);
447 MessageDialog.openInformation(Display.getDefault()
449 "Resource Creation Status", createWizard
457 deleteButton.addSelectionListener(new SelectionAdapter() {
459 public void widgetSelected(SelectionEvent e) {
460 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
464 boolean exist = resourceManager.isAnyResourceExist();
468 DeleteResourceWizard deleteWizard = new DeleteResourceWizard();
469 ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
470 PlatformUI.getWorkbench().getDisplay()
471 .getActiveShell(), deleteWizard);
472 int open = wizardDialog.open();
473 if (open == Window.OK) {
474 singleResTreeViewer.refresh();
476 if (!deleteWizard.getStatus()) {
478 .openInformation(Display.getDefault()
480 "Resource Deletion Failed",
481 "Failed to delete the resources. Please try again.");
483 changeDeleteVisibility();
491 public void addManagerListeners() {
492 UiListenerHandler.getInstance().addResourceListChangedUIListener(
493 resourceListChangedListener);
494 UiListenerHandler.getInstance().addResourcePropertiesChangedUIListener(
495 resourcePropertiesChangedListener);
499 public void setFocus() {
503 public void dispose() {
504 // Unregister the listener
505 if (null != resourceListChangedListener) {
506 UiListenerHandler.getInstance()
507 .removeResourceListChangedUIListener(
508 resourceListChangedListener);
509 resourceManager.resourceSelectionChanged(null);
511 if (null != resourcePropertiesChangedListener) {
512 UiListenerHandler.getInstance()
513 .removeResourcePropertiesChangedUIListener(
514 resourcePropertiesChangedListener);
520 class SingleResourceContentProvider implements ITreeContentProvider {
523 public void dispose() {
527 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
531 public Object[] getChildren(Object parent) {
536 public Object[] getElements(Object parent) {
537 List<SingleResource> resList;
538 resList = Activator.getDefault().getResourceManager()
539 .getSingleResourceList();
540 if (null == resList) {
541 resList = new ArrayList<SingleResource>();
543 return resList.toArray();
547 public Object getParent(Object child) {
552 public boolean hasChildren(Object parent) {
557 class TreeLabelProvider extends LabelProvider {
559 public String getText(Object element) {
560 if (element instanceof Resource) {
561 Resource res = (Resource) element;
562 return res.getResourceName();
568 public Image getImage(Object element) {
569 if (element instanceof SingleResource) {
570 return Activator.getDefault().getImageRegistry()
571 .get(Constants.SINGLE_RESOURCE);