Base layout of eclipse plugin for service provider.
[platform/upstream/iotivity.git] / service / simulator / java / eclipse-plugin / ServiceProviderPlugin / src / oic / simulator / serviceprovider / view / ResourceManagerView.java
1 package oic.simulator.serviceprovider.view;
2
3 import java.util.Iterator;
4 import java.util.List;
5
6 import oic.simulator.serviceprovider.Activator;
7 import oic.simulator.serviceprovider.listener.IResourceListChangedListener;
8 import oic.simulator.serviceprovider.manager.ResourceManager;
9 import oic.simulator.serviceprovider.utils.Convertion;
10 import oic.simulator.serviceprovider.view.dialogs.CreateResourceWizard;
11 import oic.simulator.serviceprovider.view.dialogs.DeleteCategory;
12 import oic.simulator.serviceprovider.view.dialogs.DeleteResourceWizard;
13 import oic.simulator.serviceprovider.view.dialogs.ResourceWizardDialog;
14
15 import org.eclipse.jface.wizard.WizardDialog;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.SelectionAdapter;
18 import org.eclipse.swt.events.SelectionEvent;
19 import org.eclipse.swt.graphics.Color;
20 import org.eclipse.swt.layout.GridData;
21 import org.eclipse.swt.layout.GridLayout;
22 import org.eclipse.swt.widgets.Button;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Display;
25 import org.eclipse.swt.widgets.Group;
26 import org.eclipse.swt.widgets.Tree;
27 import org.eclipse.swt.widgets.TreeItem;
28 import org.eclipse.ui.PlatformUI;
29 import org.eclipse.ui.part.ViewPart;
30
31 public class ResourceManagerView extends ViewPart {
32
33     public static final String           VIEW_ID = "oic.simulator.serviceprovider.view.resourcemanager";
34
35     private Button                       createButton;
36     private Button                       deleteButton;
37
38     private Tree                         resourceTreeHead;
39
40     private IResourceListChangedListener resourceListChangedListener;
41
42     public ResourceManagerView() {
43         resourceListChangedListener = new IResourceListChangedListener() {
44
45             @Override
46             public void onResourceCreation(String resourceType,
47                     List<String> resourceURI) {
48                 if (null != resourceTreeHead
49                         && !(resourceTreeHead.isDisposed())
50                         && null != resourceType && null != resourceURI) {
51                     TreeItem resourceHead = null;
52                     TreeItem[] items = resourceTreeHead.getItems();
53                     if (null != items) {
54                         for (TreeItem item : items) {
55                             if (item.getText().equals(resourceType)) {
56                                 resourceHead = item;
57                                 break;
58                             }
59                         }
60                         if (null == resourceHead) {
61                             // Adding a new tree header
62                             resourceHead = new TreeItem(resourceTreeHead,
63                                     SWT.NULL);
64                             resourceHead.setText(resourceType);
65                         }
66                         // Add resources under the resourceHead
67                         Iterator<String> uriItr = resourceURI.iterator();
68                         while (uriItr.hasNext()) {
69                             TreeItem newItem = new TreeItem(resourceHead,
70                                     SWT.NULL);
71                             newItem.setText(Convertion.uriToDisplayName(uriItr
72                                     .next()));
73                         }
74                     }
75                 }
76             }
77
78             @Override
79             public void onResourceDeletion(String resourceType,
80                     String resourceURI) {
81                 if (null != resourceTreeHead
82                         && !(resourceTreeHead.isDisposed())) {
83                     TreeItem targetParent = null;
84                     TreeItem[] headItems = resourceTreeHead.getItems();
85                     if (null != headItems) {
86                         for (TreeItem item : headItems) {
87                             if (item.getText().equals(resourceType)) {
88                                 targetParent = item;
89                                 break;
90                             }
91                         }
92                         if (null != targetParent) {
93                             TreeItem[] items = targetParent.getItems();
94                             for (TreeItem item : items) {
95                                 if (item.getText().equals(
96                                         Convertion
97                                                 .uriToDisplayName(resourceURI))) {
98                                     item.dispose();
99                                     if (targetParent.getItemCount() < 1) {
100                                         targetParent.dispose();
101                                     }
102                                     break;
103                                 }
104                             }
105                         }
106                     }
107                 }
108             }
109
110             @Override
111             public void onResourceDeletionByType(String resourceType) {
112                 if (null != resourceTreeHead
113                         && !(resourceTreeHead.isDisposed())) {
114                     TreeItem items[] = resourceTreeHead.getItems();
115                     for (TreeItem item : items) {
116                         if (item.getText().equals(resourceType)) {
117                             item.dispose();
118                             break;
119                         }
120                     }
121                 }
122             }
123
124             public void onAllResourceDeletion() {
125                 if (null != resourceTreeHead
126                         && !(resourceTreeHead.isDisposed())) {
127                     TreeItem[] items = resourceTreeHead.getItems();
128                     if (null != items) {
129                         for (TreeItem item : items) {
130                             item.dispose();
131                         }
132                     }
133                 }
134             }
135         };
136     }
137
138     @Override
139     public void createPartControl(Composite parent) {
140         Composite compContent = new Composite(parent, SWT.NONE);
141         GridLayout baseLayout = new GridLayout(1, false);
142         compContent.setLayout(baseLayout);
143
144         GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
145         compContent.setLayoutData(gd);
146
147         Composite buttonComp = new Composite(compContent, SWT.NONE);
148         buttonComp.setLayout(new GridLayout(2, false));
149
150         gd = new GridData();
151         gd.horizontalAlignment = SWT.FILL;
152         gd.grabExcessHorizontalSpace = true;
153
154         buttonComp.setLayoutData(gd);
155
156         createButton = new Button(buttonComp, SWT.PUSH);
157         createButton.setText("Create");
158         createButton.setToolTipText("Create Simulator Resource(s)");
159
160         gd = new GridData();
161         gd.widthHint = 90;
162         createButton.setLayoutData(gd);
163
164         deleteButton = new Button(buttonComp, SWT.PUSH);
165         deleteButton.setText("Delete");
166         deleteButton.setToolTipText("Delete Simulator Resource(s)");
167
168         gd = new GridData();
169         gd.widthHint = 90;
170         deleteButton.setLayoutData(gd);
171
172         Group resourceGroup = new Group(compContent, SWT.NONE);
173         resourceGroup.setText("Created Resources");
174
175         Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
176         resourceGroup.setBackground(color);
177
178         resourceGroup.setLayout(new GridLayout(1, false));
179         gd = new GridData(SWT.FILL, SWT.FILL, true, true);
180         resourceGroup.setLayoutData(gd);
181
182         resourceTreeHead = new Tree(resourceGroup, SWT.SINGLE);
183
184         gd = new GridData(SWT.FILL, SWT.FILL, true, true);
185
186         resourceTreeHead.setLayoutData(gd);
187
188         addUIListeners();
189
190         addManagerListeners();
191     }
192
193     private void addUIListeners() {
194
195         createButton.addSelectionListener(new SelectionAdapter() {
196             @Override
197             public void widgetSelected(SelectionEvent e) {
198                 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
199
200                     @Override
201                     public void run() {
202                         CreateResourceWizard createWizard = new CreateResourceWizard();
203                         ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
204                                 PlatformUI.getWorkbench().getDisplay()
205                                         .getActiveShell(), createWizard);
206                         int open = wizardDialog.open();
207                         if (open == WizardDialog.OK) {
208                             String configFilePath;
209                             int count;
210                             configFilePath = createWizard.getConfigFilePath();
211                             count = createWizard.getResourceCount();
212
213                             // Create the resource
214                             if (null != configFilePath
215                                     && configFilePath.length() > 0) {
216                                 if (count <= 1) {
217                                     // Single resource creation
218                                     // TODO: Temporary code to show the resource
219                                     // in UI
220                                     Activator.getManager().createResource(
221                                             configFilePath);
222                                 } else {
223                                     // Multi resource creation
224                                     // Activator.getDefault().getManager().createResource(configFilePath,
225                                     // count);
226                                 }
227                             }
228                         }
229                     }
230                 });
231             }
232         });
233
234         deleteButton.addSelectionListener(new SelectionAdapter() {
235             @Override
236             public void widgetSelected(SelectionEvent e) {
237                 PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
238
239                     @Override
240                     public void run() {
241                         DeleteResourceWizard deleteWizard = new DeleteResourceWizard();
242                         ResourceWizardDialog wizardDialog = new ResourceWizardDialog(
243                                 PlatformUI.getWorkbench().getDisplay()
244                                         .getActiveShell(), deleteWizard);
245                         int open = wizardDialog.open();
246                         if (open == WizardDialog.OK) {
247                             if (deleteWizard.getDeleteCategory() == DeleteCategory.BY_URI) {
248                                 String uri = deleteWizard.getDeleteCandidate();
249                                 boolean completeURI = Convertion
250                                         .isUriComplete(uri);
251                                 if (!completeURI) {
252                                     uri = Convertion.displayNameToUri(uri);
253                                 }
254                                 Activator.getManager().deleteResourceByURI(uri);
255                             } else if (deleteWizard.getDeleteCategory() == DeleteCategory.BY_TYPE) {
256                                 Activator.getManager().deleteResourceByType(
257                                         deleteWizard.getDeleteCandidate());
258                             } else if (deleteWizard.getDeleteCategory() == DeleteCategory.ALL) {
259                                 Activator.getManager().deleteAllResources();
260                             }
261                         }
262                     }
263
264                 });
265             }
266         });
267
268         resourceTreeHead.addSelectionListener(new SelectionAdapter() {
269             @Override
270             public void widgetSelected(SelectionEvent e) {
271                 TreeItem[] selectedItems = resourceTreeHead.getSelection();
272                 // Handling only single item selection events
273                 if (1 == selectedItems.length) {
274                     String selectedItem = selectedItems[0].getText();
275                     // Check whether the selected item is a resource category or
276                     // a specific resource
277                     boolean category = isSelectedTreeItemACategory(selectedItem);
278                     if (!category) {
279                         // TODO: Show the properties in the properties view
280                     }
281
282                 }
283             }
284         });
285     }
286
287     private boolean isSelectedTreeItemACategory(String selectedItem) {
288         boolean category = false;
289         TreeItem[] items = resourceTreeHead.getItems();
290         if (null != items) {
291             for (TreeItem item : items) {
292                 if (item.getText().equals(selectedItem)) {
293                     category = true;
294                     break;
295                 }
296             }
297         }
298         return category;
299     }
300
301     public void addManagerListeners() {
302         ResourceManager manager = Activator.getManager();
303         manager.setResourceListChangedListener(resourceListChangedListener);
304     }
305
306     @Override
307     public void setFocus() {
308         // TODO Auto-generated method stub
309
310     }
311
312 }