Imported Upstream version 1.2.0
[platform/upstream/iotivity.git] / service / simulator / java / eclipse-plugin / ServiceProviderPlugin / src / oic / simulator / serviceprovider / view / dialogs / CreateResourceWizard.java
index f45afec..88f50fd 100644 (file)
@@ -28,9 +28,6 @@ import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Display;
 
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.util.Date;
@@ -58,21 +55,21 @@ import oic.simulator.serviceprovider.view.dialogs.MainPage.Option;
  */
 public class CreateResourceWizard extends Wizard {
 
-    private MainPage                       mainPage;
-    private SimpleResourceBasicDetailsPage simpleResourceBasicDetailsPage;
-    private SimpleResourceAddAttributePage simpleResourceAddAttributePage;
-    private SimpleResourceOtherDetailsPage simpleResourceOtherDetailsPage;
-    private LoadRamlPage                   loadRamlPage;
-    private UpdatePropertiesPage           updatePropPage;
+    private MainPage                                  mainPage;
+    private SimpleResourceBasicDetailsPage            simpleResourceBasicDetailsPage;
+    private SimpleResourceAddAttributePage            simpleResourceAddAttributePage;
+    private SimpleResourceOtherDetailsPage            simpleResourceOtherDetailsPage;
+    private LoadRamlPage                              loadRamlPage;
+    private UpdatePropertiesPage                      updatePropPage;
+    private UpdateMultiInstanceCreationPropertiesPage updateMultiInstanceCreationPropPage;
 
-    private String                         status;
+    private String                                    status;
 
-    private WizardDialog                   wizDialog;
-    private boolean                        dlgForceClosed;
+    private WizardDialog                              wizDialog;
+    private boolean                                   dlgForceClosed;
 
-    private Resource                       createdResource;
-
-    private IProgressMonitor               progressMonitor;
+    private Resource                                  createdResource;
+    private Set<SingleResource>                       multiInstanceResourceSet;
 
     public CreateResourceWizard() {
         setWindowTitle("Create resources");
@@ -92,6 +89,7 @@ public class CreateResourceWizard extends Wizard {
         simpleResourceOtherDetailsPage = new SimpleResourceOtherDetailsPage();
         loadRamlPage = new LoadRamlPage();
         updatePropPage = new UpdatePropertiesPage();
+        updateMultiInstanceCreationPropPage = new UpdateMultiInstanceCreationPropertiesPage();
 
         addPage(mainPage);
         addPage(simpleResourceBasicDetailsPage);
@@ -99,6 +97,7 @@ public class CreateResourceWizard extends Wizard {
         addPage(simpleResourceOtherDetailsPage);
         addPage(loadRamlPage);
         addPage(updatePropPage);
+        addPage(updateMultiInstanceCreationPropPage);
     }
 
     public void setWizardDialog(WizardDialog dlg) {
@@ -135,14 +134,17 @@ public class CreateResourceWizard extends Wizard {
         return createdResource;
     }
 
+    public Set<SingleResource> getCreatedMultiInstanceResourceSet() {
+        return multiInstanceResourceSet;
+    }
+
     @Override
     public boolean canFinish() {
         IWizardPage curPage = this.getContainer().getCurrentPage();
-        if ((curPage == updatePropPage && ((mainPage.getOption() == Option.SIMPLE_FROM_RAML) || !Activator
-                .getDefault().getResourceManager().isAnyResourceExist()))
-                || curPage == simpleResourceAddAttributePage
-                || (curPage == loadRamlPage && loadRamlPage.isSelectionDone() && loadRamlPage
-                        .isMultiResourceCreation())) {
+        if ((curPage == updateMultiInstanceCreationPropPage || curPage == updatePropPage
+                && ((mainPage.getOption() == Option.SIMPLE_FROM_RAML) || !Activator
+                        .getDefault().getResourceManager().isAnyResourceExist()))
+                || curPage == simpleResourceAddAttributePage) {
             return true;
         }
         return false;
@@ -179,107 +181,58 @@ public class CreateResourceWizard extends Wizard {
                         .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
                 e.printStackTrace();
             }
-        } else if (curPage == loadRamlPage) {
-            // Validate the file path.
-            FileInputStream fileStream = null;
-            try {
-                fileStream = new FileInputStream(
-                        loadRamlPage.getConfigFilePath());
-            } catch (FileNotFoundException e) {
-                MessageDialog
-                        .openError(getShell(), "Invalid File",
-                                "File doesn't exist. Either the file path or file name is invalid.");
-                return false;
-            } finally {
-                if (null != fileStream) {
-                    try {
-                        fileStream.close();
-                    } catch (IOException e) {
-                        Activator
-                                .getDefault()
-                                .getLogManager()
-                                .log(Level.ERROR.ordinal(), new Date(),
-                                        "There is an error while closing the file stream.\n");
-                    }
-                }
-            }
-
-            // Handling multiple instance creation of simple resource with RAML
-            if ((loadRamlPage.getResourceCount() + Activator.getDefault()
-                    .getResourceManager().getResourceCount()) > Constants.MAX_RESOURCE_COUNT) {
-                MessageDialog.openInformation(Display.getDefault()
-                        .getActiveShell(), "Resource limit exceeded",
-                        Constants.RESOURCE_LIMIT_EXCEEDED_MSG);
-                return false;
-            }
-
-            final int[] resCreatedCount = new int[1];
-            try {
-                getContainer().run(true, true, new IRunnableWithProgress() {
-
-                    @Override
-                    public void run(final IProgressMonitor monitor)
-                            throws InvocationTargetException,
-                            InterruptedException {
-                        progressMonitor = monitor;
-                        try {
-                            monitor.beginTask(
-                                    "Single Resource Creation(multi-instance) With RAML",
-                                    loadRamlPage.getResourceCount());
-                            resCreatedCount[0] = createMultiInstanceSingleResourceWithoutRAML();
-
-                        } finally {
-                            monitor.done();
-                        }
-                    }
-                });
-            } catch (InvocationTargetException e) {
-                Activator.getDefault().getLogManager()
-                        .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
-                e.printStackTrace();
-            } catch (InterruptedException e) {
-                Activator.getDefault().getLogManager()
-                        .log(Level.ERROR.ordinal(), new Date(), e.getMessage());
-                e.printStackTrace();
-            }
-            boolean canceled = false;
-            if (null != progressMonitor && progressMonitor.isCanceled()
-                    && 0 == resCreatedCount[0]) {
-                canceled = true;
-            }
-            progressMonitor = null;
-            if (canceled) {
-                return false;
+        } else if (curPage == updatePropPage
+                || curPage == updateMultiInstanceCreationPropPage) {
+            multiInstanceResourceSet = loadRamlPage
+                    .getMultiInstanceResourceSet();
+            createdResource = loadRamlPage.getResource();
+
+            String resName;
+            String resURI;
+            String resType;
+            boolean multiInstanceCreation = loadRamlPage
+                    .isMultiResourceCreation();
+
+            if (curPage == updatePropPage) {
+                resName = updatePropPage.getResName();
+                resURI = updatePropPage.getResURI();
+                resType = updatePropPage.getResType();
             } else {
-                if (resCreatedCount[0] > 0) {
-                    UiListenerHandler.getInstance()
-                            .resourceCreatedUINotification(ResourceType.SINGLE);
-                }
+                resName = updateMultiInstanceCreationPropPage.getResName();
+                resURI = "";
+                resType = updateMultiInstanceCreationPropPage.getResType();
             }
-        } else if (curPage == updatePropPage) {
-            // Handling the single instance
-            String resName = updatePropPage.getResName();
-            String resURI = updatePropPage.getResURI();
+
             if (null == resName || resName.trim().length() < 1) {
                 MessageDialog.openError(Display.getDefault().getActiveShell(),
                         "Invalid Resource Name.", "Resource name is invalid");
                 return false;
             }
-            if (!Utility.isUriValid(resURI)) {
+
+            if (!multiInstanceCreation && !Utility.isUriValid(resURI)) {
                 MessageDialog.openError(Display.getDefault().getActiveShell(),
                         "Invalid Resource URI.", Constants.INVALID_URI_MESSAGE);
                 return false;
             }
+
             // Creation of simple resource with RAML
             // Checking whether the URI is used by any other resource.
-            if (Activator.getDefault().getResourceManager()
-                    .isResourceExist(updatePropPage.getResURI())) {
+            if (!multiInstanceCreation
+                    && Activator.getDefault().getResourceManager()
+                            .isResourceExist(resURI)) {
                 MessageDialog
                         .openError(getShell(), "Resource URI in use",
                                 "Entered resource URI is in use. Please try a different one.");
                 return false;
             }
 
+            if (!Utility.isResourceTypeValid(resType)) {
+                MessageDialog.openError(Display.getDefault().getActiveShell(),
+                        "Invalid Resource Type.",
+                        Constants.INVALID_RESOURCE_TYPE_MESSAGE);
+                return false;
+            }
+
             try {
                 getContainer().run(true, false, new IRunnableWithProgress() {
 
@@ -290,7 +243,11 @@ public class CreateResourceWizard extends Wizard {
                         try {
                             monitor.beginTask("Completing Resource Creation", 2);
                             monitor.worked(1);
-                            completeResourceCreationWithRAML();
+                            if (loadRamlPage.isMultiResourceCreation()) {
+                                completeMultiInstanceResourceCreationWithRAML();
+                            } else {
+                                completeSingleInstanceResourceCreationWithRAML();
+                            }
                             monitor.worked(1);
                         } finally {
                             monitor.done();
@@ -334,6 +291,15 @@ public class CreateResourceWizard extends Wizard {
         return updatePropPage;
     }
 
+    public UpdateMultiInstanceCreationPropertiesPage getUpdateMultiInstanceCreationPropPage() {
+        return updateMultiInstanceCreationPropPage;
+    }
+
+    public void setUpdateMultiInstanceCreationPropPage(
+            UpdateMultiInstanceCreationPropertiesPage updateMultiInstanceCreationPropPage) {
+        this.updateMultiInstanceCreationPropPage = updateMultiInstanceCreationPropPage;
+    }
+
     public void setStatus(String status) {
         this.status = status;
     }
@@ -395,22 +361,23 @@ public class CreateResourceWizard extends Wizard {
         }
     }
 
-    private void completeResourceCreationWithRAML() {
+    private void completeSingleInstanceResourceCreationWithRAML() {
+        String resName = updatePropPage.getResName();
+        String resURI = updatePropPage.getResURI();
+        String resType = updatePropPage.getResType();
+
         try {
             boolean result = false;
-            Resource res = loadRamlPage.getResource();
-            if (res instanceof SingleResource) {
+            if (createdResource instanceof SingleResource) {
                 result = Activator
                         .getDefault()
                         .getResourceManager()
-                        .completeSingleResourceCreationByRAML(res,
-                                updatePropPage.getResURI(),
-                                updatePropPage.getResName(), false);
+                        .completeSingleResourceCreationByRAML(createdResource,
+                                resURI, resName, resType, false);
             }
 
             if (result) {
                 status = "Resource created.";
-                createdResource = res;
             } else {
                 status = "Failed to create resource.";
                 createdResource = null;
@@ -422,47 +389,43 @@ public class CreateResourceWizard extends Wizard {
         }
     }
 
-    private int createMultiInstanceSingleResourceWithoutRAML() {
-        int toCreateCount = loadRamlPage.getResourceCount();
-        int resCreatedCount = 0;
-        Set<SingleResource> resources;
-        try {
-            resources = Activator
-                    .getDefault()
-                    .getResourceManager()
-                    .createSingleResourceMultiInstances(
-                            loadRamlPage.getConfigFilePath(), toCreateCount,
-                            progressMonitor);
-            if (null != progressMonitor && progressMonitor.isCanceled()) {
-                try {
-                    Activator.getDefault().getResourceManager()
-                            .removeSingleResources(resources);
-                } catch (SimulatorException e) {
-                    Activator
-                            .getDefault()
-                            .getLogManager()
-                            .log(Level.ERROR.ordinal(),
-                                    new Date(),
-                                    "There is an error while updating the resource model.\n"
-                                            + Utility.getSimulatorErrorString(
-                                                    e, null));
+    private void completeMultiInstanceResourceCreationWithRAML() {
+        String resName = updateMultiInstanceCreationPropPage.getResName();
+        String resType = updateMultiInstanceCreationPropPage.getResType();
+
+        if (null == multiInstanceResourceSet)
+            return;
+
+        boolean result = false;
+        int count = loadRamlPage.getResourceCount();
+        int successCount = 0;
+        SingleResource resource;
+        Iterator<SingleResource> itr = multiInstanceResourceSet.iterator();
+        while (itr.hasNext()) {
+            resource = itr.next();
+            try {
+                result = Activator
+                        .getDefault()
+                        .getResourceManager()
+                        .completeSingleResourceCreationByRAML(resource, null,
+                                resName, resType, true);
+                if (result) {
+                    successCount++;
                 }
-                return 0;
-            }
-            if (null != resources)
-                resCreatedCount = resources.size();
-            if (resCreatedCount > 0) {
-                status = "[" + resCreatedCount + " out of " + toCreateCount
-                        + "]";
-                status += ((resCreatedCount == 1) ? "resource" : "resources")
-                        + " created successfully.";
-            } else {
-                status = "Failed to create resources.";
+
+            } catch (SimulatorException e) {
+                // Do Nothing.
             }
-        } catch (SimulatorException e) {
-            status = "Failed to create resource.\n"
-                    + Utility.getSimulatorErrorString(e, null);
         }
-        return resCreatedCount;
+        if (successCount > 0) {
+            UiListenerHandler.getInstance().resourceCreatedUINotification(
+                    ResourceType.SINGLE);
+
+            status = "[" + successCount + " out of " + count + "]";
+            status += ((successCount == 1) ? "resource" : "resources")
+                    + " created successfully.";
+        } else {
+            status = "Failed to create resources.";
+        }
     }
 }
\ No newline at end of file