2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.view
.sessions
;
11 import java
.text
.DecimalFormat
;
12 import java
.util
.Collection
;
14 import javax
.annotation
.PostConstruct
;
15 import javax
.inject
.Inject
;
17 import org
.eclipse
.core
.commands
.Command
;
18 import org
.eclipse
.core
.commands
.ParameterizedCommand
;
19 import org
.eclipse
.e4
.core
.commands
.ECommandService
;
20 import org
.eclipse
.e4
.core
.commands
.EHandlerService
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.events
.SelectionAdapter
;
23 import org
.eclipse
.swt
.events
.SelectionEvent
;
24 import org
.eclipse
.swt
.layout
.GridData
;
25 import org
.eclipse
.swt
.layout
.GridLayout
;
26 import org
.eclipse
.swt
.widgets
.Button
;
27 import org
.eclipse
.swt
.widgets
.Composite
;
28 import org
.eclipse
.swt
.widgets
.Label
;
29 import org
.eclipse
.swt
.widgets
.Table
;
30 import org
.eclipse
.swt
.widgets
.TableColumn
;
31 import org
.eclipse
.swt
.widgets
.TableItem
;
32 import org
.eclipse
.swt
.widgets
.Text
;
33 import org
.eclipse
.wb
.swt
.SWTResourceManager
;
35 import eu
.etaxonomy
.cdm
.api
.cache
.CdmCacherBase
;
36 import eu
.etaxonomy
.cdm
.cache
.CdmRemoteCacheManager
;
37 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySession
;
38 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySessionManager
;
39 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySessionManagerObserver
;
40 import eu
.etaxonomy
.taxeditor
.session
.NullSession
;
41 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
42 import net
.sf
.ehcache
.Cache
;
43 import net
.sf
.ehcache
.CacheManager
;
44 import net
.sf
.ehcache
.statistics
.LiveCacheStatistics
;
50 public class SessionsViewPart
implements ICdmEntitySessionManagerObserver
{
52 public static final String ID
= "eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart"; //$NON-NLS-1$
53 public static final String OPEN_INSPECT_SESSIONS_DIALOG_ID
= "eu.etaxonomy.taxeditor.store.open.InspectSessionsDialog";
54 private Table tableSessions
;
56 private final String
[] titles
= { "Owner", "In Memory", "On Disk"};
58 private final ICdmEntitySessionManager cdmEntitySessionManager
;
59 private Text txtNoOfSessions
;
60 private Text txtNoOfCaches
;
61 private Text txtDefaultInMemory
;
62 private Text txtCdmModelInMemory
;
63 private Text txtCdmModelOnDisk
;
64 private Text txtDefaultOnDisk
;
67 private ECommandService commandService
;
70 private EHandlerService handlerService
;
73 public SessionsViewPart() {
74 this.cdmEntitySessionManager
= CdmStore
.getCurrentSessionManager();
75 if(cdmEntitySessionManager
!= null) {
76 cdmEntitySessionManager
.addSessionObserver(this);
81 * Create contents of the view part.
85 public void createPartControl(Composite parent
) {
86 Composite container
= new Composite(parent
, SWT
.NONE
);
87 container
.setLayout(new GridLayout(5, false));
89 Label lblNoOfSessions
= new Label(container
, SWT
.NONE
);
90 lblNoOfSessions
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
91 lblNoOfSessions
.setAlignment(SWT
.RIGHT
);
92 GridData gd_lblNoOfSessions
= new GridData(SWT
.RIGHT
, SWT
.FILL
, false, false, 1, 1);
93 gd_lblNoOfSessions
.widthHint
= 115;
94 gd_lblNoOfSessions
.minimumHeight
= 30;
95 lblNoOfSessions
.setLayoutData(gd_lblNoOfSessions
);
96 lblNoOfSessions
.setText("No. of Sessions : ");
99 txtNoOfSessions
= new Text(container
, SWT
.BORDER
);
100 txtNoOfSessions
.setEditable(false);
101 txtNoOfSessions
.setBackground(SWTResourceManager
.getColor(SWT
.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT
));
102 GridData gd_txtNoOfSessions
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
103 gd_txtNoOfSessions
.widthHint
= 50;
104 txtNoOfSessions
.setLayoutData(gd_txtNoOfSessions
);
106 new Label(container
, SWT
.NONE
);
107 new Label(container
, SWT
.NONE
);
108 new Label(container
, SWT
.NONE
);
110 Label lblNoOfCaches
= new Label(container
, SWT
.CENTER
);
111 lblNoOfCaches
.setAlignment(SWT
.RIGHT
);
112 lblNoOfCaches
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
113 GridData gd_lblNoOfCaches
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1);
114 gd_lblNoOfCaches
.widthHint
= 150;
115 lblNoOfCaches
.setLayoutData(gd_lblNoOfCaches
);
116 lblNoOfCaches
.setText("No. of entity caches : ");
119 txtNoOfCaches
= new Text(container
, SWT
.BORDER
);
120 txtNoOfCaches
.setEditable(false);
121 GridData gd_txtNoOfCaches
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
122 gd_txtNoOfCaches
.widthHint
= 50;
123 txtNoOfCaches
.setLayoutData(gd_txtNoOfCaches
);
125 new Label(container
, SWT
.NONE
);
126 new Label(container
, SWT
.NONE
);
127 new Label(container
, SWT
.NONE
);
130 Label lblDefaultCache
= new Label(container
, SWT
.CENTER
);
131 lblDefaultCache
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
132 lblDefaultCache
.setText("Default Cache, ");
133 lblDefaultCache
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
134 lblDefaultCache
.setAlignment(SWT
.RIGHT
);
137 Label lblDefaultInMemory
= new Label(container
, SWT
.CENTER
);
138 lblDefaultInMemory
.setText("in Memory : ");
139 lblDefaultInMemory
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
140 lblDefaultInMemory
.setAlignment(SWT
.RIGHT
);
141 lblDefaultInMemory
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
144 txtDefaultInMemory
= new Text(container
, SWT
.BORDER
);
145 txtDefaultInMemory
.setEditable(false);
146 GridData gd_txtDefaultInMemory
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
147 gd_txtDefaultInMemory
.widthHint
= 130;
148 txtDefaultInMemory
.setLayoutData(gd_txtDefaultInMemory
);
151 Label lblDefaultOnDisk
= new Label(container
, SWT
.CENTER
);
152 lblDefaultOnDisk
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
153 lblDefaultOnDisk
.setText("on Disk : ");
154 lblDefaultOnDisk
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
155 lblDefaultOnDisk
.setAlignment(SWT
.RIGHT
);
158 txtDefaultOnDisk
= new Text(container
, SWT
.BORDER
);
159 txtDefaultOnDisk
.setEditable(false);
160 txtDefaultOnDisk
.setText("");
161 GridData gd_txtDefaultOnDisk
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
162 gd_txtDefaultOnDisk
.widthHint
= 130;
163 txtDefaultOnDisk
.setLayoutData(gd_txtDefaultOnDisk
);
166 Label lblCdmModelCache
= new Label(container
, SWT
.CENTER
);
167 lblCdmModelCache
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
168 lblCdmModelCache
.setText("CDM Model Cache, ");
169 lblCdmModelCache
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
170 lblCdmModelCache
.setAlignment(SWT
.RIGHT
);
173 Label lblCdmModelInMemory
= new Label(container
, SWT
.CENTER
);
174 lblCdmModelInMemory
.setText("in Memory : ");
175 lblCdmModelInMemory
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
176 lblCdmModelInMemory
.setAlignment(SWT
.RIGHT
);
177 GridData gd_lblCdmModelInMemory
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1);
178 gd_lblCdmModelInMemory
.widthHint
= 86;
179 lblCdmModelInMemory
.setLayoutData(gd_lblCdmModelInMemory
);
182 txtCdmModelInMemory
= new Text(container
, SWT
.BORDER
);
183 txtCdmModelInMemory
.setEditable(false);
184 GridData gd_txtCdmModelInMemory
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
185 gd_txtCdmModelInMemory
.widthHint
= 130;
186 txtCdmModelInMemory
.setLayoutData(gd_txtCdmModelInMemory
);
189 Label lblCdmModelOnDisk
= new Label(container
, SWT
.CENTER
);
190 lblCdmModelOnDisk
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
191 lblCdmModelOnDisk
.setText("on Disk : ");
192 lblCdmModelOnDisk
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
193 lblCdmModelOnDisk
.setAlignment(SWT
.RIGHT
);
196 txtCdmModelOnDisk
= new Text(container
, SWT
.BORDER
);
197 txtCdmModelOnDisk
.setEditable(false);
198 txtCdmModelOnDisk
.setText("");
199 GridData gd_txtCdmModelOnDisk
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
200 gd_txtCdmModelOnDisk
.widthHint
= 130;
201 txtCdmModelOnDisk
.setLayoutData(gd_txtCdmModelOnDisk
);
204 Button btnRefresh
= new Button(container
, SWT
.NONE
);
205 btnRefresh
.addSelectionListener(new SelectionAdapter() {
207 public void widgetSelected(SelectionEvent e
) {
211 GridData gd_btnRefresh
= new GridData(SWT
.FILL
, SWT
.CENTER
, false, false, 1, 1);
212 gd_btnRefresh
.widthHint
= 100;
213 btnRefresh
.setLayoutData(gd_btnRefresh
);
214 btnRefresh
.setText("Refresh");
217 Button btnInspectActiveSession
= new Button(container
, SWT
.NONE
);
218 btnInspectActiveSession
.addSelectionListener(new SelectionAdapter() {
220 public void widgetSelected(SelectionEvent e
) {
221 Command command
= commandService
.getCommand(OPEN_INSPECT_SESSIONS_DIALOG_ID
);
222 handlerService
.executeHandler(ParameterizedCommand
.generateCommand(command
, null));
225 btnInspectActiveSession
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 2, 1));
226 btnInspectActiveSession
.setText("Inspect Active Session");
228 new Label(container
, SWT
.NONE
);
229 new Label(container
, SWT
.NONE
);
232 tableSessions
= new Table(container
, SWT
.BORDER
| SWT
.FULL_SELECTION
);
233 GridData gd_tableSessions
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true, 5, 1);
234 gd_tableSessions
.widthHint
= 769;
235 tableSessions
.setLayoutData(gd_tableSessions
);
236 tableSessions
.setHeaderVisible(true);
237 tableSessions
.setLinesVisible(true);
244 * Create the actions.
246 private void createActions() {
247 for (String title
: titles
) {
248 TableColumn column
= new TableColumn(tableSessions
, SWT
.NULL
);
249 column
.setWidth(200);
250 column
.setText(title
);
257 public void changed() {
258 if(tableSessions
.isDisposed()) {
261 tableSessions
.removeAll();
262 if(cdmEntitySessionManager
!= null) {
263 Collection
<ICdmEntitySession
> sessions
= cdmEntitySessionManager
.getSessions();
264 txtNoOfSessions
.setText(String
.valueOf(sessions
.size()));
265 for(ICdmEntitySession session
: sessions
) {
268 ICdmEntitySession nullSession
= cdmEntitySessionManager
.getNullSession();
269 if(nullSession
!= null) {
270 addSession(nullSession
);
272 for (int i
=0; i
<titles
.length
; i
++) {
273 tableSessions
.getColumn (i
).pack ();
277 CdmRemoteCacheManager instance
= CdmRemoteCacheManager
.getInstance();
278 int cdmEnityCacheSize
= CacheManager
.create().getCacheNames().length
;
279 txtNoOfCaches
.setText(String
.valueOf(cdmEnityCacheSize
));
281 Cache defaultCache
= CacheManager
.create().getCache(CdmCacherBase
.DEFAULT_CACHE_NAME
);
282 txtDefaultInMemory
.setText("");
283 txtDefaultOnDisk
.setText("");
284 if(defaultCache
!= null) {
285 LiveCacheStatistics liveCacheStatistics
= defaultCache
.getLiveCacheStatistics();
286 txtDefaultInMemory
.setText(getInMemoryStats(liveCacheStatistics
));
287 txtDefaultOnDisk
.setText(getOnDiskStats(liveCacheStatistics
));
290 Cache cdmModelGetMethodsCache
= instance
.getCdmModelGetMethodsCache();
291 txtCdmModelInMemory
.setText("");
292 txtCdmModelOnDisk
.setText("");
293 if(cdmModelGetMethodsCache
!= null) {
294 LiveCacheStatistics liveCacheStatistics
= cdmModelGetMethodsCache
.getLiveCacheStatistics();
295 txtCdmModelInMemory
.setText(getInMemoryStats(liveCacheStatistics
));
296 txtCdmModelOnDisk
.setText(getOnDiskStats(liveCacheStatistics
));
301 private void addSession(ICdmEntitySession session
) {
303 TableItem item
= new TableItem(tableSessions
, SWT
.NULL
);
305 String activePrefix
= "";
306 if(session
.isActive()) {
309 String sessionOwnerString
= "";
310 if(session
instanceof NullSession
) {
311 sessionOwnerString
= "Null Session";
313 if(session
.getOwner() != null) {
314 sessionOwnerString
= session
.getOwner().toString();
317 item
.setText(0, activePrefix
+ sessionOwnerString
);
318 LiveCacheStatistics cacheStatistics
= session
.getCacheStatistics();
319 item
.setText(1, getInMemoryStats(cacheStatistics
));
320 item
.setText(2, getOnDiskStats(cacheStatistics
));
323 private String
getInMemoryStats(LiveCacheStatistics statistics
) {
324 if(statistics
!= null) {
325 long localHeapSize
= statistics
.getLocalHeapSize();
327 long localHeapSizeInBytes
= statistics
.getLocalHeapSizeInBytes();
328 String localHeapSizeInBytesStr
=
329 (new DecimalFormat("#.##")).format(localHeapSizeInBytes
/1048576.0);
330 return String
.valueOf(localHeapSize
) + " objects / " + localHeapSizeInBytesStr
+ " Mb";
335 private String
getOnDiskStats(LiveCacheStatistics statistics
) {
336 if(statistics
!= null) {
337 long localDiskSize
= statistics
.getLocalDiskSize();
339 long localDiskSizeInBytes
= statistics
.getLocalDiskSizeInBytes();
340 String localDiskSizeInBytesStr
=
341 (new DecimalFormat("#.##")).format(localDiskSizeInBytes
/1048576.0);
342 return String
.valueOf(localDiskSize
) + " objects / " + localDiskSizeInBytesStr
+ " Mb";