public void processAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws PortletException, IOException {
String mode = actionRequest.getParameter(MODE_KEY);
if (mode.equals(IMPORT_UPLOAD_MODE)) {
processImportUpload(actionRequest, actionResponse);
actionResponse.setRenderParameter(MODE_KEY, IMPORT_STATUS_MODE);
return;
}
PoolData data = new PoolData();
data.load(actionRequest);
if (mode.equals("process-" + SELECT_RDBMS_MODE)) {
DatabaseDriver info = getDatabaseInfo(actionRequest, data);
if (info != null) {
data.rarPath = info.getRAR().toString();
if (info.isSpecific()) {
data.adapterDisplayName = "Unknown"; // will pick these up when we process the RA type in the render request
data.adapterDescription = "Unknown";
actionResponse.setRenderParameter(MODE_KEY, EDIT_MODE);
} else {
data.driverClass = info.getDriverClassName();
data.urlPrototype = info.getURLPrototype();
actionResponse.setRenderParameter(MODE_KEY, BASIC_PARAMS_MODE);
}
} else {
actionResponse.setRenderParameter(MODE_KEY, SELECT_RDBMS_MODE);
}
} else if (mode.equals("process-" + DOWNLOAD_MODE)) {
String name = actionRequest.getParameter("driverName");
DriverDownloader.DriverInfo[] drivers = getDriverInfo(actionRequest);
DriverDownloader.DriverInfo found = null;
for (DriverDownloader.DriverInfo driver : drivers) {
if (driver.getName().equals(name)) {
found = driver;
break;
}
}
if (found != null) {
data.jars = new String[]{found.getRepositoryURI()};
WriteableRepository repo = PortletManager.getCurrentServer(actionRequest).getWritableRepositories()[0];
final PortletSession session = actionRequest.getPortletSession();
ProgressInfo progressInfo = new ProgressInfo();
progressInfo.setMainMessage("Downloading " + found.getName());
session.setAttribute(ProgressInfo.PROGRESS_INFO_KEY, progressInfo, PortletSession.APPLICATION_SCOPE);
// Start the download monitoring
new Thread(new Downloader(found, progressInfo, repo)).start();
actionResponse.setRenderParameter(MODE_KEY, DOWNLOAD_STATUS_MODE);
} else {
actionResponse.setRenderParameter(MODE_KEY, DOWNLOAD_MODE);
}
} else if (mode.equals("process-" + DOWNLOAD_STATUS_MODE)) {
if (data.getDbtype() == null || data.getDbtype().equals("Other")) {
actionResponse.setRenderParameter(MODE_KEY, BASIC_PARAMS_MODE);
} else {
actionResponse.setRenderParameter(MODE_KEY, EDIT_MODE);
}
} else if (mode.equals("process-" + BASIC_PARAMS_MODE)) {
DatabaseDriver info;
info = getDatabaseInfo(actionRequest, data);
if (info != null) {
data.url = populateURL(info.getURLPrototype(), info.getURLParameters(), data.getUrlProperties());
}
if (attemptDriverLoad(actionRequest, data) != null) {
actionResponse.setRenderParameter(MODE_KEY, CONFIRM_URL_MODE);
} else {
actionResponse.setRenderParameter("driverError", "Unable to load driver " + data.driverClass);
actionResponse.setRenderParameter(MODE_KEY, BASIC_PARAMS_MODE);
}
} else if (mode.equals("process-" + CONFIRM_URL_MODE)) {
String test = actionRequest.getParameter("test");
if (test == null || test.equals("true")) {
try {
String targetDBInfo = attemptConnect(actionRequest, data);
actionResponse.setRenderParameter("targetDBInfo", targetDBInfo);
actionResponse.setRenderParameter("connected", "true");
} catch (Exception e) {
StringWriter writer = new StringWriter();
PrintWriter temp = new PrintWriter(writer);
e.printStackTrace(temp);
temp.flush();
temp.close();
addErrorMessage(actionRequest, getLocalizedString(actionRequest, "dbwizard.testConnection.connectionError"), writer.getBuffer().toString());
actionResponse.setRenderParameter("connected", "false");
}
actionResponse.setRenderParameter(MODE_KEY, TEST_CONNECTION_MODE);
} else {
save(actionRequest, actionResponse, data, false);
}
} else if (mode.equals(SAVE_MODE)) {
save(actionRequest, actionResponse, data, false);
} else if (mode.equals(SHOW_PLAN_MODE)) {
String plan = save(actionRequest, actionResponse, data, true);
actionRequest.getPortletSession(true).setAttribute("deploymentPlan", plan);
actionResponse.setRenderParameter(MODE_KEY, SHOW_PLAN_MODE);
} else if (mode.equals(EDIT_EXISTING_MODE)) {
final String name = actionRequest.getParameter("adapterAbstractName");
loadConnectionFactory(actionRequest, name, data.getAbstractName(), data);
actionResponse.setRenderParameter("adapterAbstractName", name);
actionResponse.setRenderParameter(MODE_KEY, EDIT_MODE);
} else if (mode.equals(SELECT_RDBMS_MODE)) {
if (data.getAdapterDisplayName() == null) { // Set a default for a new pool
data.adapterDisplayName = "TranQL Generic JDBC Resource Adapter";
}
actionResponse.setRenderParameter(MODE_KEY, mode);
} else if (mode.equals(WEBLOGIC_IMPORT_MODE)) {
String domainDir = actionRequest.getParameter("weblogicDomainDir");
String libDir = actionRequest.getParameter("weblogicLibDir");
try {
DatabaseConversionStatus status = WebLogic81DatabaseConverter.convert(libDir, domainDir);
actionRequest.getPortletSession(true).setAttribute("ImportStatus", new ImportStatus(status));
actionResponse.setRenderParameter(MODE_KEY, IMPORT_STATUS_MODE);
} catch (Exception e) {
log.error("Unable to import", e);
actionResponse.setRenderParameter("from", actionRequest.getParameter("from"));
actionResponse.setRenderParameter(MODE_KEY, IMPORT_START_MODE);
}
} else if (mode.equals(IMPORT_START_MODE)) {
actionResponse.setRenderParameter("from", actionRequest.getParameter("from"));
actionResponse.setRenderParameter(MODE_KEY, mode);
} else if (mode.equals(IMPORT_EDIT_MODE)) {
ImportStatus status = getImportStatus(actionRequest);
int index = Integer.parseInt(actionRequest.getParameter("importIndex"));
status.setCurrentPoolIndex(index);
loadImportedData(actionRequest, data, status.getCurrentPool());
actionResponse.setRenderParameter(MODE_KEY, EDIT_MODE);
} else if (mode.equals(IMPORT_COMPLETE_MODE)) {
ImportStatus status = getImportStatus(actionRequest);
log.warn("Import Results:"); //todo: create a screen for this
log.warn(" " + status.getSkippedCount() + " ignored");
log.warn(" " + status.getStartedCount() + " reviewed but not deployed");
log.warn(" " + status.getPendingCount() + " not reviewed");
log.warn(" " + status.getFinishedCount() + " deployed");
actionRequest.getPortletSession().removeAttribute("ImportStatus");
} else if (mode.equals(DELETE_MODE)) {
String name = actionRequest.getParameter("adapterAbstractName");
loadConnectionFactory(actionRequest, name, data.getAbstractName(), data);
delete(actionRequest, actionResponse, data);
} else {
actionResponse.setRenderParameter(MODE_KEY, mode);
}
data.store(actionResponse);
}
|