blob: 369771abe21112dfd22616eb512a9fc590611d86 [file] [log] [blame]
/**
*
*/
package com.gemstone.gemfire.mgmt.DataBrowser.controller.internal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import com.gemstone.gemfire.mgmt.DataBrowser.app.DataBrowserApp;
import com.gemstone.gemfire.mgmt.DataBrowser.app.State;
import com.gemstone.gemfire.mgmt.DataBrowser.connection.ConnectionTerminatedEvent;
import com.gemstone.gemfire.mgmt.DataBrowser.connection.IConnectionEvent;
import com.gemstone.gemfire.mgmt.DataBrowser.controller.DSSnapShot;
import com.gemstone.gemfire.mgmt.DataBrowser.controller.DataBrowserController;
import com.gemstone.gemfire.mgmt.DataBrowser.model.IMemberEvent;
import com.gemstone.gemfire.mgmt.DataBrowser.model.member.GemFireMember;
import com.gemstone.gemfire.mgmt.DataBrowser.ui.CustomUIMessages;
import com.gemstone.gemfire.mgmt.DataBrowser.ui.MainAppWindow;
/**
* @author mghosh
*
*/
public class SWTAppAdapter_Controller extends DataBrowserController {
private MemberEventProcessor memberEventProcessor= new MemberEventProcessor();
/**
*
*/
public SWTAppAdapter_Controller() {
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see com.gemstone.gemfire.mgmt.DataBrowser.controller.DataBrowserController#memberEventReceived(com.gemstone.gemfire.mgmt.DataBrowser.model.IMemberEvent)
*/
@Override
public void memberEventReceived(final IMemberEvent memEvent) {
final MainAppWindow wnd = DataBrowserApp.getInstance().getMainWindow();
memberEventProcessor.addEvent(memEvent);
if(memberEventProcessor.isProcessed()){
memberEventProcessor.setProcessed(false);
Display display = wnd.getShell().getDisplay();
display.asyncExec(memberEventProcessor);
}
}
public void connectionEventReceived(IConnectionEvent event) {
if(event instanceof ConnectionTerminatedEvent) {
if(this.hasConnection()) {
try {
this.disconnect();
}
catch (Exception e) {
// mjha- do we need to log the error ?
}
final MainAppWindow wnd = DataBrowserApp.getInstance().getMainWindow();
if (null != wnd) {
Runnable runnable = new Runnable() {
public void run() {
State st = DataBrowserApp.getInstance().getState();
DSSnapShot dsss = st.getCurrDS();
ArrayList<Object> prms = new ArrayList<Object>();
prms.add(dsss);
ArrayList<Object> res = new ArrayList<Object>();
wnd.sendCustomMessage(CustomUIMessages.DS_DISCONNECTED, prms, res);
// TODO MGH - see if this can be done by sending a message to main window.
MessageBox mb = new MessageBox(wnd.getShell(), SWT.OK);
//TODO: Handle this message for localization.
mb.setText("Connection Closed unexpectedly");
mb.setMessage("Connection Closed unexpectedly");
mb.open();
}
};
Display display = wnd.getShell().getDisplay();
display.asyncExec(runnable);
}
}
}
}
private static class MemberEventProcessor implements Runnable{
private boolean processed = true;
private Map<String, IMemberEvent> memberEventMap = new HashMap<String, IMemberEvent>();
public void run() {
processed = false;
ArrayList<Object> res = new ArrayList<Object>();
ArrayList<Object> prms= new ArrayList<Object>() ;
synchronized (memberEventMap) {
Collection<IMemberEvent> values = memberEventMap.values();
prms.addAll(values);
memberEventMap.clear();
setProcessed(true);
}
MainAppWindow wnd = DataBrowserApp.getInstance().getMainWindow();
if(wnd != null)
wnd.sendCustomMessage(CustomUIMessages.UPDATE_MEMBER_EVENT, prms, res);
}
public boolean isProcessed(){
return processed;
}
public void setProcessed(boolean processed) {
this.processed = processed;
}
public void addEvent(IMemberEvent memEvent){
GemFireMember member = memEvent.getMember();
if(member != null){
synchronized (memberEventMap) {
memberEventMap.put(member.getId(), memEvent);
}
}
}
}
}