/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.app.xmlui.aspect.swordclient; import org.apache.cocoon.environment.Request; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.dspace.app.xmlui.aspect.administrative.FlowResult; import org.dspace.app.xmlui.wing.Message; import org.dspace.core.Context; import org.dspace.sword.client.exceptions.HttpException; import org.dspace.sword.client.DSpaceSwordClient; import org.purl.sword.base.ServiceDocument; import org.purl.sword.client.SWORDClientException; import java.net.MalformedURLException; import java.net.URL; /** * User: Robin Taylor * Date: 08/02/11 * Time: 21:41 */ public class SelectTargetAction { private static final Message T_url_error = new Message("default", "xmlui.swordclient.SelectTargetAction.url_error"); private static final Message T_serviceDoc_error = new Message("default", "xmlui.swordclient.SelectTargetAction.serviceDoc_error"); private static Logger log = Logger.getLogger(SelectTargetAction.class); public FlowResult processSelectTarget(Context context, Request request, DSpaceSwordClient DSClient) { FlowResult result = new FlowResult(); result.setContinue(false); // Get all our request parameters String url = request.getParameter("url").trim(); String otherUrl = request.getParameter("otherUrl").trim(); String username = request.getParameter("username").trim(); String password = request.getParameter("password").trim(); String onBehalfOf = request.getParameter("onBehalfOf").trim(); // If we have errors, the form needs to be resubmitted to fix those problems String chosenUrl = ""; if (!StringUtils.isEmpty(otherUrl)) { // If otherUrl has been entered then it will take precedence. try { new URL(otherUrl); chosenUrl = otherUrl; } catch (MalformedURLException e) { result.addError("otherUrl"); } } else { if (!StringUtils.isEmpty(url)) { chosenUrl = url; } else { result.addError("url"); } } if (StringUtils.isEmpty(username)) { result.addError("username"); } if (StringUtils.isEmpty(password)) { result.addError("password"); } // No errors, the input parameters look healthy. if (result.getErrors() == null) { try { DSClient.setRemoteServer(chosenUrl); DSClient.setCredentials(username, password, onBehalfOf); ServiceDocument serviceDoc = DSClient.getServiceDocument(); result.setParameter("serviceDoc", serviceDoc); result.setContinue(true); result.setOutcome(true); } catch (MalformedURLException e) { log.error("Malformed URL : " + chosenUrl); result.setOutcome(false); result.setMessage(T_url_error); } catch (HttpException e) { log.error("HttpException encountered", e); result.setOutcome(false); result.setMessage(T_serviceDoc_error.parameterize(e.getMessage())); } catch (SWORDClientException e) { log.error("SwordClientException : " + e.getMessage(), e); result.setOutcome(false); result.setMessage(T_serviceDoc_error.parameterize(e.getMessage())); } } return result; } public FlowResult processSelectSubTarget(Context context, Request request, DSpaceSwordClient DSClient) { FlowResult result = new FlowResult(); result.setContinue(false); // Get all our request parameters. String url = request.getParameter("sub-service").trim(); log.info("target selected is : " + url); if (StringUtils.isEmpty(url)) { // Note : this shouldn't ever happen since the user doesn't enter it manually. result.addError("sub-service"); } // No errors, the input parameters look healthy. if (result.getErrors() == null) { try { DSClient.setRemoteServer(url); ServiceDocument serviceDoc = DSClient.getServiceDocument(); result.setParameter("serviceDoc", serviceDoc); result.setOutcome(true); } catch (MalformedURLException e) { log.error("Malformed URL : " + url); result.setOutcome(false); result.setMessage(T_url_error); } catch (HttpException e) { log.error("HttpException encountered", e); result.setOutcome(false); result.setMessage(T_serviceDoc_error.parameterize(e.getMessage())); } catch (SWORDClientException e) { log.error("SwordClientException : " + e.getMessage(), e); result.setOutcome(false); result.setMessage(T_serviceDoc_error.parameterize(e.getMessage())); } } return result; } }