if(managerURI != null) actionResponse.setRenderParameter(PARM_MANAGER_URI, managerURI);
if(containerURI != null) actionResponse.setRenderParameter(PARM_CONTAINER_URI, containerURI);
WebContainer webContainer = null;
String server = null;
if(containerURI != null) {
webContainer = PortletManager.getWebContainer(actionRequest, new AbstractName(URI.create(containerURI)));
server = getWebServerType(webContainer.getClass());
} else {
server = "unknown";
}
actionResponse.setRenderParameter(PARM_SERVER, server);
if(mode.equals("new")) {
// User selected to add a new connector, need to show criteria portlet
actionResponse.setRenderParameter(PARM_MODE, "new");
String connectorType = actionRequest.getParameter(PARM_CONNECTOR_TYPE);
actionResponse.setRenderParameter(PARM_CONNECTOR_TYPE, connectorType);
} else if(mode.equals("add")) { // User just submitted the form to add a new connector
// Create and configure the connector
WebManager manager = PortletManager.getWebManager(actionRequest, new AbstractName(URI.create(managerURI)));
ConnectorType connectorType = new ConnectorType(actionRequest.getParameter(PARM_CONNECTOR_TYPE));
String uniqueName = actionRequest.getParameter(PARM_DISPLAY_NAME);
actionResponse.setRenderParameter(PARM_DISPLAY_NAME, uniqueName);
// set the connector attributes from the form post
List<ConnectorAttribute> connectorAttributes = manager.getConnectorAttributes(connectorType);
for (ConnectorAttribute attribute : connectorAttributes) {
String name = attribute.getAttributeName();
String value = actionRequest.getParameter(name);
// handle booelan type special
if (attribute.getAttributeClass().equals(Boolean.class)) {
// browser sends value of checked checkbox as "on" or "checked"
if ("on".equalsIgnoreCase(value) || "checked".equalsIgnoreCase(value)) {
value=Boolean.toString(true);
} else {
value=Boolean.toString(false);
}
}
// set the string form of the attribute's value as submitted by the browser
if (value == null || value.trim().length()<1) {
// special case for KeystoreManager gbean
if ("trustStore".equals(attribute.getAttributeName())) {
attribute.setValue(null);
}
} else {
attribute.setStringValue(value.trim());
}
}
// create the connector gbean based on the configuration data
AbstractName newConnectorName = manager.getConnectorConfiguration(connectorType, connectorAttributes, webContainer, uniqueName);
// set the keystore properties if its a secure connector
setKeystoreProperties(actionRequest, newConnectorName);
// Start the connector
try {
GeronimoManagedBean managedBean = PortletManager.getManagedBean(actionRequest, newConnectorName);
managedBean.startRecursive();
} catch (Exception e) {
log.error("Unable to start connector", e); //TODO: get into rendered page
}
actionResponse.setRenderParameter(PARM_MODE, "list");
} else if(mode.equals("save")) { // User just submitted the form to update a connector
// Get submitted values
//todo: lots of validation
String connectorURI = actionRequest.getParameter(PARM_CONNECTOR_URI);
// Identify and update the connector
AbstractName connectorName = new AbstractName(URI.create(connectorURI));
NetworkConnector connector = PortletManager.getNetworkConnector(actionRequest, connectorName);
if(connector != null) {
WebManager manager = PortletManager.getWebManager(actionRequest, new AbstractName(URI.create(managerURI)));
ConnectorType connectorType = manager.getConnectorType(connectorName);
// set the connector attributes from the form post
for (ConnectorAttribute attribute : manager.getConnectorAttributes(connectorType)) {
String name = attribute.getAttributeName();
String value = actionRequest.getParameter(name);
// handle booelan type special
if (attribute.getAttributeClass().equals(Boolean.class)) {
// browser sends value of checked checkbox as "on" or "checked"
if ("on".equalsIgnoreCase(value) || "checked".equalsIgnoreCase(value)) {
value=Boolean.toString(true);
} else {
value=Boolean.toString(false);
}
}
// set the string form of the attribute's value as submitted by the browser
if (value == null || value.trim().length()<1) {
// special case for KeystoreManager gbean
if ("trustStore".equals(attribute.getAttributeName())) {
setProperty(connector,name,null);
}
} else {
// set the string value on the ConnectorAttribute so
// it can handle type conversion via getValue()
try {
attribute.setStringValue(value);
setProperty(connector,name,attribute.getValue());
} catch (Exception e) {
log.error("Unable to set property " + attribute.getAttributeName(), e);
}
}
}
// set the keystore properties if its a secure connector
setKeystoreProperties(actionRequest, connectorName);
}
actionResponse.setRenderParameter(PARM_MODE, "list");
} else if(mode.equals("start")) {
String connectorURI = actionRequest.getParameter(PARM_CONNECTOR_URI);
// work with the current connector to start it.
NetworkConnector connector = PortletManager.getNetworkConnector(actionRequest, new AbstractName(URI.create(connectorURI)));
if(connector != null) {
try {
((GeronimoManagedBean)connector).startRecursive();
} catch (Exception e) {
log.error("Unable to start connector", e); //todo: get into rendered page somehow?
}
}
else {
log.error("Incorrect connector reference"); //Replace this with correct error processing
}
actionResponse.setRenderParameter(PARM_CONNECTOR_URI, connectorURI);
actionResponse.setRenderParameter(PARM_MODE, "list");
} else if(mode.equals("stop")) {
String connectorURI = actionRequest.getParameter(PARM_CONNECTOR_URI);
// work with the current connector to stop it.
NetworkConnector connector = PortletManager.getNetworkConnector(actionRequest, new AbstractName(URI.create(connectorURI)));
if(connector != null) {
try {
((GeronimoManagedBean)connector).stop();
} catch (Exception e) {
log.error("Unable to stop connector", e); //todo: get into rendered page somehow?
}
}
else {
log.error("Incorrect connector reference"); //Replace this with correct error processing
}
actionResponse.setRenderParameter(PARM_CONNECTOR_URI, connectorURI);
actionResponse.setRenderParameter(PARM_MODE, "list");
} else if(mode.equals("restart")) {
String connectorURI = actionRequest.getParameter(PARM_CONNECTOR_URI);
// work with the current connector to restart it.
NetworkConnector connector = PortletManager.getNetworkConnector(actionRequest, new AbstractName(URI.create(connectorURI)));
if(connector != null) {
try {
((GeronimoManagedBean)connector).stop();
((GeronimoManagedBean)connector).start();
} catch (Exception e) {
log.error("Unable to restart connector", e); //todo: get into rendered page somehow?
}
} else {
log.error("Incorrect connector reference"); //Replace this with correct error processing
}
actionResponse.setRenderParameter(PARM_CONNECTOR_URI, connectorURI);
actionResponse.setRenderParameter(PARM_MODE, "list");
} else if(mode.equals("edit")) {
String connectorURI = actionRequest.getParameter(PARM_CONNECTOR_URI);
actionResponse.setRenderParameter(PARM_CONNECTOR_URI, connectorURI);
actionResponse.setRenderParameter(PARM_MODE, "edit");
} else if(mode.equals("delete")) { // User chose to delete a connector
String connectorURI = actionRequest.getParameter(PARM_CONNECTOR_URI);
PortletManager.getWebManager(actionRequest, new AbstractName(URI.create(managerURI))).removeConnector(new AbstractName(URI.create(connectorURI)));
actionResponse.setRenderParameter(PARM_MODE, "list");
}
}