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: tim@12: package de.intevation.gnv.action; sascha@683: tim@12: import java.util.ArrayList; tim@12: import java.util.Collection; tim@12: import java.util.Iterator; ingo@706: import java.util.Locale; ingo@395: import java.util.Map; tim@12: tim@12: import javax.servlet.http.HttpServletRequest; tim@12: import javax.servlet.http.HttpServletResponse; tim@12: tim@12: import org.apache.log4j.Logger; tim@12: import org.apache.struts.action.ActionForm; tim@12: import org.apache.struts.action.ActionForward; tim@12: import org.apache.struts.action.ActionMapping; tim@12: 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.client.exception.ArtifactDatabaseInputException; tim@963: import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; tim@963: import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; tim@963: import de.intevation.gnv.artifactdatabase.objects.InputParameter; tim@963: tim@12: /** ingo@690: * This controller feeds the artifact server with the current input data and ingo@690: * refreshes the gui with the current artifact description after the next state ingo@690: * is reached. sascha@699: * sascha@684: * @author Tim Englich sascha@684: * @author Ingo Weinzierl tim@12: */ ingo@409: public class NextArtifactStepAction extends DescribeUIAction { ingo@408: tim@12: /** tim@12: * the logger, used to log exceptions and additonaly information tim@12: */ tim@36: private static Logger log = Logger tim@36: .getLogger(SelectArtifactFactoryAction.class); tim@36: tim@12: /** tim@12: * Constructor tim@12: */ tim@12: public NextArtifactStepAction() { tim@12: super(); tim@12: } tim@12: tim@12: @Override tim@12: public ActionForward execute(ActionMapping mapping, ActionForm form, tim@38: HttpServletRequest request, tim@38: HttpServletResponse response) throws Exception { tim@34: log.debug("NextArtifactStepAction.execute"); tim@36: SessionModel sm = SessionModelFactory.getInstance() tim@36: .getSessionModel(request); tim@34: ArtifactDescription ad = sm.getArtifactDescription(); ingo@706: ingo@706: Locale tmp = sm.getCurrentLocale(); ingo@706: Locale locale = tmp != null ? tmp : request.getLocale(); ingo@706: tim@163: if (ad != null){ tim@163: Collection inputParameter = ad.getInputParameter(); tim@163: Collection ips = null; tim@163: if (inputParameter != null) { tim@163: ips = new ArrayList(inputParameter.size()); tim@163: Iterator it = inputParameter.iterator(); tim@163: while (it.hasNext()) { tim@163: String name = it.next(); tim@163: String[] values = request.getParameterValues(name); tim@163: InputParameter ip = new DefaultInputParameter(name, values); tim@163: ips.add(ip); tim@154: } tim@154: } tim@163: ArtifactDatabaseClient adc = ArtifactDatabaseClientFactory ingo@706: .getInstance().getArtifactDatabaseClient(locale); ingo@706: ingo@395: Map outs = ad.getOutputModes(); ingo@395: if (outs == null || outs.isEmpty()) { tim@163: // TODO: Woher kommt der zu erreichende Status; tim@163: String target = null; tim@163: if (ad.getReachableStates().size() > 1) { tim@163: target = request.getParameter("product"); // TODO HACK for tim@163: // Propducts every tim@163: // other Step has tim@163: // currently only tim@163: // one reachable tim@163: // state. tim@163: } else { tim@163: target = ad.getReachableStates().iterator().next(); tim@163: } sascha@681: tim@163: try { ingo@409: adc.doNextStep( sascha@681: sm.getSelectedArtifactFactory(), ingo@409: sm.getCurrentArtifact(), ingo@409: target, ingo@409: ips ingo@409: ); ingo@665: } ingo@665: catch (ArtifactDatabaseInputException e) { ingo@1008: log.error(e, e); tim@163: request.setAttribute( ingo@665: CommunicationKeys.REQUEST_EXCEPTION_INPUT_ID, ingo@665: e.getMessage()); ingo@665: } ingo@665: catch (Exception e) { ingo@665: log.error(e, e); ingo@665: request.setAttribute( ingo@665: CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, ingo@665: e.getMessage()); tim@163: } sascha@681: ingo@395: Map tmpOuts = ad.getOutputModes(); ingo@395: request.setAttribute( ingo@395: "furthertargets", ingo@1008: tmpOuts == null || tmpOuts.isEmpty() ingo@395: ); tim@163: } else { tim@163: try{ ingo@409: adc.getCurrentStepDescription( ingo@408: sm.getSelectedArtifactFactory(), ingo@408: sm.getCurrentArtifact(), ingo@408: true ingo@408: ); sascha@681: tim@163: request.setAttribute("diagramm", true); sascha@681: ingo@665: } ingo@665: catch (ArtifactDatabaseInputException e) { ingo@665: log.error(e, e); ingo@665: request.setAttribute( ingo@665: CommunicationKeys.REQUEST_EXCEPTION_INPUT_ID, ingo@665: e.getMessage()); ingo@665: } ingo@665: catch (Exception e) { tim@163: log.error(e, e); tim@163: request.setAttribute( ingo@409: CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, ingo@409: e.getMessage()); tim@163: } sascha@681: ingo@1008: request.setAttribute("furthertargets", false); tim@150: } tim@163: }else{ tim@163: log.warn("SessionTimeout has occured"); ingo@991: return sessionExhaustedForward(mapping, form, request, response); tim@34: } tim@34: return super.execute(mapping, form, request, response); tim@12: } tim@12: tim@12: } ingo@409: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :