1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.workbench.internal.contributions;
14 import org.eclipse.jface.resource.JFaceResources;
15 import org.eclipse.jface.resource.LocalResourceManager;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.DisposeEvent;
18 import org.eclipse.swt.events.DisposeListener;
19 import org.eclipse.swt.events.SelectionAdapter;
20 import org.eclipse.swt.events.SelectionEvent;
21 import org.eclipse.swt.layout.FillLayout;
22 import org.eclipse.swt.widgets.Button;
23 import org.eclipse.swt.widgets.Composite;
24 import org.simantics.Simantics;
25 import org.simantics.db.Session;
26 import org.simantics.db.management.ISessionContext;
27 import org.simantics.db.management.ISessionContextChangedListener;
28 import org.simantics.db.management.ISessionContextProvider;
29 import org.simantics.db.management.SessionContextChangedEvent;
30 import org.simantics.ui.jobs.SessionGarbageCollectorJob;
31 import org.simantics.workbench.internal.Activator;
34 * @author Tuukka Lehtonen
36 public class FlushRequestsButtonTrim extends Composite {
38 LocalResourceManager resourceManager;
40 class SessionContextListener implements ISessionContextChangedListener {
42 public void sessionContextChanged(final SessionContextChangedEvent event) {
45 getDisplay().asyncExec(new Runnable() {
50 sessionChanged(event.getNewValue());
56 SessionContextListener listener = new SessionContextListener();
59 public FlushRequestsButtonTrim(Composite parent) {
60 super(parent, SWT.NONE);
62 setLayout(new FillLayout());
64 b = new Button(this, SWT.PUSH);
65 this.resourceManager = new LocalResourceManager(JFaceResources.getResources(), b);
67 final ISessionContextProvider provider = Simantics.getSessionContextProvider();
68 if (provider != null) {
69 provider.addContextChangedListener(listener);
72 b.setToolTipText("Flush database caches");
73 b.setImage(resourceManager.createImage(Activator.getImageDescriptor("img/paintcan.png")));
74 b.addSelectionListener(new SelectionAdapter() {
76 public void widgetSelected(SelectionEvent e) {
77 Session session = Simantics.peekSession();
79 SessionGarbageCollectorJob.getInstance().rescheduleNow();
82 b.addDisposeListener(new DisposeListener() {
84 public void widgetDisposed(DisposeEvent e) {
85 provider.removeContextChangedListener(listener);
89 sessionChanged(Simantics.getSessionContext());
92 private void sessionChanged(ISessionContext sessionContext) {
93 b.setEnabled(sessionContext != null);