view gnv/src/main/java/de/intevation/gnv/action/LoadAction.java @ 683:d49e8695786c

Ordered imports. Removed needless imports. Removed empty headers. gnv/trunk@855 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 29 Mar 2010 09:10:25 +0000
parents 93b4dedc4e37
children 57fa8019fbdc
line wrap: on
line source
package de.intevation.gnv.action;

import de.intevation.gnv.action.sessionmodel.SessionModel;
import de.intevation.gnv.action.sessionmodel.SessionModelFactory;

import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient;
import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory;

import de.intevation.gnv.artifactdatabase.objects.Artifact;
import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory;

import de.intevation.gnv.util.ArtifactNamespaceContext;
import de.intevation.gnv.util.XMLUtils;

import java.io.IOException;
import java.io.InputStream;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.log4j.Logger;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import org.w3c.dom.Document;

/**
 * @author Ingo Weinzierl (ingo.weinzierl@intevation.de)
 */
public class LoadAction extends ArtifactDatabaseActionBase {

    public static final String RESOURCE_UPLOAD_FAILURE   = "upload.failure";
    public static final String RESOURCE_INVALID_ARTIFACT = "invalid.artifact";

    private static Logger logger = Logger.getLogger(LoadAction.class);

    public LoadAction() {
        super();
    }

    public ActionForward execute(
        ActionMapping       mapping,
        ActionForm          form,
        HttpServletRequest  request,
        HttpServletResponse response)
    throws Exception
    {
        logger.info("Import artifact.");

        ServletFileUpload upload  = new ServletFileUpload();
        Document artifactDocument = null;

        try {
            FileItemIterator iter = upload.getItemIterator(request);
            while (iter.hasNext()) {
                FileItemStream item = (FileItemStream) iter.next();
                String name         = item.getFieldName();

                // the file input field of our form is named 'document'
                if (name.equals("document")) {
                    InputStream stream = item.openStream();

                    if (stream.available() == 0) {
                        logger.error("No artifact document found.");
                        request.setAttribute(
                            CommunicationKeys.REQUEST_EXCEPTION_PROJECT,
                            RESOURCE_UPLOAD_FAILURE);

                        return super.getExceptionForward(mapping);
                    }

                    artifactDocument   = XMLUtils.readDocument(stream);
                    if (artifactDocument == null) {
                        request.setAttribute(
                            CommunicationKeys.REQUEST_EXCEPTION_PROJECT,
                            RESOURCE_INVALID_ARTIFACT);

                        return super.getExceptionForward(mapping);
                    }

                    ArtifactDatabaseClientFactory adcf =
                        ArtifactDatabaseClientFactory.getInstance();
                    ArtifactDatabaseClient adc =
                        adcf.getArtifactDatabaseClient(getLocale(request));
                    ArtifactFactory factory = (ArtifactFactory)
                        (( List)adc.getArtifactFactories()).get(0);

                    SessionModelFactory sf = SessionModelFactory.getInstance();
                    SessionModel        sm = sf.getSessionModel(request);
                    sm.selectArtifactFactory(factory.getId());

                    Document describe = adc.doImport(
                        factory,
                        artifactDocument);

                    String uuid = XMLUtils.xpathString(
                        describe,
                        "/art:result/art:uuid/@value",
                        ArtifactNamespaceContext.INSTANCE);
                    String hash = XMLUtils.xpathString(
                        describe,
                        "/art:result/art:hash/@value",
                        ArtifactNamespaceContext.INSTANCE);

                    Artifact artifact = new Artifact(uuid, hash);
                    sm.setCurrentArtifact(artifact);

                    if (logger.isDebugEnabled()) {
                        logger.debug("Imported artifact UUID: "+artifact.getId());
                        logger.debug("Imported artifact HASH: "+artifact.getHash());
                    }

                    return new DescribeUIAction().execute(
                        mapping, form, request, response);
                }
            }
        }
        catch (IOException ioe) {
            logger.error(ioe, ioe);
            request.setAttribute(
                CommunicationKeys.REQUEST_EXCEPTION_PROJECT,
                ioe.getMessage());

            return super.getExceptionForward(mapping);
        }

        // no document found or not valid
        logger.error("Upload failure: No document found or invalid.");

        request.setAttribute(
            CommunicationKeys.REQUEST_EXCEPTION_PROJECT,
            RESOURCE_UPLOAD_FAILURE);

        return super.getExceptionForward(mapping);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org