Project

General

Profile

Download (8.89 KB) Statistics
| Branch: | Tag: | Revision:
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

    
(1-1/2)