diff options
Diffstat (limited to 'plugins/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java')
-rw-r--r-- | plugins/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java | 101 |
1 files changed, 87 insertions, 14 deletions
diff --git a/plugins/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java b/plugins/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java index b4bf63da18..54889274ca 100644 --- a/plugins/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java +++ b/plugins/org.eclipse.net4j.buddies.ui/src/org/eclipse/net4j/buddies/internal/ui/views/BuddiesView.java @@ -10,6 +10,7 @@ import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; import org.eclipse.net4j.util.lifecycle.ILifecycleEvent; +import org.eclipse.net4j.util.ui.actions.SafeAction; import org.eclipse.net4j.util.ui.views.ContainerItemProvider; import org.eclipse.net4j.util.ui.views.ContainerView; @@ -19,30 +20,77 @@ public class BuddiesView extends ContainerView implements IListener { private IBuddySession session; + private boolean connecting; + public BuddiesView() { - String connectorDescription = OM.PREF_CONNECTOR_DESCRIPTION.getValue(); - IConnector connector = Net4jUtil.getConnector(IPluginContainer.INSTANCE, connectorDescription); - if (connector == null) + if (isAutoConnect()) { - throw new IllegalStateException("connector == null"); + connect(); } + } + + protected Boolean isAutoConnect() + { + return OM.PREF_AUTO_CONNECT.getValue(); + } - String userID = OM.PREF_USER_ID.getValue(); - String password = OM.PREF_PASSWORD.getValue(); - session = BuddiesUtil.openSession(connector, userID, password); - if (session == null) + protected void connect() + { + new Thread("buddies-connector") { - throw new IllegalStateException("session == null"); - } + @Override + public void run() + { + try + { + connecting = true; + while (session == null && connecting && isAutoConnect()) + { + String connectorDescription = OM.PREF_CONNECTOR_DESCRIPTION.getValue(); + IConnector connector = Net4jUtil.getConnector(IPluginContainer.INSTANCE, connectorDescription); + if (connector == null) + { + throw new IllegalStateException("connector == null"); + } - session.addListener(this); + String userID = OM.PREF_USER_ID.getValue(); + String password = OM.PREF_PASSWORD.getValue(); + session = BuddiesUtil.openSession(connector, userID, password, 5000L); + if (session != null) + { + if (connecting) + { + session.addListener(BuddiesView.this); + } + else + { + session.close(); + session = null; + } + } + } + } + finally + { + connecting = false; + } + } + }.start(); + } + + protected void disconnect() + { + session.removeListener(this); + session.close(); + session = null; + connecting = false; } @Override public void dispose() { - session.removeListener(this); + disconnect(); super.dispose(); } @@ -54,7 +102,10 @@ public class BuddiesView extends ContainerView implements IListener { if (((ILifecycleEvent)event).getKind() == ILifecycleEvent.Kind.DEACTIVATED) { - closeView(); + if (isAutoConnect()) + { + connect(); + } } } } @@ -99,7 +150,29 @@ public class BuddiesView extends ContainerView implements IListener @Override protected void fillLocalToolBar(IToolBarManager manager) { - // manager.add(addConnectorAction); + if (session == null && !connecting) + { + manager.add(new SafeAction("Connect", "Connect to buddies server") + { + @Override + protected void safeRun() throws Exception + { + connect(); + } + }); + } + else + { + manager.add(new SafeAction("Disonnect", "Disconnect from buddies server") + { + @Override + protected void safeRun() throws Exception + { + disconnect(); + } + }); + } + super.fillLocalToolBar(manager); } }
\ No newline at end of file |