package org.eclipse.ecf.provider.ui.wizards;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.IContainerListener;
import org.eclipse.ecf.core.events.IContainerConnectedEvent;
import org.eclipse.ecf.core.events.IContainerEvent;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDCreateException;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.security.ConnectContextFactory;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.protocol.nntp.model.IServer;
import org.eclipse.ecf.protocol.nntp.model.NNTPException;
import org.eclipse.ecf.provider.nntp.NNTPServerContainer;
import org.eclipse.ecf.salvo.ui.wizards.NewNewsServerWizard;
import org.eclipse.ecf.ui.IConnectWizard;
import org.eclipse.ecf.ui.actions.AsynchContainerConnectAction;
import org.eclipse.ecf.ui.dialogs.IDCreateErrorDialog;
import org.eclipse.ecf.ui.util.PasswordCacheHelper;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IWorkbench;
public class NewNewsServerConnectWizard extends NewNewsServerWizard implements
IConnectWizard {
private IContainer container;
private IConnectContext connectContext;
private ID targetID;
private IWorkbench workbench;
private String connectID;
public NewNewsServerConnectWizard() {
// TODO Auto-generated constructor stub
}
public NewNewsServerConnectWizard(IServer server) {
super(server);
// TODO Auto-generated constructor stub
}
private void openPerspective() {
IPerspectiveDescriptor descriptor = workbench.getPerspectiveRegistry()
.findPerspectiveWithId(
"org.eclipse.ecf.salvo.application.perspective");
workbench.getActiveWorkbenchWindow().getActivePage().setPerspective(
descriptor);
}
public void init(IWorkbench workbench, IContainer container) {
this.workbench = workbench;
this.container = container;
}
public boolean performFinish() {
super.performFinish();
try {
connectID = page1.getServer().getURL();
((NNTPServerContainer) container).setServer(page1.getServer());
} catch (NNTPException e1) {
new IDCreateErrorDialog(null, connectID, new IDCreateException(e1))
.open();
return false;
}
connectContext = ConnectContextFactory
.createPasswordConnectContext(page1.getPass());
final String pass = page1.getPass();
try {
targetID = IDFactory.getDefault().createID(
container.getConnectNamespace(), connectID);
} catch (final IDCreateException e) {
new IDCreateErrorDialog(null, connectID, e).open();
return false;
}
container.addListener(new IContainerListener() {
public void handleEvent(IContainerEvent event) {
if (event instanceof IContainerConnectedEvent) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
openPerspective();
}
});
}
}
});
new AsynchContainerConnectAction(container, targetID, connectContext,
null, new Runnable() {
public void run() {
cachePassword(connectID, pass);
}
}).run();
return true;
}
protected void cachePassword(final String connectID, String password) {
if (password != null && !password.equals("")) { //$NON-NLS-1$
final PasswordCacheHelper pwStorage = new PasswordCacheHelper(
connectID);
pwStorage.savePassword(password);
}
}
}