OpenInspectSessionsHandler : handler for opening the inspect session dialog
[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.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.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Button;
30 import org.eclipse.swt.widgets.Composite;
31 import org.eclipse.swt.widgets.Dialog;
32 import org.eclipse.swt.widgets.Display;
33 import org.eclipse.swt.widgets.Label;
34 import org.eclipse.swt.widgets.Shell;
35 import org.eclipse.swt.widgets.Text;
36 import org.eclipse.swt.widgets.Tree;
37 import org.eclipse.wb.swt.SWTResourceManager;
38
39 import eu.etaxonomy.taxeditor.remoting.cache.CdmModelFieldPropertyFromClass;
40 import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
41 import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
42 import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult.CdmEntityInfo;
43 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
44 import eu.etaxonomy.taxeditor.store.CdmStore;
45
46 /**
47 * @author cmathew
48 * @date 17 Feb 2015
49 *
50 */
51 public class InspectSessionsDialog extends Dialog {
52
53 protected Object result;
54 protected Shell shlInspectSessions;
55 private Text txtDebugInfo;
56 private Label lblDebugInformation;
57
58 private final Cache cdmlibModelCache;
59
60 private final ICdmEntitySession activeSession;
61
62 private TreeViewer treeViewer;
63 private Button btnClose;
64 EntityCacherDebugResult ecdr;
65 private SashForm sashForm;
66 private Composite compositeDebug;
67 /**
68 * Create the dialog.
69 * @param parent
70 * @param style
71 */
72 public InspectSessionsDialog(Shell parent, int style) {
73 super(parent, style);
74 setText("Inspect Active Session");
75 cdmlibModelCache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
76 activeSession = CdmStore.getCurrentSessionManager().getActiveSession();
77 ecdr = activeSession.debug();
78 }
79
80 /**
81 * Open the dialog.
82 * @return the result
83 */
84 public Object open() {
85
86 createContents();
87 setDebugInfoText();
88 treeViewer.setContentProvider(new SessionsTreeContentProvider());
89 treeViewer.setLabelProvider(new SessionsTreeLabelProvider());
90 treeViewer.setInput(getRootElements());
91 shlInspectSessions.open();
92 shlInspectSessions.layout();
93 Display display = getParent().getDisplay();
94 while (!shlInspectSessions.isDisposed()) {
95 if (!display.readAndDispatch()) {
96 display.sleep();
97 }
98 }
99 return result;
100 }
101
102 /**
103 * Create contents of the dialog.
104 */
105 private void createContents() {
106 shlInspectSessions = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.RESIZE);
107 shlInspectSessions.setSize(641, 631);
108 shlInspectSessions.setText("Inspect Sessions");
109 shlInspectSessions.setLayout(new GridLayout(1, false));
110
111 sashForm = new SashForm(shlInspectSessions, SWT.VERTICAL);
112 sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
113
114 treeViewer = new TreeViewer(sashForm, SWT.BORDER);
115 Tree tree = treeViewer.getTree();
116
117 compositeDebug = new Composite(sashForm, SWT.NONE);
118 compositeDebug.setLayout(new GridLayout(1, false));
119
120 lblDebugInformation = new Label(compositeDebug, SWT.NONE);
121 lblDebugInformation.setAlignment(SWT.CENTER);
122 lblDebugInformation.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));
123 lblDebugInformation.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
124 lblDebugInformation.setText("Debug Information");
125
126 txtDebugInfo = new Text(compositeDebug, SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);
127 txtDebugInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
128 sashForm.setWeights(new int[] {338, 184});
129
130 btnClose = new Button(shlInspectSessions, SWT.NONE);
131 btnClose.addSelectionListener(new SelectionAdapter() {
132 @Override
133 public void widgetSelected(SelectionEvent e) {
134 shlInspectSessions.dispose();
135 }
136 });
137 GridData gd_btnClose = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
138 gd_btnClose.widthHint = 70;
139 btnClose.setLayoutData(gd_btnClose);
140 btnClose.setText("Close");
141
142 }
143
144 private void setDebugInfoText() {
145 txtDebugInfo.setText(ecdr.toString());
146 }
147 private CdmEntityInfo[] getRootElements() {
148
149 List<CdmEntityInfo> rootElemnts = ecdr.getRootElements();
150 return rootElemnts.toArray(new CdmEntityInfo[rootElemnts.size()]);
151 }
152
153 class SessionsTreeContentProvider implements ITreeContentProvider {
154
155
156
157 /* (non-Javadoc)
158 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
159 */
160 @Override
161 public void dispose() {
162
163 }
164
165 /* (non-Javadoc)
166 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
167 */
168 @Override
169 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
170
171
172 }
173
174 /* (non-Javadoc)
175 * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
176 */
177 @Override
178 public Object[] getElements(Object inputElement) {
179 return (CdmEntityInfo[])inputElement;
180 }
181
182 /* (non-Javadoc)
183 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
184 */
185 @Override
186 public Object[] getChildren(Object parentElement) {
187 List<CdmEntityInfo> children = ((CdmEntityInfo)parentElement).getChildren();
188 return children.toArray();
189 }
190
191 /* (non-Javadoc)
192 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
193 */
194 @Override
195 public Object getParent(Object element) {
196 CdmEntityInfo cei = (CdmEntityInfo)element;
197 return cei.getParent();
198 }
199
200 /* (non-Javadoc)
201 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
202 */
203 @Override
204 public boolean hasChildren(Object element) {
205 List<CdmEntityInfo> children = ((CdmEntityInfo)element).getChildren();
206 if(children != null && !children.isEmpty()) {
207 return true;
208 } else {
209 return false;
210 }
211 }
212
213 public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) {
214 Element e = cdmlibModelCache.get(className);
215 if (e == null) {
216 return null;
217 } else {
218 return (CdmModelFieldPropertyFromClass) e.getObjectValue();
219 }
220 }
221
222 }
223
224 class SessionsTreeLabelProvider extends StyledCellLabelProvider {
225
226 @Override
227 public void update(ViewerCell cell) {
228 CdmEntityInfo cei = (CdmEntityInfo)cell.getElement();
229 StyledString text = new StyledString();
230 if(cei != null) {
231 text.append(cei.getLabel());
232 }
233 cell.setText(text.toString());
234 cell.setStyleRanges(text.getStyleRanges());
235 super.update(cell);
236 }
237 }
238 }
239
240