Mercurial > dive4elements > gnv-client
view gnv/src/main/java/de/intevation/gnv/action/LoadAction.java @ 963:0441e78cd900
Add more Javadocs
gnv/trunk@1107 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Tue, 18 May 2010 11:09:33 +0000 |
parents | 21735fb8d29b |
children | 33198e55371c |
line wrap: on
line source
package de.intevation.gnv.action; 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; 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.client.exception.ArtifactDatabaseClientException; 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; /** * This controller is called for reloading projects from xml files. It waits for * an xml document named 'document' and feeds the artifact server with this * document. After a successful feed, the artifact description is fetched and * displayed in the gui. * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class LoadAction extends ArtifactDatabaseActionBase { public static final String RESOURCE_UPLOAD_FAILURE = "upload.failure"; public static final String RESOURCE_INVALID_ARTIFACT = "invalid.artifact"; /** * the logger, used to log exceptions and additonaly information */ private static Logger logger = Logger.getLogger(LoadAction.class); /** * Constructor */ public LoadAction() { super(); } @Override 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); } try { 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()); } } catch (ArtifactDatabaseClientException adce) { logger.error(adce, adce); request.setAttribute( CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, adce.getMessage()); // XXX return super.getExceptionForward(mapping); } 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 :