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.dialogs;
19 import java.lang.reflect.InvocationTargetException;
21 import java.util.Date;
22 import java.util.HashMap;
23 import java.util.Iterator;
27 import oic.simulator.serviceprovider.Activator;
28 import oic.simulator.serviceprovider.manager.UiListenerHandler;
29 import oic.simulator.serviceprovider.model.AttributeHelper;
30 import oic.simulator.serviceprovider.model.CollectionResource;
31 import oic.simulator.serviceprovider.model.LocalResourceAttribute;
32 import oic.simulator.serviceprovider.model.Resource;
33 import oic.simulator.serviceprovider.model.ResourceType;
34 import oic.simulator.serviceprovider.model.SingleResource;
35 import oic.simulator.serviceprovider.utils.Utility;
36 import oic.simulator.serviceprovider.view.dialogs.MainPage.ResourceOption;
38 import org.eclipse.core.runtime.FileLocator;
39 import org.eclipse.core.runtime.IPath;
40 import org.eclipse.core.runtime.IProgressMonitor;
41 import org.eclipse.core.runtime.Path;
42 import org.eclipse.jface.dialogs.MessageDialog;
43 import org.eclipse.jface.operation.IRunnableWithProgress;
44 import org.eclipse.jface.resource.ImageDescriptor;
45 import org.eclipse.jface.wizard.IWizardPage;
46 import org.eclipse.jface.wizard.Wizard;
47 import org.eclipse.jface.wizard.WizardDialog;
48 import org.oic.simulator.ILogger.Level;
49 import org.oic.simulator.SimulatorException;
52 * This class creates a UI wizard for create resource operation.
54 public class CreateResourceWizard extends Wizard {
56 private MainPage mainPage;
57 private SimpleResourceBasicDetailsPage simpleResourceBasicDetailsPage;
58 private SimpleResourceAddAttributePage simpleResourceAddAttributePage;
59 private SimpleResourceOtherDetailsPage simpleResourceOtherDetailsPage;
60 private CollectionResourceBasicDetailsPage collectionResourceBasicDetailsPage;
61 private AddResourcesToCollectionPage addResourcesToCollectionPage;
62 private LoadRamlPage loadRamlPage;
63 private UpdatePropertiesPage updatePropPage;
64 private DevicePage devicePage;
65 private StartStopResourcePage startStopPage;
67 // private SingleResource simResource;
68 private String status;
70 private WizardDialog wizDialog;
71 private boolean dlgForceClosed;
73 public CreateResourceWizard() {
74 setWindowTitle("Create resources");
75 IPath path = new Path("/icons/oic_logo_64x64.png");
76 URL find = FileLocator.find(Activator.getDefault().getBundle(), path,
78 setDefaultPageImageDescriptor(ImageDescriptor.createFromURL(find));
80 setNeedsProgressMonitor(true);
84 public void addPages() {
85 mainPage = new MainPage();
86 simpleResourceBasicDetailsPage = new SimpleResourceBasicDetailsPage();
87 simpleResourceAddAttributePage = new SimpleResourceAddAttributePage();
88 simpleResourceOtherDetailsPage = new SimpleResourceOtherDetailsPage();
89 collectionResourceBasicDetailsPage = new CollectionResourceBasicDetailsPage();
90 addResourcesToCollectionPage = new AddResourcesToCollectionPage();
91 loadRamlPage = new LoadRamlPage();
92 updatePropPage = new UpdatePropertiesPage();
93 devicePage = new DevicePage();
94 startStopPage = new StartStopResourcePage();
97 addPage(simpleResourceBasicDetailsPage);
98 addPage(simpleResourceAddAttributePage);
99 addPage(simpleResourceOtherDetailsPage);
100 addPage(collectionResourceBasicDetailsPage);
101 if (Activator.getDefault().getResourceManager().isAnyResourceExist())
102 addPage(addResourcesToCollectionPage);
103 addPage(loadRamlPage);
104 addPage(updatePropPage);
106 addPage(startStopPage);
109 public void setWizardDialog(WizardDialog dlg) {
113 public WizardDialog getWizardDialog() {
117 public boolean isDlgForceClosed() {
118 return dlgForceClosed;
121 public void setDlgForceClosed(boolean dlgForceClosed) {
122 this.dlgForceClosed = dlgForceClosed;
125 public String getConfigFilePath() {
126 if (null == loadRamlPage) {
129 return loadRamlPage.getConfigFilePath();
132 public int getResourceCount() {
133 if (null == loadRamlPage) {
136 return loadRamlPage.getResourceCount();
140 public boolean canFinish() {
141 System.out.println("canFinish()");
142 IWizardPage curPage = this.getContainer().getCurrentPage();
143 System.out.println(curPage.getName());
144 if ((curPage == updatePropPage && ((mainPage.getResourceOption() == ResourceOption.SIMPLE_FROM_RAML) || !Activator
145 .getDefault().getResourceManager().isAnyResourceExist()))
146 || (curPage == collectionResourceBasicDetailsPage
147 && !Activator.getDefault().getResourceManager()
148 .isAnyResourceExist() && collectionResourceBasicDetailsPage
150 || curPage == addResourcesToCollectionPage
151 || curPage == simpleResourceAddAttributePage
152 || (curPage == loadRamlPage && loadRamlPage.isSelectionDone() && loadRamlPage
153 .isMultiResourceCreation()) || curPage == devicePage) {
160 public boolean performFinish() {
161 System.out.println("performFinish()");
162 final IWizardPage curPage = this.getContainer().getCurrentPage();
163 System.out.println(curPage.getClass().getSimpleName());
164 if (curPage == simpleResourceAddAttributePage) { // Handling Simple
168 getContainer().run(true, true, new IRunnableWithProgress() {
171 public void run(IProgressMonitor monitor)
172 throws InvocationTargetException,
173 InterruptedException {
176 "Single Resource Creation Without RAML", 2);
178 createSingleResourceWithoutRAML();
185 } catch (InvocationTargetException e) {
186 Activator.getDefault().getLogManager()
187 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
189 } catch (InterruptedException e) {
190 Activator.getDefault().getLogManager()
191 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
194 } else if (curPage == loadRamlPage) { // Handling multi-instance
195 // creation of simple resource
198 getContainer().run(true, true, new IRunnableWithProgress() {
201 public void run(IProgressMonitor monitor)
202 throws InvocationTargetException,
203 InterruptedException {
206 "Single Resource Creation(multi-instance) With RAML",
209 createMultiInstanceSingleResourceWithoutRAML();
216 } catch (InvocationTargetException e) {
217 Activator.getDefault().getLogManager()
218 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
220 } catch (InterruptedException e) {
221 Activator.getDefault().getLogManager()
222 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
225 } else if (curPage == updatePropPage) { // Handling the single instance
226 // creation of simple resource
228 // String resURI = updatePropPage.getResURI();
229 // Checking whether the uri is used by any other resource.
230 if (Activator.getDefault().getResourceManager()
231 .isResourceExist(updatePropPage.getResURI())) {
233 .openError(getShell(), "Resource URI in use",
234 "Entered resource URI is in use. Please try a different one.");
235 // TODO: Instead of MessageDialog, errors may be shown on wizard
239 // Resource resource = loadRamlPage.getResource();
240 // resource.setResourceName(updatePropPage.getResName());
242 getContainer().run(true, true, new IRunnableWithProgress() {
245 public void run(IProgressMonitor monitor)
246 throws InvocationTargetException,
247 InterruptedException {
249 monitor.beginTask("Completing Resource Creation", 2);
251 completeResourceCreationWithRAML();
258 } catch (InvocationTargetException e) {
259 Activator.getDefault().getLogManager()
260 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
262 } catch (InterruptedException e) {
263 Activator.getDefault().getLogManager()
264 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
267 } else if (curPage == collectionResourceBasicDetailsPage
268 || curPage == addResourcesToCollectionPage) { // Handling
273 if (mainPage.getResourceOption() == ResourceOption.COLLECTION_FROM_RAML) {
274 Resource res = loadRamlPage.getResource();
275 if (null != res && res instanceof CollectionResource) {
276 Set<Resource> selectedResources = addResourcesToCollectionPage
277 .getSelectedResourceList();
278 if (!selectedResources.isEmpty()) {
279 int addedCount = Activator
281 .getResourceManager()
282 .addResourceToCollection(
283 (CollectionResource) res,
285 if (addedCount > 0) {
287 status = "[" + addedCount + "/"
288 + selectedResources.size()
289 + "] resources added to the collection";
291 UiListenerHandler.getInstance()
292 .resourceListUpdateUINotification(
293 ResourceType.COLLECTION);
295 status = "Failed to add resources to the collection";
300 // Checking whether the uri is used by any other resource.
303 .getResourceManager()
305 collectionResourceBasicDetailsPage.getResURI())) {
307 .openError(getShell(), "Resource URI in use",
308 "Entered resource URI is in use. Please try a different one.");
309 // TODO: Instead of MessageDialog, errors may be shown on
315 getContainer().run(true, true, new IRunnableWithProgress() {
318 public void run(IProgressMonitor monitor)
319 throws InvocationTargetException,
320 InterruptedException {
323 "Collection Resource Creation Without RAML",
326 createCollectionResourceWithoutRAML((curPage == addResourcesToCollectionPage) ? true
329 if (curPage == addResourcesToCollectionPage) {
330 UiListenerHandler.getInstance()
331 .resourceListUpdateUINotification(
332 ResourceType.COLLECTION);
340 } catch (InvocationTargetException e) {
344 .log(Level.ERROR.ordinal(), new Date(),
347 } catch (InterruptedException e) {
351 .log(Level.ERROR.ordinal(), new Date(),
356 } else if (curPage == devicePage) {
357 final String devName = devicePage.getDeviceName();
358 final Set<Resource> resourceList = devicePage
359 .getSelectedResourceList();
361 getContainer().run(true, true, new IRunnableWithProgress() {
364 public void run(IProgressMonitor monitor)
365 throws InvocationTargetException,
366 InterruptedException {
368 monitor.beginTask("Device Creation", 3);
370 createDevice(devName, resourceList);
372 UiListenerHandler.getInstance()
373 .resourceListUpdateUINotification(
374 ResourceType.DEVICE);
375 status = "Device Created.";
382 } catch (InvocationTargetException e) {
383 Activator.getDefault().getLogManager()
384 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
386 } catch (InterruptedException e) {
387 Activator.getDefault().getLogManager()
388 .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
395 public MainPage getMainPage() {
399 public SimpleResourceBasicDetailsPage getSimpleResourceBasicDetailsPage() {
400 return simpleResourceBasicDetailsPage;
403 public SimpleResourceAddAttributePage getSimpleResourceAddAttributePage() {
404 return simpleResourceAddAttributePage;
407 public CollectionResourceBasicDetailsPage getCollectionResourceBasicDetailsPage() {
408 return collectionResourceBasicDetailsPage;
411 public SimpleResourceOtherDetailsPage getSimpleResourceOtherDetailsPage() {
412 return simpleResourceOtherDetailsPage;
415 public AddResourcesToCollectionPage getAddResourcesToCollectionPage() {
416 return addResourcesToCollectionPage;
419 public LoadRamlPage getLoadRamlPage() {
423 public UpdatePropertiesPage getUpdatePropPage() {
424 return updatePropPage;
427 public DevicePage getDevicePage() {
431 public StartStopResourcePage getStartStopPage() {
432 return startStopPage;
436 * public SingleResource getSimResource() { return simResource; }
438 * public void setSimResource(SingleResource simResource) { this.simResource
442 public void setStatus(String status) {
443 this.status = status;
446 public String getStatus() {
451 * public SingleResource getCreatedResource() { return simResource; }
454 private void createSingleResourceWithoutRAML() {
455 SingleResource resource = new SingleResource();
456 // Basic resource details
457 resource.setResourceURI(simpleResourceBasicDetailsPage.getResURI());
458 resource.setResourceName(simpleResourceBasicDetailsPage.getResName());
459 resource.setResourceTypes(simpleResourceBasicDetailsPage.getResTypes());
460 resource.setObservable(simpleResourceBasicDetailsPage.isObservable());
461 // resource.setStarted(simpleResourceBasicDetailsPage.isStart());
463 // Resource Attributes
464 Map<String, LocalResourceAttribute> attributes = new HashMap<String, LocalResourceAttribute>();
465 Set<AttributeHelper> attributeSet = simpleResourceAddAttributePage
467 if (null != attributeSet && !attributeSet.isEmpty()) {
468 Iterator<AttributeHelper> itr = attributeSet.iterator();
469 AttributeHelper attHelper;
470 LocalResourceAttribute localResAtt;
471 // List<String> attValues;
472 while (itr.hasNext()) {
473 attHelper = itr.next();
474 if (null != attHelper) {
475 localResAtt = attHelper.convertToLocalResourceAttribute();
477 // Set the attribute value list.
480 * Activator.getDefault().getResourceManager().getValueList
481 * (localResAtt); localResAtt.setAttValues(attValues);
484 localResAtt.getResourceAttributeRef().name(),
488 resource.setResourceAttributes(attributes);
492 resource.setGetAllowed(simpleResourceOtherDetailsPage.isGetChecked());
493 resource.setPutAllowed(simpleResourceOtherDetailsPage.isPutChecked());
494 resource.setPostAllowed(simpleResourceOtherDetailsPage.isPostChecked());
496 // Call method of ResourceManager and update the response in the status
499 boolean result = Activator.getDefault().getResourceManager()
500 .createSingleResource(resource);
502 status = "Resource created.";
503 resource.printResourceInfo();
505 status = "Failed to create resource.";
507 } catch (SimulatorException e) {
508 status = "Failed to create resource.\n"
509 + Utility.getSimulatorErrorString(e, null);
513 private void completeResourceCreationWithRAML() {
516 Resource res = loadRamlPage.getResource();
517 if (res instanceof SingleResource) {
520 .getResourceManager()
521 .completeSingleResourceCreationByRAML(res,
522 updatePropPage.getResURI(),
523 updatePropPage.getResName(), false);
527 .getResourceManager()
528 .completeCollectionResourceCreationByRAML(res,
529 updatePropPage.getResURI(),
530 updatePropPage.getResName());
534 status = "Resource created.";
535 loadRamlPage.getResource().printResourceInfo();
537 status = "Failed to create resource.";
539 } catch (SimulatorException e) {
540 status = "Failed to create resource.\n"
541 + Utility.getSimulatorErrorString(e, null);
545 private void createMultiInstanceSingleResourceWithoutRAML() {
547 int toCreateCount = loadRamlPage.getResourceCount();
548 int resCreatedCount = Activator
550 .getResourceManager()
551 .createSingleResourceMultiInstances(
552 loadRamlPage.getConfigFilePath(), toCreateCount);
553 if (resCreatedCount > 0) {
554 status = "[" + resCreatedCount + " out of " + toCreateCount
556 status += ((resCreatedCount == 1) ? "resource" : "resources")
557 + " created successfully.";
559 status = "Failed to create resources.";
561 } catch (SimulatorException e) {
562 status = "Failed to create resource.\n"
563 + Utility.getSimulatorErrorString(e, null);
567 private void createCollectionResourceWithoutRAML(boolean childResExist) {
568 CollectionResource resource = new CollectionResource();
569 // Basic resource details
570 resource.setResourceURI(collectionResourceBasicDetailsPage.getResURI());
571 resource.setResourceName(collectionResourceBasicDetailsPage
573 resource.setResourceTypes(collectionResourceBasicDetailsPage
575 resource.setObservable(collectionResourceBasicDetailsPage
577 // resource.setStarted(simpleResourceBasicDetailsPage.isStart());
579 // Call method of ResourceManager and update the response in the status
582 boolean result = Activator.getDefault().getResourceManager()
583 .createCollectionResource(resource);
585 status = "Resource created.";
586 // Adding child resources.
588 Set<Resource> selectedResources = addResourcesToCollectionPage
589 .getSelectedResourceList();
590 if (!selectedResources.isEmpty()) {
591 int addedCount = Activator
593 .getResourceManager()
594 .addResourceToCollection(resource,
596 if (addedCount > 0) {
597 status = "[" + addedCount + "/"
598 + selectedResources.size()
599 + "] resources added to the collection";
601 status = "Failed to add resources to the collection.";
606 status = "Failed to create resource.";
608 } catch (SimulatorException e) {
609 status = "Failed to create resource.\n"
610 + Utility.getSimulatorErrorString(e, null);
614 private void createDevice(String deviceName, Set<Resource> childs) {
615 Activator.getDefault().getResourceManager()
616 .createDevice(deviceName, childs);