ingo@1022: /* ingo@1022: * Copyright (c) 2010 by Intevation GmbH ingo@1022: * ingo@1022: * This program is free software under the LGPL (>=v2.1) ingo@1022: * Read the file LGPL.txt coming with the software for details ingo@1022: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1022: */ ingo@1022: ingo@394: package de.intevation.gnv.action; ingo@394: ingo@394: import javax.servlet.http.HttpServletRequest; ingo@394: import javax.servlet.http.HttpServletResponse; ingo@394: ingo@394: import org.apache.log4j.Logger; ingo@394: import org.apache.struts.action.ActionForm; ingo@394: import org.apache.struts.action.ActionForward; ingo@394: import org.apache.struts.action.ActionMapping; ingo@394: tim@963: import de.intevation.gnv.action.sessionmodel.SessionModel; tim@963: import de.intevation.gnv.action.sessionmodel.SessionModelFactory; tim@963: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; tim@963: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; tim@963: import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; tim@963: import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; tim@963: ingo@394: /** ingo@690: * This controller is used to step back to a previous state of the current ingo@690: * artifact. After calling the advance operation of the artifact server have ingo@690: * been called successfully, the describe document of the current artifact is ingo@690: * fetched and a new gui is rendered. sascha@699: * sascha@684: * @author Ingo Weinzierl ingo@394: */ ingo@409: public class PreviousArtifactStepAction extends DescribeUIAction { ingo@394: ingo@394: ingo@394: public static final String URL_STATE_KEY = "target"; ingo@394: tim@963: /** tim@963: * the logger, used to log exceptions and additonaly information tim@963: */ ingo@394: private static Logger logger = ingo@394: Logger.getLogger(PreviousArtifactStepAction.class); ingo@394: ingo@394: tim@963: /** tim@963: * Constructor tim@963: */ ingo@394: public PreviousArtifactStepAction() { ingo@394: super(); ingo@394: } ingo@394: ingo@394: ingo@394: @Override ingo@394: public ActionForward execute( ingo@394: ActionMapping mapping, ingo@394: ActionForm form, ingo@394: HttpServletRequest request, ingo@394: HttpServletResponse response ingo@394: ) throws Exception { ingo@394: ingo@409: SessionModel session = SessionModelFactory.getInstance().getSessionModel( ingo@409: request); ingo@394: ingo@580: ArtifactDescription ad = session.getArtifactDescription(); ingo@580: if (ad == null) { ingo@580: logger.warn("Session timed out."); ingo@580: request.setAttribute( ingo@991: CommunicationKeys.REQUEST_EXCEPTION_SESSION_ID, ingo@580: "SessionTimeout has occured"); ingo@991: return new FetchArtifactFactoriesAction().execute( ingo@580: mapping, form, request, response); ingo@580: } ingo@580: ingo@409: // TODO check if target is reachable ingo@394: ingo@409: ArtifactDatabaseClientFactory f = ingo@409: ArtifactDatabaseClientFactory.getInstance(); ingo@409: ArtifactDatabaseClient client = ingo@409: f.getArtifactDatabaseClient(getLocale(request)); ingo@394: ingo@409: ArtifactObject artifactFactory = session.getSelectedArtifactFactory(); ingo@409: ArtifactObject currentArtifact = session.getCurrentArtifact(); ingo@394: ingo@409: String target = (String) request.getParameter(URL_STATE_KEY); ingo@409: logger.debug("Step back to previous state: " + target); ingo@409: ingo@580: try { ingo@580: client.doAdvance( ingo@580: artifactFactory, ingo@580: currentArtifact, ingo@580: target ingo@580: ); ingo@580: } ingo@580: catch (Exception e) { ingo@580: logger.error(e, e); ingo@580: request.setAttribute( ingo@580: CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, ingo@580: e.getMessage()); ingo@580: } ingo@394: ingo@394: return super.execute(mapping, form, request, response); ingo@394: } ingo@394: } ingo@409: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :