package org.safehaus.penrose.studio.federation.partition;
import org.apache.log4j.Logger;
import org.eclipse.jface.wizard.Wizard;
import org.safehaus.penrose.federation.FederationClient;
import org.safehaus.penrose.federation.FederationRepositoryConfig;
import org.safehaus.penrose.studio.ldap.connection.wizard.LDAPConnectionSettingsWizardPage;
import org.safehaus.penrose.studio.server.Server;
import org.safehaus.penrose.studio.dialog.ErrorDialog;
import org.safehaus.penrose.partition.PartitionClient;
import org.safehaus.penrose.partition.PartitionManagerClient;
import org.safehaus.penrose.connection.ConnectionClient;
import org.safehaus.penrose.connection.ConnectionConfig;
import org.safehaus.penrose.connection.ConnectionManagerClient;
import org.safehaus.penrose.source.SourceClient;
import org.safehaus.penrose.source.SourceConfig;
import org.safehaus.penrose.source.SourceManagerClient;
import org.safehaus.penrose.client.PenroseClient;
import javax.naming.Context;
/**
* @author Endi S. Dewata
*/
public class FederationDomainEditorWizard extends Wizard {
Logger log = Logger.getLogger(getClass());
LDAPConnectionSettingsWizardPage connectionPage;
Server server;
PenroseClient client;
PartitionClient partitionClient;
FederationClient federationClient;
FederationRepositoryConfig repository;
public FederationDomainEditorWizard(FederationClient federationClient) throws Exception {
this.federationClient = federationClient;
this.client = federationClient.getClient();
this.partitionClient = federationClient.getPartitionClient();
setWindowTitle(federationClient.getFederationDomain());
}
public void addPages() {
connectionPage = new LDAPConnectionSettingsWizardPage();
connectionPage.setServer(server);
try {
ConnectionManagerClient connectionManagerClient = partitionClient.getConnectionManagerClient();
SourceManagerClient sourceManagerClient = partitionClient.getSourceManagerClient();
ConnectionClient connectionClient = connectionManagerClient.getConnectionClient("LDAP");
ConnectionConfig connectionConfig = connectionClient.getConnectionConfig();
SourceClient sourceClient = sourceManagerClient.getSourceClient("Global");
SourceConfig sourceConfig = sourceClient.getSourceConfig();
String url = connectionConfig.getParameter(Context.PROVIDER_URL);
String suffix = sourceConfig.getParameter("baseDn");
String bindDn = connectionConfig.getParameter(Context.SECURITY_PRINCIPAL);
String bindPassword = connectionConfig.getParameter(Context.SECURITY_CREDENTIALS);
connectionPage.setProviderUrl(url);
connectionPage.setSuffix(suffix);
connectionPage.setBindDn(bindDn);
connectionPage.setBindPassword(bindPassword);
//partitionsPage.setSuffix(repository.getParameter(GlobalRepository.SUFFIX));
//partitionsPage.setTemplate(repository.getParameter(GlobalRepository.TEMPLATE));
} catch (Exception e) {
log.error(e.getMessage(), e);
ErrorDialog.open(e);
}
addPage(connectionPage);
}
public boolean canFinish() {
if (!connectionPage.isPageComplete()) return false;
return true;
}
public boolean performFinish() {
try {
String name = federationClient.getFederationDomain();
PartitionManagerClient partitionManagerClient = client.getPartitionManagerClient();
log.debug("Getting existing configuration.");
ConnectionManagerClient connectionManagerClient = partitionClient.getConnectionManagerClient();
SourceManagerClient sourceManagerClient = partitionClient.getSourceManagerClient();
ConnectionClient connectionClient = connectionManagerClient.getConnectionClient("LDAP");
ConnectionConfig connectionConfig = connectionClient.getConnectionConfig();
SourceClient sourceClient = sourceManagerClient.getSourceClient("Global");
SourceConfig sourceConfig = sourceClient.getSourceConfig();
String url = connectionPage.getProviderUrl();
String suffix = connectionPage.getSuffix();
String bindDn = connectionPage.getBindDn();
String bindPassword = connectionPage.getBindPassword();
if (url == null) {
connectionConfig.removeParameter(Context.PROVIDER_URL);
} else {
connectionConfig.setParameter(Context.PROVIDER_URL, url);
}
if (suffix == null) {
sourceConfig.removeParameter("baseDn");
} else {
sourceConfig.setParameter("baseDn", suffix);
}
if (bindDn == null) {
connectionConfig.removeParameter(Context.SECURITY_PRINCIPAL);
} else {
connectionConfig.setParameter(Context.SECURITY_PRINCIPAL, bindDn);
}
if (bindPassword == null) {
connectionConfig.removeParameter(Context.SECURITY_CREDENTIALS);
} else {
connectionConfig.setParameter(Context.SECURITY_CREDENTIALS, bindPassword);
}
connectionClient.setConnectionConfig(connectionConfig);
sourceClient.setSourceConfig(sourceConfig);
partitionManagerClient.storePartition(name);
partitionManagerClient.stopPartition(name);
partitionManagerClient.startPartition(name);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
ErrorDialog.open(e);
return false;
}
}
public boolean needsPreviousAndNextButtons() {
return true;
}
public Server getServer() {
return server;
}
public void setServer(Server server) {
this.server = server;
}
}