tim@12: /** tim@12: * tim@12: */ tim@12: package de.intevation.gnv.action; ingo@409: import de.intevation.gnv.action.sessionmodel.SessionModel; ingo@409: import de.intevation.gnv.action.sessionmodel.SessionModelFactory; ingo@409: ingo@409: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; ingo@409: import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; ingo@409: ingo@409: import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; ingo@409: import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; ingo@409: import de.intevation.gnv.artifactdatabase.objects.InputParameter; tim@12: tim@12: import java.util.ArrayList; tim@12: import java.util.Collection; tim@12: import java.util.Iterator; 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; ingo@409: 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@12: tim@12: /** tim@12: * @author Tim Englich ingo@409: * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) tim@36: * 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: /** tim@36: * @see de.intevation.gnv.action.ArtifactDatabaseActionBase#execute(org.apache.struts.action.ActionMapping, tim@36: * org.apache.struts.action.ActionForm, tim@36: * javax.servlet.http.HttpServletRequest, tim@36: * javax.servlet.http.HttpServletResponse) 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(); 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 tim@163: .getInstance() tim@163: .getArtifactDatabaseClient(getLocale(request)); 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: } tim@163: tim@163: try { ingo@409: adc.doNextStep( ingo@409: sm.getSelectedArtifactFactory(), ingo@409: sm.getCurrentArtifact(), ingo@409: target, ingo@409: ips ingo@409: ); tim@163: } catch (Exception e) { tim@163: log.error(e, e); tim@163: request.setAttribute( tim@163: CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, e tim@163: .getMessage()); tim@163: } tim@163: ingo@395: Map tmpOuts = ad.getOutputModes(); ingo@395: request.setAttribute( ingo@395: "furthertargets", ingo@395: 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: ); tim@163: tim@163: request.setAttribute("diagramm", true); tim@163: tim@163: } 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: } tim@163: tim@163: request.setAttribute("furthertargets", false); tim@150: } tim@163: }else{ tim@163: log.warn("SessionTimeout has occured"); tim@163: request.setAttribute(CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, tim@163: "SessionTimeout has occured"); tim@163: new FetchArtifactFactoriesAction().execute(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 :