View Javadoc

1   /*
2    *  File: InfoProviderView.java 
3    *  Copyright (c) 2004-2007  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    * All rights reserved. This program and the accompanying materials
7    * are made available under the terms of the Common Public License v1.0
8    * which accompanies this distribution, and is available at
9    * http://www.eclipse.org/legal/cpl-v10.html
10   */
11  package de.jaret.util.ui.infoprovider;
12  
13  import java.util.ArrayList;
14  import java.util.HashMap;
15  import java.util.Map;
16  
17  import org.eclipse.jface.viewers.ILabelProviderListener;
18  import org.eclipse.jface.viewers.ISelectionChangedListener;
19  import org.eclipse.jface.viewers.IStructuredContentProvider;
20  import org.eclipse.jface.viewers.IStructuredSelection;
21  import org.eclipse.jface.viewers.ITableLabelProvider;
22  import org.eclipse.jface.viewers.ITreeContentProvider;
23  import org.eclipse.jface.viewers.LabelProvider;
24  import org.eclipse.jface.viewers.SelectionChangedEvent;
25  import org.eclipse.jface.viewers.TableViewer;
26  import org.eclipse.jface.viewers.TreeViewer;
27  import org.eclipse.jface.viewers.Viewer;
28  import org.eclipse.swt.SWT;
29  import org.eclipse.swt.custom.SashForm;
30  import org.eclipse.swt.events.SelectionEvent;
31  import org.eclipse.swt.events.SelectionListener;
32  import org.eclipse.swt.graphics.Image;
33  import org.eclipse.swt.graphics.Point;
34  import org.eclipse.swt.layout.GridData;
35  import org.eclipse.swt.layout.GridLayout;
36  import org.eclipse.swt.layout.RowData;
37  import org.eclipse.swt.layout.RowLayout;
38  import org.eclipse.swt.widgets.Button;
39  import org.eclipse.swt.widgets.Composite;
40  import org.eclipse.swt.widgets.Display;
41  import org.eclipse.swt.widgets.Shell;
42  import org.eclipse.swt.widgets.TableColumn;
43  
44  import de.jaret.util.infoprovider.JaretInfoProvider;
45  import de.jaret.util.infoprovider.SysInfoEntry;
46  import de.jaret.util.ui.TableExtension;
47  
48  /**
49   * View for JaretSystemInfoProviders. Instantiates a shell to be displayed within.
50   * 
51   * @author Peter Kliem
52   * @version $Id: InfoProviderView.java 242 2007-02-11 21:05:07Z olk $
53   */
54  public class InfoProviderView implements ISelectionChangedListener, SelectionListener {
55      static final int BUTTON_WIDTH = 50;
56      Shell _shell;
57  
58      private TableViewer _tviewer;
59  
60      private Button _closeButton;
61      private Button _refreshButton;
62  
63      private TreeViewer _treeViewer;
64      private JaretInfoProvider _rootProvider;
65      private int _accessLevel;
66  
67      /**
68       * Create an InfoProviderView.
69       * 
70       * @param rootInfoProvider root
71       * @param title title for the shell window
72       * @param accessLevel entries that claim an access level > this parameter will not be displayed
73       */
74      public InfoProviderView(JaretInfoProvider rootInfoProvider, String title, int accessLevel) {
75          _accessLevel = accessLevel;
76          _shell = new Shell(Display.getCurrent());
77          _rootProvider = rootInfoProvider;
78          _shell.setText(title != null ? title : "Info");
79          // Size of the shell
80          _shell.setSize(700, 400);
81  
82          createControls();
83          _shell.open();
84      }
85  
86      public Shell getShell() {
87          return _shell;
88      }
89  
90      protected void createControls() {
91          Composite composite = _shell;
92          GridLayout gridLayout = new GridLayout();
93          gridLayout.numColumns = 1;
94          composite.setLayout(gridLayout);
95  
96          GridData gd = new GridData(GridData.FILL_BOTH);
97  
98          SashForm sash = new SashForm(composite, SWT.HORIZONTAL);
99          sash.setLayoutData(gd);
100 
101         _treeViewer = new TreeViewer(sash);
102         _treeViewer.setContentProvider(new IPTreeContentProvider(_rootProvider));
103         _treeViewer.setInput("");
104         _treeViewer.setLabelProvider(new IPTreeLabelProvider());
105         _treeViewer.addSelectionChangedListener(this);
106 
107         _tviewer = new TableViewer(sash, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
108         _tviewer.setContentProvider(new IPTableContentProvider());
109         _tviewer.setLabelProvider(new IPTableLabelProvider());
110 
111         TableColumn column = new TableColumn(_tviewer.getTable(), SWT.LEFT);
112         column.setText("Name");
113         column.setWidth(100);
114         column = new TableColumn(_tviewer.getTable(), SWT.LEFT);
115         column.setText("Value");
116         column.setWidth(100);
117 
118         _tviewer.getTable().setHeaderVisible(true);
119 
120         TableExtension te = new TableExtension(_tviewer);
121 
122         // buttons
123 
124         Composite buttonbar = new Composite(composite, SWT.NULL);
125         gd = new GridData(GridData.HORIZONTAL_ALIGN_END);
126         buttonbar.setLayoutData(gd);
127 
128         buttonbar.setLayout(new RowLayout());
129 
130         _refreshButton = new Button(buttonbar, SWT.PUSH);
131         _refreshButton.setText("Refresh");
132         Point size = _refreshButton.computeSize(SWT.DEFAULT, SWT.DEFAULT);
133         RowData rd = new RowData(BUTTON_WIDTH, size.y);
134         _refreshButton.setLayoutData(rd);
135         _refreshButton.addSelectionListener(this);
136 
137         _closeButton = new Button(buttonbar, SWT.PUSH);
138         _closeButton.setText("Close");
139         size = _closeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT);
140         rd = new RowData(BUTTON_WIDTH, size.y);
141         _closeButton.setLayoutData(rd);
142         _shell.setDefaultButton(_closeButton);
143         _closeButton.addSelectionListener(this);
144 
145     }
146 
147     public class IPTreeContentProvider implements ITreeContentProvider {
148         Map _parentMap = new HashMap();
149         JaretInfoProvider _root;
150 
151         public IPTreeContentProvider(JaretInfoProvider root) {
152             _root = root;
153         }
154 
155         /*
156          * (non-Javadoc)
157          * 
158          * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
159          */
160         public Object[] getChildren(Object arg0) {
161             java.util.List l = ((JaretInfoProvider) arg0).getSubInfoProviders();
162             if (l == null) {
163                 return new Object[0];
164             }
165             return l.toArray();
166         }
167 
168         /*
169          * (non-Javadoc)
170          * 
171          * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
172          */
173         public Object getParent(Object arg0) {
174             Object parent = _parentMap.get(arg0);
175             if (parent == null) {
176                 parent = findParent(_root, (JaretInfoProvider) arg0);
177                 _parentMap.put(arg0, parent);
178             }
179             System.out.println("PARENT " + parent);
180             return parent;
181         }
182 
183         /**
184          * @param provider
185          * @return Object
186          */
187         private JaretInfoProvider findParent(JaretInfoProvider base, JaretInfoProvider child) {
188             java.util.List l = base.getSubInfoProviders();
189             if (l == null) {
190                 return null;
191             }
192 
193             for (int i = 0; i < l.size(); i++) {
194                 JaretInfoProvider ip = (JaretInfoProvider) l.get(i);
195                 if (ip.equals(child)) {
196                     return base;
197                 } else {
198                     JaretInfoProvider ipNext = findParent(ip, child);
199                     if (ipNext != null) {
200                         return ipNext;
201                     }
202                 }
203             }
204             return null;
205         }
206 
207         /*
208          * (non-Javadoc)
209          * 
210          * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
211          */
212         public boolean hasChildren(Object arg0) {
213             if (arg0 instanceof String)
214                 return true;
215             return getChildren(arg0).length > 0 ? true : false;
216         }
217 
218         /*
219          * (non-Javadoc)
220          * 
221          * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
222          */
223         public Object[] getElements(Object arg0) {
224             // return new Object[] {arg0};
225             if (arg0 instanceof String)
226                 return new Object[] {_root};
227             return getChildren(arg0);
228         }
229 
230         /*
231          * (non-Javadoc)
232          * 
233          * @see org.eclipse.jface.viewers.IContentProvider#dispose()
234          */
235         public void dispose() {
236         }
237 
238         /*
239          * (non-Javadoc)
240          * 
241          * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
242          * java.lang.Object, java.lang.Object)
243          */
244         public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
245         }
246     }
247 
248     class IPTreeLabelProvider extends LabelProvider {
249         public String getText(Object o) {
250             JaretInfoProvider ip = (JaretInfoProvider) o;
251             String text = ip.getInfoProviderName();
252             return text;
253         }
254     }
255 
256     class IPTableContentProvider implements IStructuredContentProvider {
257         public Object[] getElements(Object element) {
258             JaretInfoProvider ip = (JaretInfoProvider) element;
259             Object[] kids = null;
260             java.util.List<SysInfoEntry> l = ip.getSysInfoEntries();
261             // filter for acces level
262             java.util.List<SysInfoEntry> lout = new ArrayList<SysInfoEntry>();
263             for (SysInfoEntry entry : l) {
264                 if (entry.access <= _accessLevel) {
265                     lout.add(entry);
266                 }
267             }
268             kids = lout.toArray();
269             return kids;
270         }
271 
272         public void dispose() {
273         }
274 
275         public void inputChanged(Viewer viewer, Object old_object, Object new_object) {
276         }
277     }
278 
279     class IPTableLabelProvider implements ITableLabelProvider {
280         public String getColumnText(Object obj, int i) {
281             String result;
282             SysInfoEntry entry = (SysInfoEntry) obj;
283             switch (i) {
284             case 0:
285                 result = entry.name;
286                 break;
287             case 1:
288                 result = entry.value;
289                 break;
290             default:
291                 result = "error - unknow column";
292                 break;
293             }
294             return result;
295         }
296 
297         public void addListener(ILabelProviderListener ilabelproviderlistener) {
298         }
299 
300         public void dispose() {
301         }
302 
303         public boolean isLabelProperty(Object obj, String s) {
304             return false;
305         }
306 
307         public void removeListener(ILabelProviderListener ilabelproviderlistener) {
308         }
309 
310         public Image getColumnImage(Object arg0, int arg1) {
311             return null;
312         }
313     }
314 
315     /*
316      * (non-Javadoc)
317      * 
318      * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
319      */
320     public void selectionChanged(SelectionChangedEvent event) {
321         IStructuredSelection selection = (IStructuredSelection) event.getSelection();
322         Object selected = selection.getFirstElement();
323         _tviewer.setInput(selected);
324     }
325 
326     /*
327      * (non-Javadoc)
328      * 
329      * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
330      */
331     public void widgetSelected(SelectionEvent event) {
332         if (event.getSource().equals(_closeButton)) {
333             _shell.close();
334         } else if (event.getSource().equals(_refreshButton)) {
335             _treeViewer.refresh();
336             _tviewer.refresh();
337         }
338     }
339 
340     /*
341      * (non-Javadoc)
342      * 
343      * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
344      */
345     public void widgetDefaultSelected(SelectionEvent event) {
346     }
347 
348 }