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
}
try {
manager.updateConnectorConfig(newConnectorName);
} catch (Exception e) {
log.error("Unable to update connector in server.xml", 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));
GBeanData connectorGBeanData=null;
try {
connectorGBeanData=PortletManager.getKernel().getGBeanData(connectorName);
} catch (Exception e) {
log.error("Unable to get connectorGBeanData by abstractName:"+connectorName.toURI(), e);
}
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())) {
connectorGBeanData.setAttribute(name, null);
}
} else {
// set the string value on the ConnectorAttribute so
// it can handle type conversion via getValue()
try {
attribute.setStringValue(value);
connectorGBeanData.setAttribute(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);
try {
Kernel kernel=PortletManager.getKernel();
ClassLoader oldCL=connector.getClass().getClassLoader();
kernel.stopGBean(connectorName);
kernel.unloadGBean(connectorName);
kernel.loadGBean(connectorGBeanData, oldCL);
kernel.startGBean(connectorName);
} catch (Exception e) {
log.error("Unable to reload updated connector:"+connectorName.toURI(), e);
}
try {
manager.updateConnectorConfig(connectorName);
} catch (Exception e) {
log.error("Unable to update connector in server.xml", e); //TODO: get into rendered page
}
}
actionResponse.setRenderParameter(PARM_MODE, "list");