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