From 1bb92c3e37546f02d79807a08ea6cd114161f795 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 26 Nov 2009 19:25:15 +0000 Subject: [PATCH] Update webdav git-svn-id: https://svn.argeo.org/commons/trunk@3173 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../main/java/org/argeo/ArgeoException.java | 3 - .../org.argeo.sandbox.jackrabbit/dummy00.xls | Bin 0 -> 6656 bytes .../org.argeo.sandbox.jackrabbit/dummy01.xls | Bin 0 -> 6656 bytes .../org.argeo.sandbox.jackrabbit/pom.xml | 3 +- .../argeo/sandbox/jackrabbit/WebDavTest.java | 52 ++++++++++++++---- .../log4j.properties | 3 +- .../pom.xml | 4 ++ .../WEB-INF/webdav-servlet.xml | 2 +- .../argeo/server/ArgeoServerException.java | 3 - .../org.argeo.server.jackrabbit/pom.xml | 12 +++- .../webdav/ExtendedDispatcherServlet.java | 2 +- ...eWebDavServlet.java => WebDavServlet.java} | 48 ++++++++++++++-- .../argeo/server/jcr/JcrResourceAdapter.java | 47 ++++++++++++---- .../argeo/server/jcr/mvc/JcrController.java | 43 +++++++++++++++ 14 files changed, 181 insertions(+), 41 deletions(-) create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/dummy00.xls create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/dummy01.xls rename server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/{SimpleWebDavServlet.java => WebDavServlet.java} (58%) create mode 100644 server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrController.java diff --git a/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java b/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java index 28d276fd1..ff3cef8ae 100644 --- a/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java +++ b/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/ArgeoException.java @@ -3,9 +3,6 @@ package org.argeo; public class ArgeoException extends RuntimeException { private static final long serialVersionUID = 1L; - public ArgeoException() { - } - public ArgeoException(String message) { super(message); } diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/dummy00.xls b/sandbox/runtime/org.argeo.sandbox.jackrabbit/dummy00.xls new file mode 100644 index 0000000000000000000000000000000000000000..e5846fef7262b74c71fa79612ddf0697d39b8a3c GIT binary patch literal 6656 zcmeHLUu=_A6hB|Lj&=;z{X+#EpHsHMHr&{Q7)82`;V^7017o5j+HK!lpI?8jkpvb4s@^$z|CR2=&Kv5pxI(7%KDXHW zkhG~8`o(2sj?9utyc8Az09S(PZ$vN}RDL1AxB~J zzd(?ueDAnr#XCspaL&C_wvh5WFMesB&SNi5kl2PJI+$nuBZQxevJ7WZq2c`ZB;|Su451siCH++90v|N`q?U}vfPC5~t zjE|#yF%+4yFyY5TlT)GCVN7(VH5_9#g{O&6X2H)e#gJvYw!jUptpW#q6wBatROz7) zKtJYgL&2dtOO zq3A?tvUMODn+Qc38auW$cGV%4A+jyaHW+%&G8+evX!oyc-iWDmYPz(&$yIMg{Ycxn znYMGu?HgV7lkjbREYQ&3jIK{Odq64%6+fD;%pVx;v!_%Nc8%N3SH3@)*ehlEd?HzzYaTehF?G(TfFU{L;G5W~< zP<%XWO_|-HsnM_%(>Gc!I%WCp3Id6S^_+&*SuzEIL|vrTJNY$ZJSOqf)2y?)IOSSD z$MDR3J9lF9y1?*e-)fk=vR9_C{t3KX`R#8P zUbthb6H?-M(MCbZotmBT>BI9~|7P%BcDnS+4va9ObFlOaWMT8!dJF5{g0bVy_{&ig Ny8rI)Z~yi9e*xrBiZ=iN literal 0 HcmV?d00001 diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/dummy01.xls b/sandbox/runtime/org.argeo.sandbox.jackrabbit/dummy01.xls new file mode 100644 index 0000000000000000000000000000000000000000..b5c6b55395e29c5f6d4ef850f9c808714a111c7f GIT binary patch literal 6656 zcmeHLU2IfE6h3!<%H6iK+tNh^#Vgt$`hzW%h%wl0OQ9HA8o>BMqPOMNUD)pGvQ>Fd zmm+VNXn4>E5<+ZZjEO=_^uZ>UH)Av!lPdaD;EBk?q8LL2*6*8pmtIQO?vh4DJDYE2 z_RO3)GjqkD3Q~}k%GN1+s0n35A zfV+WvfEB<>;9lT9U=?sbU;qyQtAPiBhk#n34yXqjfHgoP&;&FCocmg*WW5dbbwImA zTkn)JJF-~&s~rgF&|-;SK3n<~UB2@DXJHX1eW#UOoC9sQJWt!`He*A^-<7)5988V2 zxlt>@J;MVVJ%+pjHbrW+%9pA9Bh_z0^Qb=c9Afx%&TC>3;0IrhFDx z$dudXCVL+;Hg$%+CJ((i54|xDJuoNz#(a29Q)$vT>cKfpOO|CY?Nwz}xW zrI)C(ChgBY3+vb9FwVjsVC3oF8L_NX8!3k!f1oJqNZG>6V6IR55%`2A{C<|bj0TxO zHcCl`URy(`;DC%O1Z~kdQmV|++NCVR=JsA%;*E~Mbi@<= zcZ8g)vR>U$c~1pK67f_7<%?!))WU?HG~=UY@&LAEvo)Ax6^(snaww9;(?ypF%!*-* zAsIfIj#&GRe(NP;M`FZ`H}@x!BW7%MUE8|4&JbcNeOs^gok90dL##V4MynLkY)#)xqZgUok5=HOU2|TSwmkcvh8qRP<3E-m zaEQF>;Xk&WbJ|D^+4hEcQhgzLVPokJ?~We~lb5nWwoRhld!zmQnN#75GC-AQdeH~! z&QQIS#qO2j&9tIgDL&h>C6KXK%?>lkBc+OuJTN(V!c#4usK;}7rW0;I7|*8$*U%F+ z?SF2G+-b)4+p)x%jdg3#aBC2%ELwx$xuHQN;ua0sf|ZG&x~Rbg)?lk!gYecxYY;p| zYtYtd(Yb~fi5C{YJ9bc~7ef43xoqZ}r!P8`Ozck#r;MJLhpd?K*rP4G%t0#_vk*u{ zx}w9w_QllZDLRJ{+Cq!wv>C4B%N@_(>_p?9K79O_E88Q%58l$Hss7_1=?5o(oPX>^ zo#Ai5p+!*gijW3)D2@PpH@*Wf=#B$?Kb{0A@xnFxEl7XbXQm=iYt-m6NB2anqkQ1bP{!gk4FTzCyswh7PX^U@ zsC_oEh@7uL?l6cBAFr?;SsV|Vl&1b`Htp5?nPC4=yq9}I%-QVB-Y59Kwv~Q1+ literal 0 HcmV?d00001 diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml b/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml index 9c1877c4a..ad81e525b 100644 --- a/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml @@ -28,12 +28,13 @@ org.springframework.osgi.extender, org.springframework.osgi.web.extender, org.argeo.dep.osgi.catalina.start, - org.argeo.server.jackrabbit.webapp, + org.argeo.server.jackrabbit.webdav, org.argeo.server.jackrabbit.repo ${basedir}/../../../server/modules;in=*;ex=pom.xml;ex=target;ex=.*, ${basedir}/../../../server/demo;in=*;ex=pom.xml;ex=target;ex=.*, + ${basedir}/../../../server/runtime;in=*/target/classes, diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java index f121e928e..9a422f268 100644 --- a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java @@ -1,6 +1,8 @@ package org.argeo.sandbox.jackrabbit; import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.List; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HostConfiguration; @@ -18,7 +20,11 @@ import org.apache.commons.logging.LogFactory; import org.apache.jackrabbit.webdav.client.methods.CheckoutMethod; import org.apache.jackrabbit.webdav.client.methods.CopyMethod; import org.apache.jackrabbit.webdav.client.methods.DavMethod; +import org.apache.jackrabbit.webdav.client.methods.PropPatchMethod; import org.apache.jackrabbit.webdav.client.methods.PutMethod; +import org.apache.jackrabbit.webdav.property.DavProperty; +import org.apache.jackrabbit.webdav.property.DefaultDavProperty; +import org.apache.jackrabbit.webdav.version.DeltaVConstants; public class WebDavTest { private final static Log log = LogFactory.getLog(WebDavTest.class); @@ -42,24 +48,47 @@ public class WebDavTest { client.setHostConfiguration(hostConfig); // return client; - String baseUrl = "http://localhost:7070/org.argeo.server.jackrabbit.webapp/default/"; - String fileName = "test.xml"; - String url1 = baseUrl + fileName; - String url2 = baseUrl + "test-copied.xml"; + String baseUrl = "http://localhost:7070/webdav/default/"; + // String fileName = "test.xml"; + String file00 = "dummy00.xls"; + String file01 = "dummy01.xls"; + String url00 = baseUrl + file00; + String url01 = baseUrl + file01; + String urlCopied = baseUrl + "test-copied.xls"; // PUT - log.debug("Create " + url1); - PutMethod pm = new PutMethod(url1); + log.debug("Create " + url00); + PutMethod pm = new PutMethod(url00); RequestEntity requestEntity = new InputStreamRequestEntity( - new FileInputStream(fileName)); + new FileInputStream(file00)); + pm.setRequestEntity(requestEntity); + client.executeMethod(pm); + log.debug("POST status: " + pm.getStatusCode() + " " + + pm.getStatusText()); + + // PROP PATCH + List props = new ArrayList(); + props.add(new DefaultDavProperty("auto-version", + DeltaVConstants.XML_CHECKOUT_CHECKIN, + DeltaVConstants.NAMESPACE)); + PropPatchMethod pp = new PropPatchMethod(url00, props); + client.executeMethod(pp); + log.debug("PROP PATCH status: " + pp.getStatusCode() + " " + + pp.getStatusText()); + + // PUT (update) + log.debug("Update " + url00); + pm = new PutMethod(url00); + requestEntity = new InputStreamRequestEntity(new FileInputStream( + file01)); pm.setRequestEntity(requestEntity); client.executeMethod(pm); log.debug("POST status: " + pm.getStatusCode() + " " + pm.getStatusText()); // COPY - log.debug("Copy to " + url2); - DavMethod copy = new CopyMethod(url1, url2, true); + log.debug("Copy to " + urlCopied); + DavMethod copy = new CopyMethod(url00, urlCopied, true); client.executeMethod(copy); log.debug("COPY status: " + copy.getStatusCode() + " " @@ -67,8 +96,8 @@ public class WebDavTest { // GET // CheckoutMethod gm = new CheckoutMethod(baseUrl + fileName); - log.debug("Retrieve " + url2); - GetMethod gm = new GetMethod(url2); + log.debug("Retrieve " + urlCopied); + GetMethod gm = new GetMethod(urlCopied); client.executeMethod(gm); String responseGet = gm.getResponseBodyAsString(); log.debug("GET status: " + gm.getStatusCode() + " " @@ -78,5 +107,4 @@ public class WebDavTest { e.printStackTrace(); } } - } diff --git a/server/demo/org.argeo.server.demo.log4j/log4j.properties b/server/demo/org.argeo.server.demo.log4j/log4j.properties index 659533cdc..d87a780bc 100644 --- a/server/demo/org.argeo.server.demo.log4j/log4j.properties +++ b/server/demo/org.argeo.server.demo.log4j/log4j.properties @@ -2,11 +2,12 @@ log4j.rootLogger=WARN, console ## Levels log4j.logger.org.argeo=DEBUG +org.argeo.server.jackrabbit.webdav.ExtendedDispatcherServlet=INFO log4j.logger.org.hibernate=WARN log4j.logger.org.springframework=WARN -log4j.logger.org.springframework.web=TRACE +log4j.logger.org.springframework.web=WARN #log4j.logger.org.springframework.jms=WARN #log4j.logger.org.springframework.security=WARN diff --git a/server/dep/org.argeo.server.dep.jackrabbit.server/pom.xml b/server/dep/org.argeo.server.dep.jackrabbit.server/pom.xml index 233e83904..e7b994214 100644 --- a/server/dep/org.argeo.server.dep.jackrabbit.server/pom.xml +++ b/server/dep/org.argeo.server.dep.jackrabbit.server/pom.xml @@ -15,6 +15,10 @@ org.argeo.dep.osgi org.argeo.dep.osgi.jackrabbit + + org.apache.xalan + com.springsource.org.apache.xalan + diff --git a/server/modules/org.argeo.server.jackrabbit.webdav/WEB-INF/webdav-servlet.xml b/server/modules/org.argeo.server.jackrabbit.webdav/WEB-INF/webdav-servlet.xml index cfa47ee9b..4ed8e3dab 100644 --- a/server/modules/org.argeo.server.jackrabbit.webdav/WEB-INF/webdav-servlet.xml +++ b/server/modules/org.argeo.server.jackrabbit.webdav/WEB-INF/webdav-servlet.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> - + diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ArgeoServerException.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ArgeoServerException.java index ae1d20853..8184e0a84 100644 --- a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ArgeoServerException.java +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ArgeoServerException.java @@ -6,9 +6,6 @@ import org.argeo.ArgeoException; public class ArgeoServerException extends ArgeoException { private static final long serialVersionUID = 1L; - public ArgeoServerException() { - } - public ArgeoServerException(String message) { super(message); } diff --git a/server/runtime/org.argeo.server.jackrabbit/pom.xml b/server/runtime/org.argeo.server.jackrabbit/pom.xml index a00612998..e0bb0c393 100644 --- a/server/runtime/org.argeo.server.jackrabbit/pom.xml +++ b/server/runtime/org.argeo.server.jackrabbit/pom.xml @@ -45,6 +45,12 @@ 0.1.2-SNAPSHOT + + org.argeo.commons.server + org.argeo.server.core + 0.1.2-SNAPSHOT + + org.argeo.dep.osgi @@ -78,6 +84,11 @@ com.springsource.slf4j.org.apache.commons.logging + + org.apache.commons + com.springsource.org.apache.commons.fileupload + + org.argeo.commons.basic @@ -92,6 +103,5 @@ pom test - diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java index 2fde82d03..3b71b5fce 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java @@ -19,7 +19,7 @@ public class ExtendedDispatcherServlet extends DispatcherServlet { throws ServletException, java.io.IOException { // see http://forum.springsource.org/showthread.php?t=53472 try { - if (log.isDebugEnabled()) + if (log.isTraceEnabled()) log.debug("Received request with method '" + req.getMethod() + "'"); doService(req, resp); diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavServlet.java similarity index 58% rename from server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java rename to server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavServlet.java index 267758958..88c7f6bd3 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavServlet.java @@ -10,21 +10,24 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jackrabbit.webdav.simple.ResourceConfig; +import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet; import org.argeo.ArgeoException; import org.springframework.core.io.Resource; -public class SimpleWebDavServlet extends - org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet { +public class WebDavServlet extends SimpleWebdavServlet { private static final long serialVersionUID = 1L; - private final static Log log = LogFactory.getLog(SimpleWebDavServlet.class); + private final static Log log = LogFactory.getLog(WebDavServlet.class); - /** - * the jcr repository - */ private Repository repository; private Resource resourceConfiguration; + public WebDavServlet() { + + } + + // private Session session; + @Override public void init() throws ServletException { super.init(); @@ -39,6 +42,15 @@ public class SimpleWebDavServlet extends } setResourceConfig(resourceConfig); } + + // try { + // session().getWorkspace().getObservationManager().addEventListener( + // this, Event.NODE_ADDED, "/", true, null, null, false); + // if (log.isDebugEnabled()) + // log.debug("Registered listener"); + // } catch (Exception e) { + // throw new ArgeoException("Cannot register event listener", e); + // } } @Override @@ -48,8 +60,32 @@ public class SimpleWebDavServlet extends log.debug("Received request with method '" + request.getMethod() + "'"); super.service(request, response); + + if (log.isDebugEnabled()) { + log.debug("Webdav response: " + response); + // response. + } } + // public void onEvent(EventIterator events) { + // while (events.hasNext()) { + // Event event = events.nextEvent(); + // log.debug(event); + // } + // + // } + + // protected Session session() { + // if (session == null) + // try { + // session = getRepository().login( + // new SimpleCredentials("demo", "demo".toCharArray())); + // } catch (Exception e) { + // throw new ArgeoException("Cannot open session", e); + // } + // return session; + // } + public Repository getRepository() { return repository; } diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/JcrResourceAdapter.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/JcrResourceAdapter.java index b770a89a8..aa6f11b25 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/JcrResourceAdapter.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/JcrResourceAdapter.java @@ -1,5 +1,6 @@ package org.argeo.server.jcr; +import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Calendar; @@ -66,8 +67,17 @@ public class JcrResourceAdapter implements InitializingBean, DisposableBean { public void create(String path, Resource file, String mimeType) { try { - if (session().itemExists(path)) + create(path, file.getInputStream(), mimeType); + } catch (IOException e) { + throw new ArgeoException("Cannot read " + file, e); + } + } + + public void create(String path, InputStream in, String mimeType) { + try { + if (session().itemExists(path)) { throw new ArgeoException("Node " + path + " already exists."); + } int index = path.lastIndexOf('/'); String parentPath = path.substring(0, index); @@ -80,11 +90,12 @@ public class JcrResourceAdapter implements InitializingBean, DisposableBean { Node fileNode = folderNode.addNode(fileName, "nt:file"); Node contentNode = fileNode.addNode("jcr:content", "nt:resource"); - contentNode.setProperty("jcr:mimeType", mimeType); + if (mimeType != null) + contentNode.setProperty("jcr:mimeType", mimeType); contentNode.setProperty("jcr:encoding", defaultEncoding); - contentNode.setProperty("jcr:data", file.getInputStream()); + contentNode.setProperty("jcr:data", in); Calendar lastModified = Calendar.getInstance(); - lastModified.setTimeInMillis(file.lastModified()); + // lastModified.setTimeInMillis(file.lastModified()); contentNode.setProperty("jcr:lastModified", lastModified); // resNode.addMixin("mix:referenceable"); @@ -97,32 +108,44 @@ public class JcrResourceAdapter implements InitializingBean, DisposableBean { fileNode.checkin(); if (log.isDebugEnabled()) - log.debug("Created " + path + " from " + file); + log.debug("Created " + path); } catch (Exception e) { - throw new ArgeoException("Cannot create node from resource " + file - + " under " + path, e); + throw new ArgeoException("Cannot create node for " + path, e); } } public void update(String path, Resource file) { try { + update(path, file.getInputStream()); + } catch (IOException e) { + throw new ArgeoException("Cannot read " + file, e); + } + } + + public void update(String path, InputStream in) { + try { + + if (!session().itemExists(path)) { + create(path, in, null); + return; + } + Node fileNode = (Node) session().getItem(path); Node contentNode = fileNode.getNode("jcr:content"); fileNode.checkout(); - contentNode.setProperty("jcr:data", file.getInputStream()); + contentNode.setProperty("jcr:data", in); Calendar lastModified = Calendar.getInstance(); - lastModified.setTimeInMillis(file.lastModified()); + // lastModified.setTimeInMillis(file.lastModified()); contentNode.setProperty("jcr:lastModified", lastModified); session().save(); fileNode.checkin(); if (log.isDebugEnabled()) - log.debug("Updated " + path + " from " + file); + log.debug("Updated " + path); } catch (Exception e) { - throw new ArgeoException("Cannot update node " + path - + " from resource" + file, e); + throw new ArgeoException("Cannot update node " + path, e); } } diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrController.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrController.java new file mode 100644 index 000000000..ea800a037 --- /dev/null +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrController.java @@ -0,0 +1,43 @@ +package org.argeo.server.jcr.mvc; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.argeo.server.ServerAnswer; +import org.argeo.server.jcr.JcrResourceAdapter; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.stereotype.Controller; + +@Controller +public class JcrController { + private JcrResourceAdapter resourceAdapter; + + // Create a factory for disk-based file items + private FileItemFactory factory = new DiskFileItemFactory(); + + // Create a new file upload handler + private ServletFileUpload upload = new ServletFileUpload(factory); + + public ServerAnswer importFile(HttpServletRequest request, + HttpServletResponse response) throws Exception { + // Parse the request + List items = upload.parseRequest(request); + + byte[] arr = null; + for (FileItem item : items) { + if (!item.isFormField()) { + arr = item.get(); + break; + } + } + + ByteArrayResource res = new ByteArrayResource(arr); + return ServerAnswer.ok("File imported"); + } +} -- 2.30.2