Merge branch 'develop' into remoting-4.0
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / sessions / InspectSessionsDialog.java
1 // $Id$
2 /**
3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.view.sessions;
11
12 import java.util.List;
13
14 import net.sf.ehcache.Cache;
15 import net.sf.ehcache.Element;
16
17 import org.eclipse.jface.viewers.ILabelProvider;
18 import org.eclipse.jface.viewers.ITreeContentProvider;
19 import org.eclipse.jface.viewers.StyledCellLabelProvider;
20 import org.eclipse.jface.viewers.StyledString;
21 import org.eclipse.jface.viewers.TreeViewer;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.jface.viewers.ViewerCell;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.custom.SashForm;
26 import org.eclipse.swt.events.SelectionAdapter;
27 import org.eclipse.swt.events.SelectionEvent;
28 import org.eclipse.swt.graphics.Image;
29 import org.eclipse.swt.layout.GridData;
30 import org.eclipse.swt.layout.GridLayout;
31 import org.eclipse.swt.widgets.Button;
32 import org.eclipse.swt.widgets.Composite;
33 import org.eclipse.swt.widgets.Dialog;
34 import org.eclipse.swt.widgets.Display;
35 import org.eclipse.swt.widgets.Label;
36 import org.eclipse.swt.widgets.Shell;
37 import org.eclipse.swt.widgets.Text;
38 import org.eclipse.ui.dialogs.FilteredTree;
39 import org.eclipse.ui.dialogs.PatternFilter;
40 import org.eclipse.wb.swt.SWTResourceManager;
41
42 import eu.etaxonomy.taxeditor.remoting.cache.CdmModelFieldPropertyFromClass;
43 import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
44 import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
45 import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult.CdmEntityInfo;
46 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
47 import eu.etaxonomy.taxeditor.store.CdmStore;
48
49 /**
50 * @author cmathew
51 * @date 17 Feb 2015
52 *
53 */
54 public class InspectSessionsDialog extends Dialog {
55
56 protected Object result;
57 protected Shell shlInspectSessions;
58 private Text txtDebugInfo;
59 private Label lblDebugInformation;
60
61 private final Cache cdmlibModelCache;
62
63 private final ICdmEntitySession activeSession;
64
65 private TreeViewer treeViewer;
66 private Button btnClose;
67 EntityCacherDebugResult ecdr;
68 private SashForm sashForm;
69 private Composite compositeDebug;
70 /**
71 * Create the dialog.
72 * @param parent
73 * @param style
74 */
75 public InspectSessionsDialog(Shell parent, int style) {
76 super(parent, style);
77 setText("Inspect Active Session");
78 cdmlibModelCache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
79 activeSession = CdmStore.getCurrentSessionManager().getActiveSession();
80 ecdr = activeSession.debug();
81 }
82
83 /**
84 * Open the dialog.
85 * @return the result
86 */
87 public Object open() {
88
89 createContents();
90 setDebugInfoText();
91 treeViewer.setContentProvider(new SessionsTreeContentProvider());
92 treeViewer.setLabelProvider(new SessionsTreeLabelProvider());
93 treeViewer.setInput(getRootElements());
94 shlInspectSessions.open();
95 shlInspectSessions.layout();
96 Display display = getParent().getDisplay();
97 while (!shlInspectSessions.isDisposed()) {
98 if (!display.readAndDispatch()) {
99 display.sleep();
100 }
101 }
102 return result;
103 }
104
105 /**
106 * Create contents of the dialog.
107 */
108 private void createContents() {
109 shlInspectSessions = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.RESIZE);
110 shlInspectSessions.setSize(641, 631);
111 shlInspectSessions.setText("Inspect Sessions");
112 shlInspectSessions.setLayout(new GridLayout(1, false));
113
114 sashForm = new SashForm(shlInspectSessions, SWT.VERTICAL);
115 sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
116
117 PatternFilter filter = new PatternFilter();
118 FilteredTree tree = new FilteredTree(sashForm, SWT.MULTI | SWT.H_SCROLL | SWT.BORDER
119 | SWT.V_SCROLL, filter, true);
120 treeViewer = tree.getViewer();
121 //treeViewer = new TreeViewer(sashForm, SWT.BORDER);
122 //Tree tree = treeViewer.getTree();
123
124 compositeDebug = new Composite(sashForm, SWT.NONE);
125 compositeDebug.setLayout(new GridLayout(1, false));
126
127 lblDebugInformation = new Label(compositeDebug, SWT.NONE);
128 lblDebugInformation.setAlignment(SWT.CENTER);
129 lblDebugInformation.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));
130 lblDebugInformation.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
131 lblDebugInformation.setText("Debug Information");
132
133 txtDebugInfo = new Text(compositeDebug, SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);
134 txtDebugInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
135 sashForm.setWeights(new int[] {338, 184});
136
137 btnClose = new Button(shlInspectSessions, SWT.NONE);
138 btnClose.addSelectionListener(new SelectionAdapter() {
139 @Override
140 public void widgetSelected(SelectionEvent e) {
141 shlInspectSessions.dispose();
142 }
143 });
144 GridData gd_btnClose = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
145 gd_btnClose.widthHint = 70;
146 btnClose.setLayoutData(gd_btnClose);
147 btnClose.setText("Close");
148
149 }
150
151 private void setDebugInfoText() {
152 txtDebugInfo.setText(ecdr.toString());
153 }
154 private CdmEntityInfo[] getRootElements() {
155
156 List<CdmEntityInfo> rootElemnts = ecdr.getRootElements();
157 return rootElemnts.toArray(new CdmEntityInfo[rootElemnts.size()]);
158 }
159
160 class SessionsTreeContentProvider implements ITreeContentProvider {
161
162
163
164 /* (non-Javadoc)
165 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
166 */
167 @Override
168 public void dispose() {
169
170 }
171
172 /* (non-Javadoc)
173 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
174 */
175 @Override
176 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
177
178
179 }
180
181 /* (non-Javadoc)
182 * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
183 */
184 @Override
185 public Object[] getElements(Object inputElement) {
186 return (CdmEntityInfo[])inputElement;
187 }
188
189 /* (non-Javadoc)
190 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
191 */
192 @Override
193 public Object[] getChildren(Object parentElement) {
194 List<CdmEntityInfo> children = ((CdmEntityInfo)parentElement).getChildren();
195 return children.toArray();
196 }
197
198 /* (non-Javadoc)
199 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
200 */
201 @Override
202 public Object getParent(Object element) {
203 CdmEntityInfo cei = (CdmEntityInfo)element;
204 return cei.getParent();
205 }
206
207 /* (non-Javadoc)
208 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
209 */
210 @Override
211 public boolean hasChildren(Object element) {
212 List<CdmEntityInfo> children = ((CdmEntityInfo)element).getChildren();
213 if(children != null && !children.isEmpty()) {
214 return true;
215 } else {
216 return false;
217 }
218 }
219
220 public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) {
221 Element e = cdmlibModelCache.get(className);
222 if (e == null) {
223 return null;
224 } else {
225 return (CdmModelFieldPropertyFromClass) e.getObjectValue();
226 }
227 }
228
229 }
230
231 class SessionsTreeLabelProvider extends StyledCellLabelProvider implements ILabelProvider {
232
233 @Override
234 public void update(ViewerCell cell) {
235 CdmEntityInfo cei = (CdmEntityInfo)cell.getElement();
236 StyledString text = new StyledString();
237 if(cei != null) {
238 text.append(cei.getLabel());
239 }
240 cell.setText(text.toString());
241 cell.setStyleRanges(text.getStyleRanges());
242 super.update(cell);
243 }
244
245 /* (non-Javadoc)
246 * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
247 */
248 @Override
249 public Image getImage(Object element) {
250 // TODO Auto-generated method stub
251 return null;
252 }
253
254 /* (non-Javadoc)
255 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
256 */
257 @Override
258 public String getText(Object element) {
259 CdmEntityInfo cei = (CdmEntityInfo)element;
260 return cei.getLabel();
261 }
262 }
263 }
264
265