[Yanel-commits] rev 27334 - in public/yanel/trunk/src: build
contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources
contributions/resources/resource-creator/src/java/org/wyona/yanel/impl/resources
realms/yanel-website/src/java/org/wyona/yanel/servlet/menu/impl
resources/file/src/build
resources/file/src/java/org/wyona/yanel/impl/resources
webapp/WEB-INF webapp/src/java/org/wyona/yanel/servlet
webapp/src/java/org/wyona/yanel/servlet/communication
josias at wyona.com
josias at wyona.com
Thu Sep 13 16:50:43 CEST 2007
Author: josias
Date: 2007-09-13 16:50:42 +0200 (Thu, 13 Sep 2007)
New Revision: 27334
Added:
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/YanelFilter.java
Modified:
public/yanel/trunk/src/build/dependencies.xml
public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactBean.java
public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java
public/yanel/trunk/src/contributions/resources/resource-creator/src/java/org/wyona/yanel/impl/resources/ResourceCreatorResource.java
public/yanel/trunk/src/realms/yanel-website/src/java/org/wyona/yanel/servlet/menu/impl/YanelWebsiteMenu.java
public/yanel/trunk/src/resources/file/src/build/dependencies.xml
public/yanel/trunk/src/resources/file/src/java/org/wyona/yanel/impl/resources/NodeResource.java
public/yanel/trunk/src/webapp/WEB-INF/web.xml
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/HttpRequest.java
Log:
allow file upload for creation of new file resources, using the apache fileupload library. see bug #5546, thanks to simon
Modified: public/yanel/trunk/src/build/dependencies.xml
===================================================================
--- public/yanel/trunk/src/build/dependencies.xml 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/build/dependencies.xml 2007-09-13 14:50:42 UTC (rev 27334)
@@ -85,6 +85,7 @@
<dependency groupId="commons-jelly" artifactId="commons-jelly" version="1.0"/>
<dependency groupId="commons-jexl" artifactId="commons-jexl" version="1.0"/>
<dependency groupId="commons-beanutils" artifactId="commons-beanutils" version="1.6"/>
+ <dependency groupId="commons-fileupload" artifactId="commons-fileupload" version="1.2"/>
<dependency groupId="dom4j" artifactId="dom4j" version="1.5.2"/>
</artifact:dependencies>
Modified: public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactBean.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactBean.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactBean.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -1,7 +1,6 @@
package org.wyona.yanel.impl.resources;
import javax.servlet.http.HttpServletRequest;
-import org.wyona.yanel.core.util.HttpServletRequestHelper;
public class ContactBean {
String company, lastName, firstName, address, city, email, message;
@@ -28,12 +27,12 @@
return lastName;
}
public ContactBean(HttpServletRequest request) {
- company = HttpServletRequestHelper.getParameter(request, "company");
- firstName = HttpServletRequestHelper.getParameter(request, "firstName");
- lastName = HttpServletRequestHelper.getParameter(request, "lastName");
- address = HttpServletRequestHelper.getParameter(request, "address");
- city = HttpServletRequestHelper.getParameter(request, "zipCity");
- email = HttpServletRequestHelper.getParameter(request, "email");
- message = HttpServletRequestHelper.getParameter(request, "message");
+ company = request.getParameter("company");
+ firstName = request.getParameter("firstName");
+ lastName = request.getParameter("lastName");
+ address = request.getParameter("address");
+ city = request.getParameter("zipCity");
+ email = request.getParameter("email");
+ message = request.getParameter("message");
}
}
Modified: public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/contributions/resources/contact-form/src/java/org/wyona/yanel/impl/resources/ContactResource.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -65,7 +65,7 @@
import org.wyona.yanel.core.transformation.XIncludeTransformer;
import org.wyona.yarep.util.RepoPath;
import org.wyona.yarep.util.YarepUtil;
-import org.wyona.yanel.core.util.HttpServletRequestHelper;import org.wyona.yanel.core.util.PathUtil;
+import org.wyona.yanel.core.util.PathUtil;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
@@ -164,13 +164,13 @@
}
if(submit) {
sendMail(request, transformer);
- transformer.setParameter("company", HttpServletRequestHelper.getParameter(request, "company"));
- transformer.setParameter("firstName", HttpServletRequestHelper.getParameter(request, "firstName"));
- transformer.setParameter("lastName", HttpServletRequestHelper.getParameter(request, "lastName"));
- transformer.setParameter("email", HttpServletRequestHelper.getParameter(request, "email"));
- transformer.setParameter("address", HttpServletRequestHelper.getParameter(request, "address"));
- transformer.setParameter("zipCity", HttpServletRequestHelper.getParameter(request, "zipCity"));
- transformer.setParameter("message", HttpServletRequestHelper.getParameter(request, "message"));
+ transformer.setParameter("company", request.getParameter("company"));
+ transformer.setParameter("firstName", request.getParameter("firstName"));
+ transformer.setParameter("lastName", request.getParameter("lastName"));
+ transformer.setParameter("email", request.getParameter("email"));
+ transformer.setParameter("address", request.getParameter("address"));
+ transformer.setParameter("zipCity", request.getParameter("zipCity"));
+ transformer.setParameter("message", request.getParameter("message"));
}
// create first i18n transformer:
Modified: public/yanel/trunk/src/contributions/resources/resource-creator/src/java/org/wyona/yanel/impl/resources/ResourceCreatorResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/resource-creator/src/java/org/wyona/yanel/impl/resources/ResourceCreatorResource.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/contributions/resources/resource-creator/src/java/org/wyona/yanel/impl/resources/ResourceCreatorResource.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -329,7 +329,7 @@
sb.append("<h4>Create new page (step 2)</h4>");
sb.append("<h2>Enter/Select template (resp. resource) specific parameters and \"Save As\"</h2>");
sb.append("<p>Template (resp. resource type): " + resName + " ("+resNamespace+")</p>");
- sb.append("<form>");
+ sb.append("<form enctype=\"multipart/form-data\" method=\"post\">");
// TODO: Add this parameter to the continuation within the session!
sb.append("<input type=\"hidden\" name=\"resource-type\" value=\"" + rtps + "\"/>");
@@ -464,6 +464,9 @@
} else {
throw new Exception("creation NOT successfull!");
}
+ } else {
+ throw new Exception("creation NOT successful (newResource == null)!");
+
}
return pathOfNewResource;
}
Modified: public/yanel/trunk/src/realms/yanel-website/src/java/org/wyona/yanel/servlet/menu/impl/YanelWebsiteMenu.java
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/src/java/org/wyona/yanel/servlet/menu/impl/YanelWebsiteMenu.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/realms/yanel-website/src/java/org/wyona/yanel/servlet/menu/impl/YanelWebsiteMenu.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -38,7 +38,7 @@
sb.append("<ul><li>");
sb.append("<div id=\"yaneltoolbar_menutitle\">File</div>");
sb.append("<ul>");
- sb.append("<li class=\"haschild\"><a href=\"" + backToRealm + "create-new-page.html\">New   </a><ul><li><a href=\"" + backToRealm + "create-new-page.html?resource-type=http%3A%2F%2Fwww.wyona.org%2Fyanel%2Fresource%2F1.0%3A%3Axml\">Standard page (XHTML)</a></li><li><a href=\"" + backToRealm + "create-new-page.html?resource-type=http%3A%2F%2Fwww.wyona.org%2Fyanel%2Fresource%2F1.0%3A%3Awiki\">Wiki page</a></li></ul></li>");
+ sb.append("<li class=\"haschild\"><a href=\"" + backToRealm + "create-new-page.html\">New   </a><ul><li><a href=\"" + backToRealm + "create-new-page.html?resource-type=http%3A%2F%2Fwww.wyona.org%2Fyanel%2Fresource%2F1.0%3A%3Axml\">Standard page (XHTML)</a></li><li><a href=\"" + backToRealm + "create-new-page.html?resource-type=http%3A%2F%2Fwww.wyona.org%2Fyanel%2Fresource%2F1.0%3A%3Awiki\">Wiki page</a></li><li><a href=\"" + backToRealm + "create-new-page.html?resource-type=http%3A%2F%2Fwww.wyona.org%2Fyanel%2Fresource%2F1.0%3A%3Afile\">File</a></li></ul></li>");
sb.append("<li class=\"haschild\">New language   <ul>");
if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Translatable", "1")) {
Modified: public/yanel/trunk/src/resources/file/src/build/dependencies.xml
===================================================================
--- public/yanel/trunk/src/resources/file/src/build/dependencies.xml 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/resources/file/src/build/dependencies.xml 2007-09-13 14:50:42 UTC (rev 27334)
@@ -12,7 +12,9 @@
<dependency groupId="wyona-org-yanel" artifactId="yanel-core" version="1.0-dev-rREVISION"/>
-->
<dependency groupId="wyona-org-yanel" artifactId="yanel-core" version="${yanel.source.version}"/>
+ <dependency groupId="wyona-org-yanel" artifactId="yanel-webapp" version="${yanel.source.version}"/>
<dependency groupId="javax.servlet" artifactId="servlet-api" version="2.3"/>
+ <dependency groupId="commons-fileupload" artifactId="commons-fileupload" version="1.2"/>
</artifact:dependencies>
<artifact:dependencies pathId="maven2.resource.classpath" filesetId="maven2.resource.fileset">
Modified: public/yanel/trunk/src/resources/file/src/java/org/wyona/yanel/impl/resources/NodeResource.java
===================================================================
--- public/yanel/trunk/src/resources/file/src/java/org/wyona/yanel/impl/resources/NodeResource.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/resources/file/src/java/org/wyona/yanel/impl/resources/NodeResource.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -32,6 +32,7 @@
import org.wyona.yanel.core.util.PathUtil;
import org.wyona.yanel.core.workflow.WorkflowException;
import org.wyona.yanel.core.workflow.WorkflowHelper;
+import org.wyona.yanel.servlet.communication.HttpRequest;
import org.wyona.yarep.core.Node;
import org.wyona.yarep.core.Repository;
@@ -47,16 +48,21 @@
import java.io.Reader;
import java.io.Writer;
import java.util.Date;
+import java.util.Enumeration;
import org.apache.log4j.Category;
+import org.apache.commons.fileupload.util.Streams;
+
/**
* Generic Node Resource
*/
-public class NodeResource extends Resource implements ViewableV2, ModifiableV2, VersionableV2, IntrospectableV1, WorkflowableV1 {
+public class NodeResource extends Resource implements ViewableV2, ModifiableV2, VersionableV2, IntrospectableV1, WorkflowableV1, CreatableV2 {
//public class NodeResource extends Resource implements ViewableV2, ModifiableV2, VersionableV2, CreatableV2 {
private static Category log = Category.getInstance(NodeResource.class);
+
+ private String uploadMimeType;
/**
*
@@ -107,56 +113,7 @@
String suffix = PathUtil.getSuffix(getPath());
if (suffix != null) {
log.debug("SUFFIX: " + suffix);
- if (suffix.equals("html")) {
- mimeType = "text/html";
- } else if (suffix.equals("htm")) {
- mimeType = "text/html";
- } else if (suffix.equals("xhtml")) {
- mimeType = "application/xhtml+xml";
- } else if (suffix.equals("xml")) {
- mimeType = "application/xml";
- } else if (suffix.equals("css")) {
- mimeType = "text/css";
- } else if (suffix.equals("js")) {
- mimeType = "application/x-javascript";
- } else if (suffix.equals("png")) {
- mimeType = "image/png";
- } else if (suffix.equals("jpg")) {
- mimeType = "image/jpeg";
- } else if (suffix.equals("gif")) {
- mimeType = "image/gif";
- } else if (suffix.equals("pdf")) {
- mimeType = "application/pdf";
- } else if (suffix.equals("doc")) {
- mimeType = "application/msword";
- } else if (suffix.equals("odt")) {
- mimeType = "application/vnd.oasis.opendocument.text";
- } else if (suffix.equals("sxc")) {
- mimeType = "application/vnd.sun.xml.calc";
- } else if (suffix.equals("xpi")) {
- mimeType = "application/x-xpinstall";
- } else if (suffix.equals("zip")) {
- mimeType = "application/zip";
- } else if (suffix.equals("jar")) { // http://en.wikipedia.org/wiki/Jar_(file_format)
- mimeType = "application/java-archive";
- } else if (suffix.equals("war")) {
- mimeType = "application/java-archive";
- } else if (suffix.equals("flv")) {
- mimeType = "video/x-flv";
- } else if (suffix.equals("swf")) {
- mimeType = "application/x-shockwave-flash";
- } else if (suffix.equals("txt")) {
- mimeType = "text/plain";
- } else if (suffix.equals("mov")) {
- mimeType = "video/quicktime";
- } else if (suffix.equals("svg")) {
- mimeType = "image/svg+xml";
- } else if (suffix.equals("ico")) {
- mimeType = "image/x-icon";
- } else {
- log.warn("Could not determine mime-type from suffix (suffix: " + suffix + ")!");
- mimeType = "application/octet-stream";
- }
+ mimeType = getMimeTypeBySuffix(suffix);
} else {
log.warn("mime-type will be set to application/octet-stream, because no suffix for " + getPath());
mimeType = "application/octet-stream";
@@ -348,15 +305,60 @@
*
*/
public void create(HttpServletRequest request) {
- log.warn("No implemented yet!");
+ try {
+ Repository repo = getRealm().getRepository();
+
+ if (request instanceof HttpRequest) {
+ HttpRequest yanelRequest = (HttpRequest)request;
+ if (yanelRequest.isMultipartRequest()) {
+ Enumeration parameters = yanelRequest.getFileNames();
+ if (parameters.hasMoreElements()) {
+ String name = (String) parameters.nextElement();
+
+ Node newNode = org.wyona.yanel.core.util.YarepUtil.addNodes(repo, getPath().toString(), org.wyona.yarep.core.NodeType.RESOURCE);
+ OutputStream output = newNode.getOutputStream();
+ InputStream is = yanelRequest.getInputStream(name);
+ Streams.copy(is, output, true);
+ uploadMimeType = yanelRequest.getContentType(name);
+ newNode.setMimeType(uploadMimeType);
+ }
+ } else {
+ log.error("this is NOT a multipart request");
+ }
+ } else {
+ log.error("this is NOT a HttpRequest");
+ }
+
+
+ // TODO: Introspection should not be hardcoded!
+/* String name = new org.wyona.commons.io.Path(getPath()).getName();
+ String parent = new org.wyona.commons.io.Path(getPath()).getParent().toString();
+ String nameWithoutSuffix = name;
+ int lastIndex = name.lastIndexOf(".");
+ if (lastIndex > 0) nameWithoutSuffix = name.substring(0, lastIndex);
+ String introspectionPath = parent + "/introspection-" + nameWithoutSuffix + ".xml";
+
+ org.wyona.yanel.core.util.YarepUtil.addNodes(repo, introspectionPath, org.wyona.yarep.core.NodeType.RESOURCE);
+ writer = new java.io.OutputStreamWriter(repo.getNode(introspectionPath).getOutputStream());
+ writer.write(getIntrospection(name));
+ writer.close();*/
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ }
}
/**
*
*/
public java.util.HashMap createRTIProperties(HttpServletRequest request) {
- log.warn("No implemented yet!");
- return null;
+ java.util.HashMap map = new java.util.HashMap();
+ String mimeType = request.getParameter("rp.mime-type");
+ if (mimeType == null) {
+ mimeType = this.uploadMimeType;
+ }
+ map.put("mime-type", mimeType);
+ map.put("encoding", request.getParameter("rp.encoding"));
+ return map;
}
/**
@@ -393,9 +395,67 @@
return buf.toString();
}
+
/**
*
*/
+ public String getMimeTypeBySuffix(String suffix) {
+ // TODO: use MimeTypeUtil
+ if (suffix.equals("html")) {
+ return "text/html";
+ } else if (suffix.equals("htm")) {
+ return "text/html";
+ } else if (suffix.equals("xhtml")) {
+ return "application/xhtml+xml";
+ } else if (suffix.equals("xml")) {
+ return "application/xml";
+ } else if (suffix.equals("css")) {
+ return "text/css";
+ } else if (suffix.equals("js")) {
+ return "application/x-javascript";
+ } else if (suffix.equals("png")) {
+ return "image/png";
+ } else if (suffix.equals("jpg")) {
+ return "image/jpeg";
+ } else if (suffix.equals("gif")) {
+ return "image/gif";
+ } else if (suffix.equals("pdf")) {
+ return "application/pdf";
+ } else if (suffix.equals("doc")) {
+ return "application/msword";
+ } else if (suffix.equals("odt")) {
+ return "application/vnd.oasis.opendocument.text";
+ } else if (suffix.equals("sxc")) {
+ return "application/vnd.sun.xml.calc";
+ } else if (suffix.equals("xpi")) {
+ return "application/x-xpinstall";
+ } else if (suffix.equals("zip")) {
+ return "application/zip";
+ } else if (suffix.equals("jar")) { // http://en.wikipedia.org/wiki/Jar_(file_format)
+ return "application/java-archive";
+ } else if (suffix.equals("war")) {
+ return "application/java-archive";
+ } else if (suffix.equals("flv")) {
+ return "video/x-flv";
+ } else if (suffix.equals("swf")) {
+ return "application/x-shockwave-flash";
+ } else if (suffix.equals("txt")) {
+ return "text/plain";
+ } else if (suffix.equals("mov")) {
+ return "video/quicktime";
+ } else if (suffix.equals("svg")) {
+ return "image/svg+xml";
+ } else if (suffix.equals("ico")) {
+ return "image/x-icon";
+ } else {
+ log.warn("Could not determine mime-type from suffix (suffix: " + suffix + ")!");
+ return "application/octet-stream";
+ }
+ }
+
+ /**
+ *
+ */
public String getWorkflowIntrospection() throws WorkflowException {
return WorkflowHelper.getWorkflowIntrospection(this);
}
Modified: public/yanel/trunk/src/webapp/WEB-INF/web.xml
===================================================================
--- public/yanel/trunk/src/webapp/WEB-INF/web.xml 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/webapp/WEB-INF/web.xml 2007-09-13 14:50:42 UTC (rev 27334)
@@ -45,4 +45,14 @@
<url-pattern>/servlet/Yanel</url-pattern>
-->
</servlet-mapping>
+
+ <filter>
+ <filter-name>YanelFilter</filter-name>
+ <filter-class>org.wyona.yanel.servlet.communication.YanelFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>YanelFilter</filter-name>
+ <servlet-name>YanelServlet</servlet-name>
+ </filter-mapping>
+
</web-app>
Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -806,7 +806,7 @@
try {
Realm realm = map.getRealm(request.getServletPath());
String path = map.getPath(realm, request.getServletPath());
- HttpRequest httpRequest = new HttpRequest(request);
+ HttpRequest httpRequest = (HttpRequest)request;
HttpResponse httpResponse = new HttpResponse(response);
Resource res = yanel.getResourceManager().getResource(getEnvironment(httpRequest, httpResponse), realm, path);
Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/HttpRequest.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/HttpRequest.java 2007-09-13 14:44:07 UTC (rev 27333)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/HttpRequest.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -16,37 +16,96 @@
package org.wyona.yanel.servlet.communication;
+import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.log4j.Category;
+
/**
* This class wraps a HttpServlerRequest and does parameter decoding.
- *
- * TODO: implement getParameterValues() and getParameterMap()
+ * Further it handles multipart requests for file upload.
*/
public class HttpRequest extends HttpServletRequestWrapper {
+
+ private static Category log = Category.getInstance(HttpRequest.class);
+
public static String form_encoding = "UTF-8";
public static String container_encoding = "ISO-8859-1";
- public HttpRequest(HttpServletRequest request) {
+ protected List items;
+
+
+ public HttpRequest(HttpServletRequest request) throws ServletException {
super(request);
+ if (isMultipartRequest()){
+ try {
+ DiskFileItemFactory factory = new DiskFileItemFactory();
+
+ // Set factory constraints
+ factory.setSizeThreshold(64000);
+ factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
+ //Create a new file upload handler
+ ServletFileUpload upload = new ServletFileUpload(factory);
+
+ //Parse the request
+ items = upload.parseRequest(request);
+
+ } catch (FileUploadException e) {
+ log.error(e.getMessage(), e);
+ throw new ServletException(e.getMessage(), e);
+ }
+ }
}
-
+
+ /**
+ * @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
+ */
public String getParameter(String name) {
String value = super.getParameter(name);
- if (form_encoding == null || container_encoding == null || value == null) {
- return value;
+ if(!isMultipartRequest()) {
+ return fixEncoding(value);
+ } else {
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (item.getFieldName().equals(name) && item.isFormField()) {
+ return item.getString(); // TODO: fix encoding ?
+ }
+ }
+ return null;
}
+ }
+
+ private String fixEncoding(String str) {
+ if (form_encoding == null || container_encoding == null || str == null) {
+ return str;
+ }
// Form and container encoding are equal, skip expensive value decoding
if (container_encoding.equals(form_encoding)) {
- return value;
+ return str;
}
- return decode(value);
+ return decode(str);
}
- private static String decode(String str) {
+ private String decode(String str) {
if (str == null) return null;
try {
if (container_encoding == null)
@@ -57,4 +116,153 @@
throw new RuntimeException("Unsupported Encoding Exception", uee);
}
}
+
+ /**
+ * Not really implemented yet.
+ * @see javax.servlet.ServletRequestWrapper#getParameterMap()
+ */
+ public Map getParameterMap() {
+ if(!isMultipartRequest()) {
+ return super.getParameterMap();
+ } else {
+ Map map = new HashMap();
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (item.isFormField()) {
+ map.put(item.getFieldName(), item.getString()); // TODO: fix encoding
+ // TODO: fix multiple parameters for one name -> create array
+ } else {
+ // TODO
+ }
+ }
+ return map;
+ }
+ }
+
+ /**
+ * @see javax.servlet.ServletRequestWrapper#getParameterNames()
+ */
+ public Enumeration getParameterNames() {
+ if(!isMultipartRequest()) {
+ return super.getParameterNames();
+ } else {
+ // use a set to avoid duplicate entries
+ HashSet set = new HashSet();
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ set.add(item.getFieldName());
+ }
+ return new Vector(set).elements();
+ }
+ }
+
+ /**
+ * @see javax.servlet.ServletRequestWrapper#getParameterValues(java.lang.String)
+ */
+ public String[] getParameterValues(String name) {
+ if(!isMultipartRequest()) {
+ return super.getParameterValues(name);
+ } else {
+ ArrayList values = new ArrayList();
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (item.getFieldName().equals(name)) {
+ values.add(item.getString()); // TODO: fix encoding ?
+ }
+ }
+ return (String[]) values.toArray(new String[values.size()]);
+ }
+ }
+
+ public boolean isMultipartRequest() {
+ return ServletFileUpload.isMultipartContent((HttpServletRequest) this.getRequest());
+ }
+
+ // methods for multipart requests
+
+ /**
+ * Gets the field names of all file upload fields.
+ * @return enumeration of field names
+ */
+ public Enumeration getFileNames() {
+ if(!isMultipartRequest()) {
+ return null;
+ } else {
+ Vector parameterNames = new Vector();
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (!item.isFormField()) {
+ parameterNames.addElement(item.getFieldName());
+ }
+ }
+ return parameterNames.elements();
+ }
+ }
+
+ /**
+ * Gets the filename of the uploaded file on the clients computer.
+ * @param name
+ * @return filename
+ */
+ public String getFilesystemName(String name) {
+ if(!isMultipartRequest()) {
+ return null;
+ } else {
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (item.getFieldName().equals(name)) {
+ return item.getName();
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Gets the content-type of the uploaded file.
+ * @param name
+ * @return content-type
+ */
+ public String getContentType(String name) {
+ if(!isMultipartRequest()) {
+ return null;
+ } else {
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (item.getFieldName().equals(name)) {
+ return item.getContentType();
+ }
+ }
+ return null;
+ }
+
+ }
+
+ /**
+ * Gets an input stream of the uploaded file
+ * @param name
+ * @return input stream
+ * @throws IOException
+ */
+ public InputStream getInputStream(String name) throws IOException {
+ if(!isMultipartRequest()) {
+ return null;
+ } else {
+ Iterator iter = this.items.iterator();
+ while (iter.hasNext()) {
+ FileItem item = (FileItem)iter.next();
+ if (item.getFieldName().equals(name)) {
+ return item.getInputStream();
+ }
+ }
+ return null;
+ }
+ }
}
+
Added: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/YanelFilter.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/YanelFilter.java (rev 0)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/YanelFilter.java 2007-09-13 14:50:42 UTC (rev 27334)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2006 Wyona
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.wyona.org/licenses/APACHE-LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.wyona.yanel.servlet.communication;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+public class YanelFilter implements Filter {
+ private FilterConfig filterConfig;
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+ this.filterConfig = filterConfig;
+ }
+
+ public void destroy() {
+ this.filterConfig = null;
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException {
+ chain.doFilter(new HttpRequest((HttpServletRequest) request), response);
+ }
+}
Property changes on: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/communication/YanelFilter.java
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Yanel-commits
mailing list