Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / service / simulator / java / eclipse-plugin / ServiceProviderPlugin / src / oic / simulator / serviceprovider / view / dialogs / DeleteResourcePage.java
index be7dae8..b5bd831 100644 (file)
 
 package oic.simulator.serviceprovider.view.dialogs;
 
-import java.util.Iterator;
-import java.util.List;
-
-import oic.simulator.serviceprovider.Activator;
-import oic.simulator.serviceprovider.resource.DeleteCategory;
-import oic.simulator.serviceprovider.utils.Constants;
-
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeNodeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Label;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import oic.simulator.serviceprovider.Activator;
+import oic.simulator.serviceprovider.model.Resource;
+import oic.simulator.serviceprovider.model.SingleResource;
+import oic.simulator.serviceprovider.utils.Constants;
 
 /**
  * This class shows UI for deleting resources.
  */
 public class DeleteResourcePage extends WizardPage {
 
-    private Button         allRbtn;
-    private Button         byTypeRbtn;
-    private Button         byUriRbtn;
-
-    private CCombo         resourceTypeCmb;
-    private Text           resourceUriTxt;
+    private CheckboxTreeViewer    singleTreeViewer;
 
-    private DeleteCategory deleteCategory;
+    private List<SingleResource>  singleSourceList;
 
-    // It will hold either the resource type or resource uri
-    private String         deleteCandidate;
+    private TreeViewContentHelper singleTreeViewContentHelper;
 
     protected DeleteResourcePage() {
-        super("Delete Resource");
+        super("Delete Resources");
+
+        singleSourceList = Activator.getDefault().getResourceManager()
+                .getSingleResourceList();
     }
 
     @Override
     public void createControl(Composite parent) {
         setPageComplete(false);
-        setTitle(Constants.DELETE_PAGE_TITLE);
-        setMessage(Constants.DELETE_PAGE_MESSAGE);
+        setTitle("Delete Resources");
+        setMessage("Select one or more simple resources for deletion.");
+
+        Composite container = new Composite(parent, SWT.NONE);
+        container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+        GridLayout layout = new GridLayout(4, true);
+        container.setLayout(layout);
+
+        createSingleResourcesArea(container);
 
-        Composite compContent = new Composite(parent, SWT.NONE);
-        compContent.setLayout(new GridLayout(1, false));
+        setControl(container);
+    }
+
+    private void createSingleResourcesArea(Composite container) {
+        Composite singleContainer = new Composite(container, SWT.NONE);
         GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
-        compContent.setLayoutData(gd);
-
-        Group group = new Group(compContent, SWT.NONE);
-        group.setText("Select Category");
-        GridLayout gridLayout = new GridLayout(2, false);
-        gridLayout.verticalSpacing = 15;
-        gridLayout.marginTop = 10;
-        gridLayout.marginLeft = 10;
-        group.setLayout(gridLayout);
+        gd.horizontalSpan = 4;
+        singleContainer.setLayoutData(gd);
+        GridLayout layout = new GridLayout();
+        singleContainer.setLayout(layout);
+
+        Label lbl = new Label(singleContainer, SWT.NONE);
+        lbl.setText("Simple Resources:");
         gd = new GridData(SWT.FILL, SWT.FILL, true, true);
-        group.setLayoutData(gd);
+        lbl.setLayoutData(gd);
 
-        allRbtn = new Button(group, SWT.RADIO);
-        allRbtn.setText("All resources");
-        gd = new GridData();
-        gd.horizontalSpan = 2;
-        gd.widthHint = 200;
-        allRbtn.setLayoutData(gd);
+        Group resourceGroup = new Group(singleContainer, SWT.NONE);
 
-        byTypeRbtn = new Button(group, SWT.RADIO);
-        byTypeRbtn.setText("All (By resource type)");
-        gd = new GridData();
-        gd.widthHint = 200;
-        byTypeRbtn.setLayoutData(gd);
+        Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
 
-        resourceTypeCmb = new CCombo(group, SWT.READ_ONLY | SWT.BORDER);
+        resourceGroup.setLayout(new GridLayout());
         gd = new GridData();
-        gd.widthHint = 200;
-        resourceTypeCmb.setLayoutData(gd);
+        gd.grabExcessHorizontalSpace = true;
+        gd.horizontalAlignment = SWT.FILL;
+        gd.heightHint = 300;
+        gd.horizontalSpan = 2;
+        resourceGroup.setLayoutData(gd);
 
-        byUriRbtn = new Button(group, SWT.RADIO);
-        byUriRbtn.setText("By Resource URI");
-        gd = new GridData();
-        gd.widthHint = 200;
-        byUriRbtn.setLayoutData(gd);
+        if (null == singleSourceList || singleSourceList.isEmpty()) {
+            return;
+        }
 
-        resourceUriTxt = new Text(group, SWT.BORDER);
+        singleTreeViewer = new CheckboxTreeViewer(resourceGroup);
+        singleTreeViewer.getTree().setBackground(color);
         gd = new GridData();
-        gd.widthHint = 300;
-        resourceUriTxt.setLayoutData(gd);
+        gd.grabExcessHorizontalSpace = true;
+        gd.horizontalAlignment = SWT.FILL;
+        gd.grabExcessVerticalSpace = true;
+        gd.verticalAlignment = SWT.FILL;
+
+        singleTreeViewer.getTree().setLayoutData(gd);
+        singleTreeViewer
+                .setContentProvider(new SingleResourceContentProvider());
+        singleTreeViewer.setLabelProvider(new TreeLabelProvider());
+        singleTreeViewer.setInput(new TreeNodeContentProvider());
+        singleTreeViewer.addCheckStateListener(new ICheckStateListener() {
 
-        // Setting the initial visibility of controls
-        allRbtn.setSelection(false);
-        byTypeRbtn.setSelection(false);
-        byUriRbtn.setSelection(false);
-
-        resourceTypeCmb.setEnabled(false);
-        resourceUriTxt.setEnabled(false);
-
-        deleteCategory = DeleteCategory.NONE;
+            @Override
+            public void checkStateChanged(CheckStateChangedEvent e) {
+                Object element = e.getElement();
+                if (element instanceof TreeViewContentHelper) {
+                    singleTreeViewer.setGrayed(singleTreeViewContentHelper,
+                            false);
+                    singleTreeViewer.setChecked(singleTreeViewContentHelper,
+                            e.getChecked());
+                    singleTreeViewer.setSubtreeChecked(element, e.getChecked());
+                } else {
+                    Object obj[] = singleTreeViewer.getCheckedElements();
+                    if (null != obj && obj.length > 0) {
+                        int checkedCount = obj.length;
+                        boolean isParentGrayed = singleTreeViewer
+                                .getChecked(singleTreeViewContentHelper);
+                        boolean isParentChecked = singleTreeViewer
+                                .getChecked(singleTreeViewContentHelper);
+                        if (isParentChecked || isParentGrayed) {
+                            checkedCount--;
+                        }
+                        if (checkedCount == singleSourceList.size()) {
+                            singleTreeViewer.setGrayed(
+                                    singleTreeViewContentHelper, false);
+                            singleTreeViewer.setChecked(
+                                    singleTreeViewContentHelper, true);
+                        } else {
+                            if (checkedCount > 0) {
+                                singleTreeViewer.setGrayed(
+                                        singleTreeViewContentHelper, true);
+                                singleTreeViewer.setChecked(
+                                        singleTreeViewContentHelper, true);
+                            } else {
+                                singleTreeViewer.setGrayed(
+                                        singleTreeViewContentHelper, false);
+                                singleTreeViewer.setChecked(
+                                        singleTreeViewContentHelper, false);
+                            }
+                        }
+                    }
+                }
+                setPageComplete(isSelectionDone());
+            }
+        });
+        singleTreeViewer.expandAll();
 
-        populateDataInUI();
+    }
 
-        addUIListeners();
+    public Set<SingleResource> getSelectedSingleResourcesList() {
+        final Set<SingleResource> singles = new HashSet<SingleResource>();
+        Display.getDefault().syncExec(new Runnable() {
 
-        setControl(compContent);
+            @Override
+            public void run() {
+                if (null == singleTreeViewer) {
+                    return;
+                }
+                Object selection[] = singleTreeViewer.getCheckedElements();
+                if (null == selection || selection.length < 1) {
+                    return;
+                }
+                for (Object obj : selection) {
+                    if (obj instanceof SingleResource) {
+                        singles.add((SingleResource) obj);
+                    }
+                }
+            }
+        });
+        return singles;
     }
 
-    private void populateDataInUI() {
-        // Populate Resourcetype in Combo
-        populateResourceTypeCombo();
-    }
+    class SingleResourceContentProvider implements ITreeContentProvider {
 
-    private void populateResourceTypeCombo() {
-        List<String> resourceTypeList;
-        resourceTypeList = Activator.getDefault().getResourceManager()
-                .getResourceTypeList();
-        if (null != resourceTypeList) {
-            Iterator<String> itr = resourceTypeList.iterator();
-            while (itr.hasNext()) {
-                resourceTypeCmb.add(itr.next());
-            }
+        @Override
+        public void dispose() {
         }
 
-        // By default, select the first item in the combo
-        if (resourceTypeCmb.getItemCount() > 0) {
-            resourceTypeCmb.select(0);
-            deleteCandidate = resourceTypeCmb.getText();
+        @Override
+        public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
         }
-    }
 
-    public void addUIListeners() {
-        allRbtn.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                // Update the visibility of controls
-                resourceTypeCmb.setEnabled(false);
-                resourceUriTxt.setEnabled(false);
-
-                deleteCategory = DeleteCategory.ALL;
-                deleteCandidate = null;
-                setPageComplete(isSelectionDone());
+        @Override
+        public Object[] getChildren(Object parent) {
+            if (parent instanceof TreeViewContentHelper) {
+                return ((TreeViewContentHelper) parent).getResources()
+                        .toArray();
             }
-        });
-
-        byTypeRbtn.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                // Update the visibility of controls
-                resourceTypeCmb.setEnabled(true);
-                resourceUriTxt.setEnabled(false);
+            return null;
+        }
 
-                deleteCategory = DeleteCategory.BY_TYPE;
-                setPageComplete(isSelectionDone());
-            }
-        });
+        @Override
+        public Object[] getElements(Object parent) {
+            Object obj[] = new Object[1];
+            singleTreeViewContentHelper = new TreeViewContentHelper(
+                    singleSourceList);
+            obj[0] = singleTreeViewContentHelper;
+            return obj;
+        }
 
-        byUriRbtn.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                // Update the visibility of controls
-                resourceUriTxt.setEnabled(true);
-                resourceUriTxt.setFocus();
-                resourceTypeCmb.setEnabled(false);
+        @Override
+        public Object getParent(Object child) {
+            return null;
+        }
 
-                deleteCategory = DeleteCategory.BY_URI;
-                setPageComplete(isSelectionDone());
+        @Override
+        public boolean hasChildren(Object parent) {
+            if (parent instanceof TreeViewContentHelper) {
+                return true;
             }
-        });
+            return false;
+        }
+    }
 
-        resourceTypeCmb.addModifyListener(new ModifyListener() {
-            @Override
-            public void modifyText(ModifyEvent arg0) {
-                setPageComplete(isSelectionDone());
+    private static class TreeLabelProvider extends LabelProvider {
+        @Override
+        public String getText(Object element) {
+            if (element instanceof TreeViewContentHelper) {
+                return "All";
             }
-        });
+            Resource res = (Resource) element;
+            return res.getResourceName() + " (" + res.getResourceURI() + ")";
+        }
 
-        resourceUriTxt.addModifyListener(new ModifyListener() {
-            @Override
-            public void modifyText(ModifyEvent arg0) {
-                setPageComplete(isSelectionDone());
+        @Override
+        public Image getImage(Object element) {
+            if (element instanceof SingleResource) {
+                return Activator.getDefault().getImageRegistry()
+                        .get(Constants.SINGLE_RESOURCE);
+            } else {
+                return null;
             }
-        });
+        }
     }
 
-    public boolean isSelectionDone() {
-        boolean done = false;
-        if (deleteCategory == DeleteCategory.ALL) {
-            done = true;
-        } else if (deleteCategory == DeleteCategory.BY_TYPE) {
-            deleteCandidate = resourceTypeCmb.getText();
-            if (null != deleteCandidate && deleteCandidate.length() > 0) {
-                done = true;
-            }
-        } else if (deleteCategory == DeleteCategory.BY_URI) {
-            deleteCandidate = resourceUriTxt.getText();
-            if (null != deleteCandidate && deleteCandidate.length() > 0) {
-                done = true;
-            }
+    private static class TreeViewContentHelper {
+        List<? extends Resource> resources;
+
+        public TreeViewContentHelper(List<? extends Resource> resources) {
+            this.resources = resources;
         }
-        return done;
-    }
 
-    public DeleteCategory getDeleteCategory() {
-        return deleteCategory;
-    }
+        public void setResources(List<? extends Resource> resources) {
+            this.resources = resources;
+        }
 
-    public String getDeleteCandidate() {
-        return deleteCandidate;
+        public List<? extends Resource> getResources() {
+            return resources;
+        }
     }
 
-    public void setFocusToTextBox() {
-        resourceUriTxt.setFocus();
+    public boolean isSelectionDone() {
+        if (null != singleTreeViewer) {
+            Object obj[] = singleTreeViewer.getCheckedElements();
+            if (null != obj && obj.length > 0) {
+                return true;
+            }
+        }
+        return false;
     }
 }
\ No newline at end of file