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
.CdmCacher
;
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
;
51 public class SessionsViewPart
implements ICdmEntitySessionManagerObserver
{
53 public static final String ID
= "eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart"; //$NON-NLS-1$
54 public static final String OPEN_INSPECT_SESSIONS_DIALOG_ID
= "eu.etaxonomy.taxeditor.store.open.InspectSessionsDialog";
55 private Table tableSessions
;
57 private final String
[] titles
= { "Owner", "In Memory", "On Disk"};
59 private final ICdmEntitySessionManager cdmEntitySessionManager
;
60 private Text txtNoOfSessions
;
61 private Text txtNoOfCaches
;
62 private Text txtDefaultInMemory
;
63 private Text txtCdmModelInMemory
;
64 private Text txtCdmModelOnDisk
;
65 private Text txtDefaultOnDisk
;
68 private ECommandService commandService
;
71 private EHandlerService handlerService
;
74 public SessionsViewPart() {
75 this.cdmEntitySessionManager
= CdmStore
.getCurrentSessionManager();
76 if(cdmEntitySessionManager
!= null) {
77 cdmEntitySessionManager
.addSessionObserver(this);
82 * Create contents of the view part.
86 public void createPartControl(Composite parent
) {
87 Composite container
= new Composite(parent
, SWT
.NONE
);
88 container
.setLayout(new GridLayout(5, false));
90 Label lblNoOfSessions
= new Label(container
, SWT
.NONE
);
91 lblNoOfSessions
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
92 lblNoOfSessions
.setAlignment(SWT
.RIGHT
);
93 GridData gd_lblNoOfSessions
= new GridData(SWT
.RIGHT
, SWT
.FILL
, false, false, 1, 1);
94 gd_lblNoOfSessions
.widthHint
= 115;
95 gd_lblNoOfSessions
.minimumHeight
= 30;
96 lblNoOfSessions
.setLayoutData(gd_lblNoOfSessions
);
97 lblNoOfSessions
.setText("No. of Sessions : ");
100 txtNoOfSessions
= new Text(container
, SWT
.BORDER
);
101 txtNoOfSessions
.setEditable(false);
102 txtNoOfSessions
.setBackground(SWTResourceManager
.getColor(SWT
.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT
));
103 GridData gd_txtNoOfSessions
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
104 gd_txtNoOfSessions
.widthHint
= 50;
105 txtNoOfSessions
.setLayoutData(gd_txtNoOfSessions
);
107 new Label(container
, SWT
.NONE
);
108 new Label(container
, SWT
.NONE
);
109 new Label(container
, SWT
.NONE
);
111 Label lblNoOfCaches
= new Label(container
, SWT
.CENTER
);
112 lblNoOfCaches
.setAlignment(SWT
.RIGHT
);
113 lblNoOfCaches
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
114 GridData gd_lblNoOfCaches
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1);
115 gd_lblNoOfCaches
.widthHint
= 150;
116 lblNoOfCaches
.setLayoutData(gd_lblNoOfCaches
);
117 lblNoOfCaches
.setText("No. of entity caches : ");
120 txtNoOfCaches
= new Text(container
, SWT
.BORDER
);
121 txtNoOfCaches
.setEditable(false);
122 GridData gd_txtNoOfCaches
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
123 gd_txtNoOfCaches
.widthHint
= 50;
124 txtNoOfCaches
.setLayoutData(gd_txtNoOfCaches
);
126 new Label(container
, SWT
.NONE
);
127 new Label(container
, SWT
.NONE
);
128 new Label(container
, SWT
.NONE
);
131 Label lblDefaultCache
= new Label(container
, SWT
.CENTER
);
132 lblDefaultCache
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
133 lblDefaultCache
.setText("Default Cache, ");
134 lblDefaultCache
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
135 lblDefaultCache
.setAlignment(SWT
.RIGHT
);
138 Label lblDefaultInMemory
= new Label(container
, SWT
.CENTER
);
139 lblDefaultInMemory
.setText("in Memory : ");
140 lblDefaultInMemory
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
141 lblDefaultInMemory
.setAlignment(SWT
.RIGHT
);
142 lblDefaultInMemory
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
145 txtDefaultInMemory
= new Text(container
, SWT
.BORDER
);
146 txtDefaultInMemory
.setEditable(false);
147 GridData gd_txtDefaultInMemory
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
148 gd_txtDefaultInMemory
.widthHint
= 130;
149 txtDefaultInMemory
.setLayoutData(gd_txtDefaultInMemory
);
152 Label lblDefaultOnDisk
= new Label(container
, SWT
.CENTER
);
153 lblDefaultOnDisk
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
154 lblDefaultOnDisk
.setText("on Disk : ");
155 lblDefaultOnDisk
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
156 lblDefaultOnDisk
.setAlignment(SWT
.RIGHT
);
159 txtDefaultOnDisk
= new Text(container
, SWT
.BORDER
);
160 txtDefaultOnDisk
.setEditable(false);
161 txtDefaultOnDisk
.setText("");
162 GridData gd_txtDefaultOnDisk
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
163 gd_txtDefaultOnDisk
.widthHint
= 130;
164 txtDefaultOnDisk
.setLayoutData(gd_txtDefaultOnDisk
);
167 Label lblCdmModelCache
= new Label(container
, SWT
.CENTER
);
168 lblCdmModelCache
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
169 lblCdmModelCache
.setText("CDM Model Cache, ");
170 lblCdmModelCache
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
171 lblCdmModelCache
.setAlignment(SWT
.RIGHT
);
174 Label lblCdmModelInMemory
= new Label(container
, SWT
.CENTER
);
175 lblCdmModelInMemory
.setText("in Memory : ");
176 lblCdmModelInMemory
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
177 lblCdmModelInMemory
.setAlignment(SWT
.RIGHT
);
178 GridData gd_lblCdmModelInMemory
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1);
179 gd_lblCdmModelInMemory
.widthHint
= 86;
180 lblCdmModelInMemory
.setLayoutData(gd_lblCdmModelInMemory
);
183 txtCdmModelInMemory
= new Text(container
, SWT
.BORDER
);
184 txtCdmModelInMemory
.setEditable(false);
185 GridData gd_txtCdmModelInMemory
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
186 gd_txtCdmModelInMemory
.widthHint
= 130;
187 txtCdmModelInMemory
.setLayoutData(gd_txtCdmModelInMemory
);
190 Label lblCdmModelOnDisk
= new Label(container
, SWT
.CENTER
);
191 lblCdmModelOnDisk
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, false, false, 1, 1));
192 lblCdmModelOnDisk
.setText("on Disk : ");
193 lblCdmModelOnDisk
.setFont(SWTResourceManager
.getFont("Ubuntu", 10, SWT
.NORMAL
));
194 lblCdmModelOnDisk
.setAlignment(SWT
.RIGHT
);
197 txtCdmModelOnDisk
= new Text(container
, SWT
.BORDER
);
198 txtCdmModelOnDisk
.setEditable(false);
199 txtCdmModelOnDisk
.setText("");
200 GridData gd_txtCdmModelOnDisk
= new GridData(SWT
.LEFT
, SWT
.CENTER
, false, false, 1, 1);
201 gd_txtCdmModelOnDisk
.widthHint
= 130;
202 txtCdmModelOnDisk
.setLayoutData(gd_txtCdmModelOnDisk
);
205 Button btnRefresh
= new Button(container
, SWT
.NONE
);
206 btnRefresh
.addSelectionListener(new SelectionAdapter() {
208 public void widgetSelected(SelectionEvent e
) {
212 GridData gd_btnRefresh
= new GridData(SWT
.FILL
, SWT
.CENTER
, false, false, 1, 1);
213 gd_btnRefresh
.widthHint
= 100;
214 btnRefresh
.setLayoutData(gd_btnRefresh
);
215 btnRefresh
.setText("Refresh");
218 Button btnInspectActiveSession
= new Button(container
, SWT
.NONE
);
219 btnInspectActiveSession
.addSelectionListener(new SelectionAdapter() {
221 public void widgetSelected(SelectionEvent e
) {
222 Command command
= commandService
.getCommand(OPEN_INSPECT_SESSIONS_DIALOG_ID
);
223 handlerService
.executeHandler(ParameterizedCommand
.generateCommand(command
, null));
226 btnInspectActiveSession
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 2, 1));
227 btnInspectActiveSession
.setText("Inspect Active Session");
229 new Label(container
, SWT
.NONE
);
230 new Label(container
, SWT
.NONE
);
233 tableSessions
= new Table(container
, SWT
.BORDER
| SWT
.FULL_SELECTION
);
234 GridData gd_tableSessions
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true, 5, 1);
235 gd_tableSessions
.widthHint
= 769;
236 tableSessions
.setLayoutData(gd_tableSessions
);
237 tableSessions
.setHeaderVisible(true);
238 tableSessions
.setLinesVisible(true);
245 * Create the actions.
247 private void createActions() {
250 for (String title
: titles
) {
251 TableColumn column
= new TableColumn(tableSessions
, SWT
.NULL
);
252 column
.setWidth(200);
253 column
.setText(title
);
261 public void changed() {
262 if(tableSessions
.isDisposed()) {
265 tableSessions
.removeAll();
266 if(cdmEntitySessionManager
!= null) {
267 Collection
<ICdmEntitySession
> sessions
= cdmEntitySessionManager
.getSessions();
268 txtNoOfSessions
.setText(String
.valueOf(sessions
.size()));
269 for(ICdmEntitySession session
: sessions
) {
272 ICdmEntitySession nullSession
= cdmEntitySessionManager
.getNullSession();
273 if(nullSession
!= null) {
274 addSession(nullSession
);
276 for (int i
=0; i
<titles
.length
; i
++) {
277 tableSessions
.getColumn (i
).pack ();
281 CdmRemoteCacheManager instance
= CdmRemoteCacheManager
.getInstance();
282 int cdmEnityCacheSize
= CacheManager
.create().getCacheNames().length
;
283 txtNoOfCaches
.setText(String
.valueOf(cdmEnityCacheSize
));
285 Cache defaultCache
= CacheManager
.create().getCache(CdmCacher
.DEFAULT_CACHE_NAME
);
286 txtDefaultInMemory
.setText("");
287 txtDefaultOnDisk
.setText("");
288 if(defaultCache
!= null) {
289 LiveCacheStatistics liveCacheStatistics
= defaultCache
.getLiveCacheStatistics();
290 txtDefaultInMemory
.setText(getInMemoryStats(liveCacheStatistics
));
291 txtDefaultOnDisk
.setText(getOnDiskStats(liveCacheStatistics
));
294 Cache cdmModelGetMethodsCache
= instance
.getCdmModelGetMethodsCache();
295 txtCdmModelInMemory
.setText("");
296 txtCdmModelOnDisk
.setText("");
297 if(cdmModelGetMethodsCache
!= null) {
298 LiveCacheStatistics liveCacheStatistics
= cdmModelGetMethodsCache
.getLiveCacheStatistics();
299 txtCdmModelInMemory
.setText(getInMemoryStats(liveCacheStatistics
));
300 txtCdmModelOnDisk
.setText(getOnDiskStats(liveCacheStatistics
));
305 private void addSession(ICdmEntitySession session
) {
307 TableItem item
= new TableItem(tableSessions
, SWT
.NULL
);
309 String activePrefix
= "";
310 if(session
.isActive()) {
313 String sessionOwnerString
= "";
314 if(session
instanceof NullSession
) {
315 sessionOwnerString
= "Null Session";
317 if(session
.getOwner() != null) {
318 sessionOwnerString
= session
.getOwner().toString();
321 item
.setText(0, activePrefix
+ sessionOwnerString
);
322 LiveCacheStatistics cacheStatistics
= session
.getCacheStatistics();
323 item
.setText(1, getInMemoryStats(cacheStatistics
));
324 item
.setText(2, getOnDiskStats(cacheStatistics
));
327 private String
getInMemoryStats(LiveCacheStatistics statistics
) {
328 if(statistics
!= null) {
329 long localHeapSize
= statistics
.getLocalHeapSize();
331 long localHeapSizeInBytes
= statistics
.getLocalHeapSizeInBytes();
332 String localHeapSizeInBytesStr
=
333 (new DecimalFormat("#.##")).format(localHeapSizeInBytes
/1048576.0);
334 return String
.valueOf(localHeapSize
) + " objects / " + localHeapSizeInBytesStr
+ " Mb";
339 private String
getOnDiskStats(LiveCacheStatistics statistics
) {
340 if(statistics
!= null) {
341 long localDiskSize
= statistics
.getLocalDiskSize();
343 long localDiskSizeInBytes
= statistics
.getLocalDiskSizeInBytes();
344 String localDiskSizeInBytesStr
=
345 (new DecimalFormat("#.##")).format(localDiskSizeInBytes
/1048576.0);
346 return String
.valueOf(localDiskSize
) + " objects / " + localDiskSizeInBytesStr
+ " Mb";