Mercurial > dive4elements > gnv-client
diff gnv/src/main/java/de/intevation/gnv/action/LoadAction.java @ 673:93b4dedc4e37
Implemented a mechanism to import artifacts from xml structured documents.
gnv/trunk@801 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 19 Mar 2010 10:04:28 +0000 |
parents | b89b31293772 |
children | d49e8695786c |
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/action/LoadAction.java Fri Mar 19 08:51:45 2010 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/action/LoadAction.java Fri Mar 19 10:04:28 2010 +0000 @@ -1,10 +1,17 @@ package de.intevation.gnv.action; -import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; -import de.intevation.gnv.propertiesreader.PropertiesReader; +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.InputStream; +import java.io.IOException; +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -17,7 +24,7 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; +import org.apache.struts.action.ActionMapping; import org.w3c.dom.Document; @@ -26,7 +33,8 @@ */ public class LoadAction extends ArtifactDatabaseActionBase { - public static final String RESOURCE_UPLOAD_FAILURE = "upload.failure"; + 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); @@ -46,32 +54,88 @@ ServletFileUpload upload = new ServletFileUpload(); Document artifactDocument = null; - FileItemIterator iter = upload.getItemIterator(request); - while (iter.hasNext()) { - FileItemStream item = (FileItemStream) iter.next(); - String name = item.getFieldName(); + try { + FileItemIterator iter = upload.getItemIterator(request); + while (iter.hasNext()) { + FileItemStream item = (FileItemStream) iter.next(); + String name = item.getFieldName(); - if (name.equals("document")) { - InputStream stream = item.openStream(); - artifactDocument = XMLUtils.readDocument(stream); + // 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); + } } } - - // no document found or not valid - if (artifactDocument == null) { - logger.error("Upload failure: No document found or invalid."); - + catch (IOException ioe) { + logger.error(ioe, ioe); request.setAttribute( CommunicationKeys.REQUEST_EXCEPTION_PROJECT, - RESOURCE_UPLOAD_FAILURE); + ioe.getMessage()); return super.getExceptionForward(mapping); } - // TODO Do something with our nice xml document - // Use DescribeUI Action to set required attributes which are parsed in - // jsp files. - return super.execute(mapping, form, request, response); + // 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 :