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