You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2006/09/20 19:37:21 UTC
svn commit: r448311 [7/25] - in /incubator/graffito/trunk: ./ api/
api/src/java/org/apache/portals/graffito/context/
api/src/java/org/apache/portals/graffito/exception/
api/src/java/org/apache/portals/graffito/services/core/
api/src/java/org/apache/por...
Modified: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/upload/PortletFileUploadBase.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/upload/PortletFileUploadBase.java?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/upload/PortletFileUploadBase.java (original)
+++ incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/upload/PortletFileUploadBase.java Wed Sep 20 12:37:05 2006
@@ -1,705 +1,705 @@
-/*
- * Copyright 2000-2004 The Apache Software Foundation.
- *
- * 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.apache.org/licenses/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.apache.portals.graffito.portlets.upload;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.portlet.ActionRequest;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileItemFactory;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.MultipartStream;
-
-
-
-/**
- * <p>High level API for processing file uploads.</p>
- *
- * <p>This class handles multiple files per single HTML widget, sent using
- * <code>multipart/mixed</code> encoding type, as specified by
- * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Use {@link
- * #parseRequest(HttpServletRequest)} to acquire a list of {@link
- * org.apache.commons.fileupload.FileItem}s associated with a given HTML
- * widget.</p>
- *
- * <p>How the data for individual parts is stored is determined by the factory
- * used to create them; a given part may be in memory, on disk, or somewhere
- * else.</p>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:martinc@apache.org">Martin Cooper</a>
- * @author <a href="mailto:christophe.lombart@sword-technologies.com">Christophe Lombart</a>
- * @author Sean C. Sullivan
- *
- * @version $Id: Exp $
- */
-public abstract class PortletFileUploadBase
-{
-
-
- /**
- * Utility method that determines whether the request contains multipart
- * content.
- *
- * @param req The servlet request to be evaluated. Must be non-null.
- *
- * @return <code>true</code> if the request is multipart;
- * <code>false</code> otherwise.
- */
- public static final boolean isMultipartContent(ActionRequest req)
- {
- String contentType = req.getContentType();
- if (contentType == null)
- {
- return false;
- }
- if (contentType.startsWith(MULTIPART))
- {
- return true;
- }
- return false;
- }
-
-
- // ----------------------------------------------------- Manifest constants
-
-
- /**
- * HTTP content type header name.
- */
- public static final String CONTENT_TYPE = "Content-type";
-
-
- /**
- * HTTP content disposition header name.
- */
- public static final String CONTENT_DISPOSITION = "Content-disposition";
-
-
- /**
- * Content-disposition value for form data.
- */
- public static final String FORM_DATA = "form-data";
-
-
- /**
- * Content-disposition value for file attachment.
- */
- public static final String ATTACHMENT = "attachment";
-
-
- /**
- * Part of HTTP content type header.
- */
- public static final String MULTIPART = "multipart/";
-
-
- /**
- * HTTP content type header for multipart forms.
- */
- public static final String MULTIPART_FORM_DATA = "multipart/form-data";
-
-
- /**
- * HTTP content type header for multiple uploads.
- */
- public static final String MULTIPART_MIXED = "multipart/mixed";
-
-
- /**
- * The maximum length of a single header line that will be parsed
- * (1024 bytes).
- */
- public static final int MAX_HEADER_SIZE = 1024;
-
-
- // ----------------------------------------------------------- Data members
-
-
- /**
- * The maximum size permitted for an uploaded file. A value of -1 indicates
- * no maximum.
- */
- private long sizeMax = -1;
-
-
- /**
- * The content encoding to use when reading part headers.
- */
- private String headerEncoding;
-
-
- /**
- * FileItem found in the multipart data form
- */
- private List fileItems;
-
- // ----------------------------------------------------- Property accessors
-
-
- /**
- * Returns the factory class used when creating file items.
- *
- * @return The factory class for new file items.
- */
- public abstract FileItemFactory getFileItemFactory();
-
-
- /**
- * Sets the factory class to use when creating file items.
- *
- * @param factory The factory class for new file items.
- */
- public abstract void setFileItemFactory(FileItemFactory factory);
-
-
- /**
- * Returns the maximum allowed upload size.
- *
- * @return The maximum allowed size, in bytes.
- *
- * @see #setSizeMax(long)
- *
- */
- public long getSizeMax()
- {
- return sizeMax;
- }
-
-
- /**
- * Sets the maximum allowed upload size. If negative, there is no maximum.
- *
- * @param sizeMax The maximum allowed size, in bytes, or -1 for no maximum.
- *
- * @see #getSizeMax()
- *
- */
- public void setSizeMax(long sizeMax)
- {
- this.sizeMax = sizeMax;
- }
-
-
- /**
- * Retrieves the character encoding used when reading the headers of an
- * individual part. When not specified, or <code>null</code>, the platform
- * default encoding is used.
- *
- * @return The encoding used to read part headers.
- */
- public String getHeaderEncoding()
- {
- return headerEncoding;
- }
-
-
- /**
- * Specifies the character encoding to be used when reading the headers of
- * individual parts. When not specified, or <code>null</code>, the platform
- * default encoding is used.
- *
- * @param encoding The encoding used to read part headers.
- */
- public void setHeaderEncoding(String encoding)
- {
- headerEncoding = encoding;
- }
-
-
- // --------------------------------------------------------- Public methods
-
-
- /**
- * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
- * compliant <code>multipart/form-data</code> stream. If files are stored
- * on disk, the path is given by <code>getRepository()</code>.
- *
- * @param req The servlet request to be parsed.
- *
- * @return A list of <code>FileItem</code> instances parsed from the
- * request, in the order that they were transmitted.
- *
- * @exception FileUploadException if there are problems reading/parsing
- * the request or storing files.
- */
- public List parseRequest(ActionRequest req) throws FileUploadException
- {
- if (null == req)
- {
- throw new NullPointerException("req parameter");
- }
-
- ArrayList items = new ArrayList();
- String contentType = req.getContentType();
-
- if ((null == contentType) || (!contentType.startsWith(MULTIPART)))
- {
- throw new InvalidContentTypeException(
- "the request doesn't contain a "
- + MULTIPART_FORM_DATA
- + " or "
- + MULTIPART_MIXED
- + " stream, content type header is "
- + contentType);
- }
- int requestSize = req.getContentLength();
-
- if (requestSize == -1)
- {
- throw new UnknownSizeException(
- "the request was rejected because it's size is unknown");
- }
-
- if (sizeMax >= 0 && requestSize > sizeMax)
- {
- throw new SizeLimitExceededException(
- "the request was rejected because "
- + "it's size exceeds allowed range");
- }
-
- try
- {
- int boundaryIndex = contentType.indexOf("boundary=");
- if (boundaryIndex < 0)
- {
- throw new FileUploadException(
- "the request was rejected because "
- + "no multipart boundary was found");
- }
- byte[] boundary = contentType.substring(
- boundaryIndex + 9).getBytes();
-
- InputStream input = req.getPortletInputStream();
-
- MultipartStream multi = new MultipartStream(input, boundary);
- multi.setHeaderEncoding(headerEncoding);
-
- boolean nextPart = multi.skipPreamble();
- while (nextPart)
- {
- Map headers = parseHeaders(multi.readHeaders());
- String fieldName = getFieldName(headers);
- if (fieldName != null)
- {
- String subContentType = getHeader(headers, CONTENT_TYPE);
- if (subContentType != null && subContentType
- .startsWith(MULTIPART_MIXED))
- {
- // Multiple files.
- byte[] subBoundary =
- subContentType.substring(
- subContentType
- .indexOf("boundary=") + 9).getBytes();
- multi.setBoundary(subBoundary);
- boolean nextSubPart = multi.skipPreamble();
- while (nextSubPart)
- {
- headers = parseHeaders(multi.readHeaders());
- if (getFileName(headers) != null)
- {
- FileItem item =
- createItem(headers, false);
- OutputStream os = item.getOutputStream();
- try
- {
- multi.readBodyData(os);
- }
- finally
- {
- os.close();
- }
- items.add(item);
- }
- else
- {
- // Ignore anything but files inside
- // multipart/mixed.
- multi.discardBodyData();
- }
- nextSubPart = multi.readBoundary();
- }
- multi.setBoundary(boundary);
- }
- else
- {
- if (getFileName(headers) != null)
- {
- // A single file.
- FileItem item = createItem(headers, false);
- OutputStream os = item.getOutputStream();
- try
- {
- multi.readBodyData(os);
- }
- finally
- {
- os.close();
- }
- items.add(item);
- }
- else
- {
- // A form field.
- FileItem item = createItem(headers, true);
- OutputStream os = item.getOutputStream();
- try
- {
- multi.readBodyData(os);
- }
- finally
- {
- os.close();
- }
- items.add(item);
- }
- }
- }
- else
- {
- // Skip this part.
- multi.discardBodyData();
- }
- nextPart = multi.readBoundary();
- }
- }
- catch (IOException e)
- {
- throw new FileUploadException(
- "Processing of " + MULTIPART_FORM_DATA
- + " request failed. " + e.getMessage());
- }
-
- return items;
- }
-
-
- /**
- * Check if a field name is defined in the multipart form
- *
- * @param request The portlet request
- * @param fieldName The field name to check
- * @return true if the field name is present
- */
- public boolean hasFieldName(ActionRequest request, String fieldName)
- {
- try
- {
- if (fileItems == null)
- {
- fileItems = this.parseRequest(request);
- }
-
- for (int i = 0; i<fileItems.size(); i++)
- {
- if (((FileItem)fileItems.get(i)).getFieldName().equals(fieldName))
- {
- return true;
- }
- }
- return false;
- }
- catch(Exception e)
- {
- return false;
- }
- }
-
- public FileItem getFileItem(ActionRequest request, String fileItemName) throws FileUploadException
- {
-
- if (fileItems == null)
- {
- fileItems = this.parseRequest(request);
- }
-
- for (int i = 0; i<fileItems.size(); i++)
- {
- FileItem fileItem = (FileItem)fileItems.get(i);
- if (fileItem.getFieldName().equals(fileItemName))
- {
- return fileItem;
- }
- }
-
- return null;
- }
-
- public List getFileItems(ActionRequest request) throws FileUploadException
- {
- if (fileItems == null)
- {
- fileItems = this.parseRequest(request);
- }
- return fileItems;
- }
-
- // ------------------------------------------------------ Protected methods
-
-
- /**
- * Retrieves the file name from the <code>Content-disposition</code>
- * header.
- *
- * @param headers A <code>Map</code> containing the HTTP request headers.
- *
- * @return The file name for the current <code>encapsulation</code>.
- */
- protected String getFileName(Map headers)
- {
- String fileName = null;
- String cd = getHeader(headers, CONTENT_DISPOSITION);
- if (cd.startsWith(FORM_DATA) || cd.startsWith(ATTACHMENT))
- {
- int start = cd.indexOf("filename=\"");
- int end = cd.indexOf('"', start + 10);
- if (start != -1 && end != -1)
- {
- fileName = cd.substring(start + 10, end).trim();
- }
- }
- return fileName;
- }
-
-
- /**
- * Retrieves the field name from the <code>Content-disposition</code>
- * header.
- *
- * @param headers A <code>Map</code> containing the HTTP request headers.
- *
- * @return The field name for the current <code>encapsulation</code>.
- */
- protected String getFieldName(Map headers)
- {
- String fieldName = null;
- String cd = getHeader(headers, CONTENT_DISPOSITION);
- if (cd != null && cd.startsWith(FORM_DATA))
- {
- int start = cd.indexOf("name=\"");
- int end = cd.indexOf('"', start + 6);
- if (start != -1 && end != -1)
- {
- fieldName = cd.substring(start + 6, end);
- }
- }
- return fieldName;
- }
-
-
- /**
- * Creates a new {@link FileItem} instance.
- *
- * @param headers A <code>Map</code> containing the HTTP request
- * headers.
- * @param isFormField Whether or not this item is a form field, as
- * opposed to a file.
- *
- * @return A newly created <code>FileItem</code> instance.
- *
- * @exception FileUploadException if an error occurs.
- */
- protected FileItem createItem(Map headers, boolean isFormField)
- throws FileUploadException
- {
- return getFileItemFactory().createItem(getFieldName(headers),
- getHeader(headers, CONTENT_TYPE),
- isFormField,
- getFileName(headers));
- }
-
-
- /**
- * <p> Parses the <code>header-part</code> and returns as key/value
- * pairs.
- *
- * <p> If there are multiple headers of the same names, the name
- * will map to a comma-separated list containing the values.
- *
- * @param headerPart The <code>header-part</code> of the current
- * <code>encapsulation</code>.
- *
- * @return A <code>Map</code> containing the parsed HTTP request headers.
- */
- protected Map parseHeaders(String headerPart)
- {
- Map headers = new HashMap();
- char buffer[] = new char[MAX_HEADER_SIZE];
- boolean done = false;
- int j = 0;
- int i;
- String header, headerName, headerValue;
- try
- {
- while (!done)
- {
- i = 0;
- // Copy a single line of characters into the buffer,
- // omitting trailing CRLF.
- while (i < 2 || buffer[i - 2] != '\r' || buffer[i - 1] != '\n')
- {
- buffer[i++] = headerPart.charAt(j++);
- }
- header = new String(buffer, 0, i - 2);
- if (header.equals(""))
- {
- done = true;
- }
- else
- {
- if (header.indexOf(':') == -1)
- {
- // This header line is malformed, skip it.
- continue;
- }
- headerName = header.substring(0, header.indexOf(':'))
- .trim().toLowerCase();
- headerValue =
- header.substring(header.indexOf(':') + 1).trim();
- if (getHeader(headers, headerName) != null)
- {
- // More that one heder of that name exists,
- // append to the list.
- headers.put(headerName,
- getHeader(headers, headerName) + ','
- + headerValue);
- }
- else
- {
- headers.put(headerName, headerValue);
- }
- }
- }
- }
- catch (IndexOutOfBoundsException e)
- {
- // Headers were malformed. continue with all that was
- // parsed.
- }
- return headers;
- }
-
-
- /**
- * Returns the header with the specified name from the supplied map. The
- * header lookup is case-insensitive.
- *
- * @param headers A <code>Map</code> containing the HTTP request headers.
- * @param name The name of the header to return.
- *
- * @return The value of specified header, or a comma-separated list if
- * there were multiple headers of that name.
- */
- protected final String getHeader(Map headers,
- String name)
- {
- return (String) headers.get(name.toLowerCase());
- }
-
-
- /**
- * Thrown to indicate that the request is not a multipart request.
- */
- public static class InvalidContentTypeException
- extends FileUploadException
- {
- /**
- * Constructs a <code>InvalidContentTypeException</code> with no
- * detail message.
- */
- public InvalidContentTypeException()
- {
- super();
- }
-
- /**
- * Constructs an <code>InvalidContentTypeException</code> with
- * the specified detail message.
- *
- * @param message The detail message.
- */
- public InvalidContentTypeException(String message)
- {
- super(message);
- }
- }
-
-
- /**
- * Thrown to indicate that the request size is not specified.
- */
- public static class UnknownSizeException
- extends FileUploadException
- {
- /**
- * Constructs a <code>UnknownSizeException</code> with no
- * detail message.
- */
- public UnknownSizeException()
- {
- super();
- }
-
- /**
- * Constructs an <code>UnknownSizeException</code> with
- * the specified detail message.
- *
- * @param message The detail message.
- */
- public UnknownSizeException(String message)
- {
- super(message);
- }
- }
-
-
- /**
- * Thrown to indicate that the request size exceeds the configured maximum.
- */
- public static class SizeLimitExceededException
- extends FileUploadException
- {
- /**
- * Constructs a <code>SizeExceededException</code> with no
- * detail message.
- */
- public SizeLimitExceededException()
- {
- super();
- }
-
- /**
- * Constructs an <code>SizeExceededException</code> with
- * the specified detail message.
- *
- * @param message The detail message.
- */
- public SizeLimitExceededException(String message)
- {
- super(message);
- }
- }
-
-}
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * 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.apache.org/licenses/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.apache.portals.graffito.portlets.upload;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.portlet.ActionRequest;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.MultipartStream;
+
+
+
+/**
+ * <p>High level API for processing file uploads.</p>
+ *
+ * <p>This class handles multiple files per single HTML widget, sent using
+ * <code>multipart/mixed</code> encoding type, as specified by
+ * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Use {@link
+ * #parseRequest(HttpServletRequest)} to acquire a list of {@link
+ * org.apache.commons.fileupload.FileItem}s associated with a given HTML
+ * widget.</p>
+ *
+ * <p>How the data for individual parts is stored is determined by the factory
+ * used to create them; a given part may be in memory, on disk, or somewhere
+ * else.</p>
+ *
+ * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
+ * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
+ * @author <a href="mailto:martinc@apache.org">Martin Cooper</a>
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Christophe Lombart</a>
+ * @author Sean C. Sullivan
+ *
+ * @version $Id: Exp $
+ */
+public abstract class PortletFileUploadBase
+{
+
+
+ /**
+ * Utility method that determines whether the request contains multipart
+ * content.
+ *
+ * @param req The servlet request to be evaluated. Must be non-null.
+ *
+ * @return <code>true</code> if the request is multipart;
+ * <code>false</code> otherwise.
+ */
+ public static final boolean isMultipartContent(ActionRequest req)
+ {
+ String contentType = req.getContentType();
+ if (contentType == null)
+ {
+ return false;
+ }
+ if (contentType.startsWith(MULTIPART))
+ {
+ return true;
+ }
+ return false;
+ }
+
+
+ // ----------------------------------------------------- Manifest constants
+
+
+ /**
+ * HTTP content type header name.
+ */
+ public static final String CONTENT_TYPE = "Content-type";
+
+
+ /**
+ * HTTP content disposition header name.
+ */
+ public static final String CONTENT_DISPOSITION = "Content-disposition";
+
+
+ /**
+ * Content-disposition value for form data.
+ */
+ public static final String FORM_DATA = "form-data";
+
+
+ /**
+ * Content-disposition value for file attachment.
+ */
+ public static final String ATTACHMENT = "attachment";
+
+
+ /**
+ * Part of HTTP content type header.
+ */
+ public static final String MULTIPART = "multipart/";
+
+
+ /**
+ * HTTP content type header for multipart forms.
+ */
+ public static final String MULTIPART_FORM_DATA = "multipart/form-data";
+
+
+ /**
+ * HTTP content type header for multiple uploads.
+ */
+ public static final String MULTIPART_MIXED = "multipart/mixed";
+
+
+ /**
+ * The maximum length of a single header line that will be parsed
+ * (1024 bytes).
+ */
+ public static final int MAX_HEADER_SIZE = 1024;
+
+
+ // ----------------------------------------------------------- Data members
+
+
+ /**
+ * The maximum size permitted for an uploaded file. A value of -1 indicates
+ * no maximum.
+ */
+ private long sizeMax = -1;
+
+
+ /**
+ * The content encoding to use when reading part headers.
+ */
+ private String headerEncoding;
+
+
+ /**
+ * FileItem found in the multipart data form
+ */
+ private List fileItems;
+
+ // ----------------------------------------------------- Property accessors
+
+
+ /**
+ * Returns the factory class used when creating file items.
+ *
+ * @return The factory class for new file items.
+ */
+ public abstract FileItemFactory getFileItemFactory();
+
+
+ /**
+ * Sets the factory class to use when creating file items.
+ *
+ * @param factory The factory class for new file items.
+ */
+ public abstract void setFileItemFactory(FileItemFactory factory);
+
+
+ /**
+ * Returns the maximum allowed upload size.
+ *
+ * @return The maximum allowed size, in bytes.
+ *
+ * @see #setSizeMax(long)
+ *
+ */
+ public long getSizeMax()
+ {
+ return sizeMax;
+ }
+
+
+ /**
+ * Sets the maximum allowed upload size. If negative, there is no maximum.
+ *
+ * @param sizeMax The maximum allowed size, in bytes, or -1 for no maximum.
+ *
+ * @see #getSizeMax()
+ *
+ */
+ public void setSizeMax(long sizeMax)
+ {
+ this.sizeMax = sizeMax;
+ }
+
+
+ /**
+ * Retrieves the character encoding used when reading the headers of an
+ * individual part. When not specified, or <code>null</code>, the platform
+ * default encoding is used.
+ *
+ * @return The encoding used to read part headers.
+ */
+ public String getHeaderEncoding()
+ {
+ return headerEncoding;
+ }
+
+
+ /**
+ * Specifies the character encoding to be used when reading the headers of
+ * individual parts. When not specified, or <code>null</code>, the platform
+ * default encoding is used.
+ *
+ * @param encoding The encoding used to read part headers.
+ */
+ public void setHeaderEncoding(String encoding)
+ {
+ headerEncoding = encoding;
+ }
+
+
+ // --------------------------------------------------------- Public methods
+
+
+ /**
+ * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
+ * compliant <code>multipart/form-data</code> stream. If files are stored
+ * on disk, the path is given by <code>getRepository()</code>.
+ *
+ * @param req The servlet request to be parsed.
+ *
+ * @return A list of <code>FileItem</code> instances parsed from the
+ * request, in the order that they were transmitted.
+ *
+ * @exception FileUploadException if there are problems reading/parsing
+ * the request or storing files.
+ */
+ public List parseRequest(ActionRequest req) throws FileUploadException
+ {
+ if (null == req)
+ {
+ throw new NullPointerException("req parameter");
+ }
+
+ ArrayList items = new ArrayList();
+ String contentType = req.getContentType();
+
+ if ((null == contentType) || (!contentType.startsWith(MULTIPART)))
+ {
+ throw new InvalidContentTypeException(
+ "the request doesn't contain a "
+ + MULTIPART_FORM_DATA
+ + " or "
+ + MULTIPART_MIXED
+ + " stream, content type header is "
+ + contentType);
+ }
+ int requestSize = req.getContentLength();
+
+ if (requestSize == -1)
+ {
+ throw new UnknownSizeException(
+ "the request was rejected because it's size is unknown");
+ }
+
+ if (sizeMax >= 0 && requestSize > sizeMax)
+ {
+ throw new SizeLimitExceededException(
+ "the request was rejected because "
+ + "it's size exceeds allowed range");
+ }
+
+ try
+ {
+ int boundaryIndex = contentType.indexOf("boundary=");
+ if (boundaryIndex < 0)
+ {
+ throw new FileUploadException(
+ "the request was rejected because "
+ + "no multipart boundary was found");
+ }
+ byte[] boundary = contentType.substring(
+ boundaryIndex + 9).getBytes();
+
+ InputStream input = req.getPortletInputStream();
+
+ MultipartStream multi = new MultipartStream(input, boundary);
+ multi.setHeaderEncoding(headerEncoding);
+
+ boolean nextPart = multi.skipPreamble();
+ while (nextPart)
+ {
+ Map headers = parseHeaders(multi.readHeaders());
+ String fieldName = getFieldName(headers);
+ if (fieldName != null)
+ {
+ String subContentType = getHeader(headers, CONTENT_TYPE);
+ if (subContentType != null && subContentType
+ .startsWith(MULTIPART_MIXED))
+ {
+ // Multiple files.
+ byte[] subBoundary =
+ subContentType.substring(
+ subContentType
+ .indexOf("boundary=") + 9).getBytes();
+ multi.setBoundary(subBoundary);
+ boolean nextSubPart = multi.skipPreamble();
+ while (nextSubPart)
+ {
+ headers = parseHeaders(multi.readHeaders());
+ if (getFileName(headers) != null)
+ {
+ FileItem item =
+ createItem(headers, false);
+ OutputStream os = item.getOutputStream();
+ try
+ {
+ multi.readBodyData(os);
+ }
+ finally
+ {
+ os.close();
+ }
+ items.add(item);
+ }
+ else
+ {
+ // Ignore anything but files inside
+ // multipart/mixed.
+ multi.discardBodyData();
+ }
+ nextSubPart = multi.readBoundary();
+ }
+ multi.setBoundary(boundary);
+ }
+ else
+ {
+ if (getFileName(headers) != null)
+ {
+ // A single file.
+ FileItem item = createItem(headers, false);
+ OutputStream os = item.getOutputStream();
+ try
+ {
+ multi.readBodyData(os);
+ }
+ finally
+ {
+ os.close();
+ }
+ items.add(item);
+ }
+ else
+ {
+ // A form field.
+ FileItem item = createItem(headers, true);
+ OutputStream os = item.getOutputStream();
+ try
+ {
+ multi.readBodyData(os);
+ }
+ finally
+ {
+ os.close();
+ }
+ items.add(item);
+ }
+ }
+ }
+ else
+ {
+ // Skip this part.
+ multi.discardBodyData();
+ }
+ nextPart = multi.readBoundary();
+ }
+ }
+ catch (IOException e)
+ {
+ throw new FileUploadException(
+ "Processing of " + MULTIPART_FORM_DATA
+ + " request failed. " + e.getMessage());
+ }
+
+ return items;
+ }
+
+
+ /**
+ * Check if a field name is defined in the multipart form
+ *
+ * @param request The portlet request
+ * @param fieldName The field name to check
+ * @return true if the field name is present
+ */
+ public boolean hasFieldName(ActionRequest request, String fieldName)
+ {
+ try
+ {
+ if (fileItems == null)
+ {
+ fileItems = this.parseRequest(request);
+ }
+
+ for (int i = 0; i<fileItems.size(); i++)
+ {
+ if (((FileItem)fileItems.get(i)).getFieldName().equals(fieldName))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ catch(Exception e)
+ {
+ return false;
+ }
+ }
+
+ public FileItem getFileItem(ActionRequest request, String fileItemName) throws FileUploadException
+ {
+
+ if (fileItems == null)
+ {
+ fileItems = this.parseRequest(request);
+ }
+
+ for (int i = 0; i<fileItems.size(); i++)
+ {
+ FileItem fileItem = (FileItem)fileItems.get(i);
+ if (fileItem.getFieldName().equals(fileItemName))
+ {
+ return fileItem;
+ }
+ }
+
+ return null;
+ }
+
+ public List getFileItems(ActionRequest request) throws FileUploadException
+ {
+ if (fileItems == null)
+ {
+ fileItems = this.parseRequest(request);
+ }
+ return fileItems;
+ }
+
+ // ------------------------------------------------------ Protected methods
+
+
+ /**
+ * Retrieves the file name from the <code>Content-disposition</code>
+ * header.
+ *
+ * @param headers A <code>Map</code> containing the HTTP request headers.
+ *
+ * @return The file name for the current <code>encapsulation</code>.
+ */
+ protected String getFileName(Map headers)
+ {
+ String fileName = null;
+ String cd = getHeader(headers, CONTENT_DISPOSITION);
+ if (cd.startsWith(FORM_DATA) || cd.startsWith(ATTACHMENT))
+ {
+ int start = cd.indexOf("filename=\"");
+ int end = cd.indexOf('"', start + 10);
+ if (start != -1 && end != -1)
+ {
+ fileName = cd.substring(start + 10, end).trim();
+ }
+ }
+ return fileName;
+ }
+
+
+ /**
+ * Retrieves the field name from the <code>Content-disposition</code>
+ * header.
+ *
+ * @param headers A <code>Map</code> containing the HTTP request headers.
+ *
+ * @return The field name for the current <code>encapsulation</code>.
+ */
+ protected String getFieldName(Map headers)
+ {
+ String fieldName = null;
+ String cd = getHeader(headers, CONTENT_DISPOSITION);
+ if (cd != null && cd.startsWith(FORM_DATA))
+ {
+ int start = cd.indexOf("name=\"");
+ int end = cd.indexOf('"', start + 6);
+ if (start != -1 && end != -1)
+ {
+ fieldName = cd.substring(start + 6, end);
+ }
+ }
+ return fieldName;
+ }
+
+
+ /**
+ * Creates a new {@link FileItem} instance.
+ *
+ * @param headers A <code>Map</code> containing the HTTP request
+ * headers.
+ * @param isFormField Whether or not this item is a form field, as
+ * opposed to a file.
+ *
+ * @return A newly created <code>FileItem</code> instance.
+ *
+ * @exception FileUploadException if an error occurs.
+ */
+ protected FileItem createItem(Map headers, boolean isFormField)
+ throws FileUploadException
+ {
+ return getFileItemFactory().createItem(getFieldName(headers),
+ getHeader(headers, CONTENT_TYPE),
+ isFormField,
+ getFileName(headers));
+ }
+
+
+ /**
+ * <p> Parses the <code>header-part</code> and returns as key/value
+ * pairs.
+ *
+ * <p> If there are multiple headers of the same names, the name
+ * will map to a comma-separated list containing the values.
+ *
+ * @param headerPart The <code>header-part</code> of the current
+ * <code>encapsulation</code>.
+ *
+ * @return A <code>Map</code> containing the parsed HTTP request headers.
+ */
+ protected Map parseHeaders(String headerPart)
+ {
+ Map headers = new HashMap();
+ char buffer[] = new char[MAX_HEADER_SIZE];
+ boolean done = false;
+ int j = 0;
+ int i;
+ String header, headerName, headerValue;
+ try
+ {
+ while (!done)
+ {
+ i = 0;
+ // Copy a single line of characters into the buffer,
+ // omitting trailing CRLF.
+ while (i < 2 || buffer[i - 2] != '\r' || buffer[i - 1] != '\n')
+ {
+ buffer[i++] = headerPart.charAt(j++);
+ }
+ header = new String(buffer, 0, i - 2);
+ if (header.equals(""))
+ {
+ done = true;
+ }
+ else
+ {
+ if (header.indexOf(':') == -1)
+ {
+ // This header line is malformed, skip it.
+ continue;
+ }
+ headerName = header.substring(0, header.indexOf(':'))
+ .trim().toLowerCase();
+ headerValue =
+ header.substring(header.indexOf(':') + 1).trim();
+ if (getHeader(headers, headerName) != null)
+ {
+ // More that one heder of that name exists,
+ // append to the list.
+ headers.put(headerName,
+ getHeader(headers, headerName) + ','
+ + headerValue);
+ }
+ else
+ {
+ headers.put(headerName, headerValue);
+ }
+ }
+ }
+ }
+ catch (IndexOutOfBoundsException e)
+ {
+ // Headers were malformed. continue with all that was
+ // parsed.
+ }
+ return headers;
+ }
+
+
+ /**
+ * Returns the header with the specified name from the supplied map. The
+ * header lookup is case-insensitive.
+ *
+ * @param headers A <code>Map</code> containing the HTTP request headers.
+ * @param name The name of the header to return.
+ *
+ * @return The value of specified header, or a comma-separated list if
+ * there were multiple headers of that name.
+ */
+ protected final String getHeader(Map headers,
+ String name)
+ {
+ return (String) headers.get(name.toLowerCase());
+ }
+
+
+ /**
+ * Thrown to indicate that the request is not a multipart request.
+ */
+ public static class InvalidContentTypeException
+ extends FileUploadException
+ {
+ /**
+ * Constructs a <code>InvalidContentTypeException</code> with no
+ * detail message.
+ */
+ public InvalidContentTypeException()
+ {
+ super();
+ }
+
+ /**
+ * Constructs an <code>InvalidContentTypeException</code> with
+ * the specified detail message.
+ *
+ * @param message The detail message.
+ */
+ public InvalidContentTypeException(String message)
+ {
+ super(message);
+ }
+ }
+
+
+ /**
+ * Thrown to indicate that the request size is not specified.
+ */
+ public static class UnknownSizeException
+ extends FileUploadException
+ {
+ /**
+ * Constructs a <code>UnknownSizeException</code> with no
+ * detail message.
+ */
+ public UnknownSizeException()
+ {
+ super();
+ }
+
+ /**
+ * Constructs an <code>UnknownSizeException</code> with
+ * the specified detail message.
+ *
+ * @param message The detail message.
+ */
+ public UnknownSizeException(String message)
+ {
+ super(message);
+ }
+ }
+
+
+ /**
+ * Thrown to indicate that the request size exceeds the configured maximum.
+ */
+ public static class SizeLimitExceededException
+ extends FileUploadException
+ {
+ /**
+ * Constructs a <code>SizeExceededException</code> with no
+ * detail message.
+ */
+ public SizeLimitExceededException()
+ {
+ super();
+ }
+
+ /**
+ * Constructs an <code>SizeExceededException</code> with
+ * the specified detail message.
+ *
+ * @param message The detail message.
+ */
+ public SizeLimitExceededException(String message)
+ {
+ super(message);
+ }
+ }
+
+}
Propchange: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/upload/PortletFileUploadBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ExpressionUtil.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ExpressionUtil.java?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ExpressionUtil.java (original)
+++ incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ExpressionUtil.java Wed Sep 20 12:37:05 2006
@@ -1,60 +1,60 @@
-/*
- * Copyright 2000-2004 The Apache Software Foundation.
- *
- * 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.apache.org/licenses/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.apache.portals.graffito.portlets.util;
-
-import java.util.Enumeration;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.commons.jexl.Expression;
-import org.apache.commons.jexl.ExpressionFactory;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jexl.JexlHelper;
-
-/**
- * Utility class used to execute condition from the portlet page manager
- *
- * @author <a href="mailto:christophe.lombart@gmail.com">Lombart Christophe </a>
- * @version $Id: Exp $
- */
-public class ExpressionUtil
-{
- public static boolean checkCondition(PortletRequest request, String expression)
- {
- try
- {
- Expression e = ExpressionFactory.createExpression( expression );
-
- // Create a context and add the objects
- JexlContext jc = JexlHelper.createContext();
-
- for (Enumeration allContextObjectNames = request.getAttributeNames(); allContextObjectNames.hasMoreElements();)
- {
- String contextObjectName = (String) allContextObjectNames.nextElement();
- jc.getVars().put(contextObjectName, request.getAttribute(contextObjectName) );
- }
-
- // Now evaluate the expression, getting the result
- Object result = e.evaluate(jc);
- return ((Boolean) result).booleanValue();
- }
- catch (Exception e)
- {
- return false;
- }
- }
-
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * 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.apache.org/licenses/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.apache.portals.graffito.portlets.util;
+
+import java.util.Enumeration;
+
+import javax.portlet.PortletRequest;
+
+import org.apache.commons.jexl.Expression;
+import org.apache.commons.jexl.ExpressionFactory;
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.JexlHelper;
+
+/**
+ * Utility class used to execute condition from the portlet page manager
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Lombart Christophe </a>
+ * @version $Id: Exp $
+ */
+public class ExpressionUtil
+{
+ public static boolean checkCondition(PortletRequest request, String expression)
+ {
+ try
+ {
+ Expression e = ExpressionFactory.createExpression( expression );
+
+ // Create a context and add the objects
+ JexlContext jc = JexlHelper.createContext();
+
+ for (Enumeration allContextObjectNames = request.getAttributeNames(); allContextObjectNames.hasMoreElements();)
+ {
+ String contextObjectName = (String) allContextObjectNames.nextElement();
+ jc.getVars().put(contextObjectName, request.getAttribute(contextObjectName) );
+ }
+
+ // Now evaluate the expression, getting the result
+ Object result = e.evaluate(jc);
+ return ((Boolean) result).booleanValue();
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+ }
+
}
Propchange: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ExpressionUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/GraffitoTools.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/GraffitoTools.java?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/GraffitoTools.java (original)
+++ incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/GraffitoTools.java Wed Sep 20 12:37:05 2006
@@ -1,102 +1,102 @@
-/*
- * Copyright 2000-2004 The Apache Software Foundation.
- *
- * 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.apache.org/licenses/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.apache.portals.graffito.portlets.util;
-
-import java.util.ArrayList;
-
-import org.apache.portals.graffito.model.core.CmsObject;
-import org.apache.portals.graffito.model.core.Content;
-import org.apache.portals.graffito.model.core.Folder;
-import org.apache.portals.graffito.model.dm.Document;
-
-/**
- *
- * Velocity tools used in the Graffito velocity templates
- *
- * @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
- * @version $Id: Exp $
- */
-public class GraffitoTools
-{
- private String graffitoViewerServlet;
-
- /**
- * Constructor
- *
- * @param graffitoViewerName The Graffito Viewer Servlet.
- * This servlet reference can be used in the href to display binary documents like PDF, ...
- *
- */
- public GraffitoTools(String graffitoViewerServlet)
- {
- this.graffitoViewerServlet = graffitoViewerServlet;
- }
-
- public Folder[] getParents(CmsObject cmsObject)
- {
- ArrayList parents = new ArrayList();
- Folder parent = cmsObject.getParentFolder();
- while (parent != null)
- {
- parents.add(0,parent);
- parent = parent.getParentFolder();
- }
-
- if (parents.size() == 0)
- {
- return null;
- }
-
- return (Folder[]) parents.toArray(new Folder[parents.size()]);
-
- }
-
- /**
- * This method can be used in a velocity template to check if a content has to be view with the
- * Graffito servlet viewer or not. HTML and text document can be display direclty in the portlet.
- * Other content types (PDF, Open office documents, Ms Word, ...) require the Graffito viewer servlet.
- *
- * @param content the content to check
- * @return true if the Graffito servlet viewer is required
- */
- public boolean requireGraffitoViewer(Content content)
- {
- if (content instanceof Document)
- {
- Document document = (Document) content;
- if (document.getContentType().equals("text/plain") || document.getContentType().equals("text/html"))
- {
- return false;
- }
-
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /**
- *
- * @return The Graffito Viewer Servlet (used for binary documents)
- */
- public String getViewerServlet()
- {
- return graffitoViewerServlet;
- }
-
-}
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * 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.apache.org/licenses/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.apache.portals.graffito.portlets.util;
+
+import java.util.ArrayList;
+
+import org.apache.portals.graffito.model.core.CmsObject;
+import org.apache.portals.graffito.model.core.Content;
+import org.apache.portals.graffito.model.core.Folder;
+import org.apache.portals.graffito.model.dm.Document;
+
+/**
+ *
+ * Velocity tools used in the Graffito velocity templates
+ *
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
+ * @version $Id: Exp $
+ */
+public class GraffitoTools
+{
+ private String graffitoViewerServlet;
+
+ /**
+ * Constructor
+ *
+ * @param graffitoViewerName The Graffito Viewer Servlet.
+ * This servlet reference can be used in the href to display binary documents like PDF, ...
+ *
+ */
+ public GraffitoTools(String graffitoViewerServlet)
+ {
+ this.graffitoViewerServlet = graffitoViewerServlet;
+ }
+
+ public Folder[] getParents(CmsObject cmsObject)
+ {
+ ArrayList parents = new ArrayList();
+ Folder parent = cmsObject.getParentFolder();
+ while (parent != null)
+ {
+ parents.add(0,parent);
+ parent = parent.getParentFolder();
+ }
+
+ if (parents.size() == 0)
+ {
+ return null;
+ }
+
+ return (Folder[]) parents.toArray(new Folder[parents.size()]);
+
+ }
+
+ /**
+ * This method can be used in a velocity template to check if a content has to be view with the
+ * Graffito servlet viewer or not. HTML and text document can be display direclty in the portlet.
+ * Other content types (PDF, Open office documents, Ms Word, ...) require the Graffito viewer servlet.
+ *
+ * @param content the content to check
+ * @return true if the Graffito servlet viewer is required
+ */
+ public boolean requireGraffitoViewer(Content content)
+ {
+ if (content instanceof Document)
+ {
+ Document document = (Document) content;
+ if (document.getContentType().equals("text/plain") || document.getContentType().equals("text/html"))
+ {
+ return false;
+ }
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ *
+ * @return The Graffito Viewer Servlet (used for binary documents)
+ */
+ public String getViewerServlet()
+ {
+ return graffitoViewerServlet;
+ }
+
+}
Propchange: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/GraffitoTools.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ServiceUtil.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ServiceUtil.java?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ServiceUtil.java (original)
+++ incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ServiceUtil.java Wed Sep 20 12:37:05 2006
@@ -1,79 +1,79 @@
-/*
- * Copyright 2000-2004 The Apache Software Foundation.
- *
- * 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.apache.org/licenses/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.apache.portals.graffito.portlets.util;
-
-import org.apache.jetspeed.security.UserManager;
-import org.apache.jetspeed.services.JetspeedPortletServices;
-import org.apache.jetspeed.services.PortletServices;
-import org.apache.portals.graffito.services.core.ContentModelService;
-import org.apache.portals.graffito.services.core.ContentPermissionService;
-import org.apache.portals.graffito.services.core.ContentServerService;
-import org.apache.portals.graffito.services.dm.DocumentModelService;
-
-/**
- * Utility class used to access to Graffito services & parameters
- *
- * @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
- * @version $Id: Exp $
- */
-public class ServiceUtil
-{
- /** Temp folder used to upload documents */
- private static String uploadFolder;
-
- public static ContentModelService getModelService()
- {
- PortletServices services = JetspeedPortletServices.getSingleton();
- return (ContentModelService) services.getService("ContentModel");
- }
-
- public static DocumentModelService getDocumentService()
- {
- PortletServices services = JetspeedPortletServices.getSingleton();
- return (DocumentModelService) services.getService("DocumentModel");
- }
-
- public static ContentServerService getServerService()
- {
- PortletServices services = JetspeedPortletServices.getSingleton();
- return (ContentServerService) services.getService("ContentServer");
- }
-
- public static ContentPermissionService getPermissionService()
- {
- PortletServices services = JetspeedPortletServices.getSingleton();
- return (ContentPermissionService) services.getService("PermissionManager");
- }
-
- public static UserManager getUserService()
- {
- PortletServices services = JetspeedPortletServices.getSingleton();
- return (UserManager) services.getService("UserManager");
- }
-
- public static String getUploadFolder()
- {
- return uploadFolder;
- }
-
- public static void setUploadFolder(String uploadFolder)
- {
- ServiceUtil.uploadFolder = uploadFolder;
- }
-
-
-
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * 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.apache.org/licenses/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.apache.portals.graffito.portlets.util;
+
+import org.apache.jetspeed.security.UserManager;
+import org.apache.jetspeed.services.JetspeedPortletServices;
+import org.apache.jetspeed.services.PortletServices;
+import org.apache.portals.graffito.services.core.ContentModelService;
+import org.apache.portals.graffito.services.core.ContentPermissionService;
+import org.apache.portals.graffito.services.core.ContentServerService;
+import org.apache.portals.graffito.services.dm.DocumentModelService;
+
+/**
+ * Utility class used to access to Graffito services & parameters
+ *
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
+ * @version $Id: Exp $
+ */
+public class ServiceUtil
+{
+ /** Temp folder used to upload documents */
+ private static String uploadFolder;
+
+ public static ContentModelService getModelService()
+ {
+ PortletServices services = JetspeedPortletServices.getSingleton();
+ return (ContentModelService) services.getService("ContentModel");
+ }
+
+ public static DocumentModelService getDocumentService()
+ {
+ PortletServices services = JetspeedPortletServices.getSingleton();
+ return (DocumentModelService) services.getService("DocumentModel");
+ }
+
+ public static ContentServerService getServerService()
+ {
+ PortletServices services = JetspeedPortletServices.getSingleton();
+ return (ContentServerService) services.getService("ContentServer");
+ }
+
+ public static ContentPermissionService getPermissionService()
+ {
+ PortletServices services = JetspeedPortletServices.getSingleton();
+ return (ContentPermissionService) services.getService("PermissionManager");
+ }
+
+ public static UserManager getUserService()
+ {
+ PortletServices services = JetspeedPortletServices.getSingleton();
+ return (UserManager) services.getService("UserManager");
+ }
+
+ public static String getUploadFolder()
+ {
+ return uploadFolder;
+ }
+
+ public static void setUploadFolder(String uploadFolder)
+ {
+ ServiceUtil.uploadFolder = uploadFolder;
+ }
+
+
+
}
Propchange: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/portlets/util/ServiceUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/servlets/GraffitoViewerServlet.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/servlets/GraffitoViewerServlet.java?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/servlets/GraffitoViewerServlet.java (original)
+++ incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/servlets/GraffitoViewerServlet.java Wed Sep 20 12:37:05 2006
@@ -1,115 +1,115 @@
-/*
- * Copyright 2000-2004 The Apache Software Foundation.
- *
- * 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.apache.org/licenses/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.apache.portals.graffito.servlets;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.portals.graffito.exception.ContentManagementException;
-import org.apache.portals.graffito.model.dm.Document;
-import org.apache.portals.graffito.portlets.util.ServiceUtil;
-import org.apache.portals.graffito.services.core.ContentModelService;
-import org.apache.portals.graffito.services.dm.DocumentModelService;
-
-
-
-
-/**
- * This servlet can be used to display a document stream like a word document, images, pdf, ....
- *
- * @author <a href="mailto:christophe.lombart@sword-technologies.com">Christophe Lombart</a>
- * @version $Id: Exp $
- */
-public class GraffitoViewerServlet extends HttpServlet
-{
- /** URI REQUEST PARAM */
- private static final String URI_PARAM = "uri";
-
- static final int BLOCK_SIZE=4096;
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
-
-
- DocumentModelService modelService = ServiceUtil.getDocumentService();
- if (null == modelService)
- {
- throw new ServletException("Failed to find the content model service");
- }
-
- String uri = request.getParameter(URI_PARAM);
- try
- {
- Document document = modelService.getDocument(uri);
- if (document!=null)
- {
- response.setContentType(document.getContentType());
- InputStream documentStream = document.getDocumentStream().getContentStream();
- drain(documentStream, response.getOutputStream());
- documentStream.close();
- }
- else
- {
- response.setContentType("text/html");
- InputStream documentStream = new ByteArrayInputStream(new String(" ").getBytes());
- drain(documentStream, response.getOutputStream());
- documentStream.close();
- }
-
- }
- catch (ContentManagementException e)
- {
- throw new ServletException("Failed to retrieve the document : " + uri);
- }
- }
-
- /**
- *
- * @param r
- * @param w
- * @throws IOException
- */
- public static void drain(InputStream r,OutputStream w) throws IOException
- {
- byte[] bytes=new byte[BLOCK_SIZE];
- try
- {
- int length=r.read(bytes);
- while(length!=-1)
- {
- if(length!=0)
- {
- w.write(bytes,0,length);
- }
- length=r.read(bytes);
- }
- }
- finally
- {
- bytes=null;
- }
-
- }
-
-
-}
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * 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.apache.org/licenses/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.apache.portals.graffito.servlets;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.portals.graffito.exception.ContentManagementException;
+import org.apache.portals.graffito.model.dm.Document;
+import org.apache.portals.graffito.portlets.util.ServiceUtil;
+import org.apache.portals.graffito.services.core.ContentModelService;
+import org.apache.portals.graffito.services.dm.DocumentModelService;
+
+
+
+
+/**
+ * This servlet can be used to display a document stream like a word document, images, pdf, ....
+ *
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Christophe Lombart</a>
+ * @version $Id: Exp $
+ */
+public class GraffitoViewerServlet extends HttpServlet
+{
+ /** URI REQUEST PARAM */
+ private static final String URI_PARAM = "uri";
+
+ static final int BLOCK_SIZE=4096;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+ {
+
+
+ DocumentModelService modelService = ServiceUtil.getDocumentService();
+ if (null == modelService)
+ {
+ throw new ServletException("Failed to find the content model service");
+ }
+
+ String uri = request.getParameter(URI_PARAM);
+ try
+ {
+ Document document = modelService.getDocument(uri);
+ if (document!=null)
+ {
+ response.setContentType(document.getContentType());
+ InputStream documentStream = document.getDocumentStream().getContentStream();
+ drain(documentStream, response.getOutputStream());
+ documentStream.close();
+ }
+ else
+ {
+ response.setContentType("text/html");
+ InputStream documentStream = new ByteArrayInputStream(new String(" ").getBytes());
+ drain(documentStream, response.getOutputStream());
+ documentStream.close();
+ }
+
+ }
+ catch (ContentManagementException e)
+ {
+ throw new ServletException("Failed to retrieve the document : " + uri);
+ }
+ }
+
+ /**
+ *
+ * @param r
+ * @param w
+ * @throws IOException
+ */
+ public static void drain(InputStream r,OutputStream w) throws IOException
+ {
+ byte[] bytes=new byte[BLOCK_SIZE];
+ try
+ {
+ int length=r.read(bytes);
+ while(length!=-1)
+ {
+ if(length!=0)
+ {
+ w.write(bytes,0,length);
+ }
+ length=r.read(bytes);
+ }
+ }
+ finally
+ {
+ bytes=null;
+ }
+
+ }
+
+
+}
Propchange: incubator/graffito/trunk/applications/framework-portlets/src/java/org/apache/portals/graffito/servlets/GraffitoViewerServlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/graffito/trunk/applications/framework-portlets/src/test/org/apache/portals/graffito/portlets/page/manager/TestPortletPage.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/graffito/trunk/applications/framework-portlets/test/pages.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/framework-portlets/test/pages.xml?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/applications/framework-portlets/test/pages.xml (original)
+++ incubator/graffito/trunk/applications/framework-portlets/test/pages.xml Wed Sep 20 12:37:05 2006
@@ -1,78 +1,78 @@
-<pages>
- <actions>
- <action id="cmsobject" class="org.apache.portals.graffito.portlets.browser.actions.CmsObjectAction" />
- <action id="folder" class="org.apache.portals.graffito.portlets.browser.actions.FolderAction" />
- <action id="document" class="org.apache.portals.graffito.portlets.browser.actions.DocumentAction" />
- <action id="permission" class="org.apache.portals.graffito.portlets.browser.actions.PermissionAction" />
- <action id="forward" class="org.apache.portals.graffito.portlets.browser.actions.ForwardAction" forward = "true" />
- </actions>
-
- <view>
- <page id = "folderViewer" action="folder.retrieve" template="/WEB-INF/view/folder/folder-browser.vm" defaultPage="true" />
- <page id = "documentHtmlTextViewer" action="document.retrieve"
- template="/WEB-INF/view/document/document-view-text-html.vm">
- <editpage portletPageId="documentEdit" />
- </page>
- <page id = "documentUploadViewer" action="document.retrieve" template="/WEB-INF/view/document/document-view-upload.vm">
- <editpage portletPageId="documentEdit" />
- </page>
- </view>
-
- <edit>
- <page id = "folderEdit" template="/WEB-INF/view/folder/folder-tab.vm" defaultPage="true">
- <tab id="folder-edit">
- <page id="metadata" label="tab.folder-edit.metadata" template="/WEB-INF/view/folder/folder-metadata.vm" action =
- "folder.retrieve" defaultTabPage="true" />
- <page id="children" label="tab.folder-edit.children" template="/WEB-INF/view/folder/folder-children.vm" action =
- "folder.retrieve" />
- <page id="security" label="tab.security" template="/WEB-INF/view/security/security-browser.vm" action
- ="permission.retrieve" />
- </tab>
- </page>
-
- <page id = "folderCreate" action="folder.create" template="/WEB-INF/view/folder/folder-metadata.vm" >
- <viewpage portletPageId="folderViewer" />
- </page>
-
- <page id = "documentEdit" template="/WEB-INF/view/document/document-tab.vm" action="document.retrieve" >
- <tab id="document-edit">
- <page id="metadata" label="tab.document-edit.metadata"
- template= "/WEB-INF/view/document/document-edit-metadata.vm" action="document.retrieve"
- defaultTabPage="true" />
- <page id="content-text" label="tab.document-edit.content" template="/WEB-INF/view/document/document-edit-text.vm"
- condition="documentDTO.isText()"
- action="document.retrieve" />
- <page id="content-html" label="tab.document-edit.content" template="/kupu/kupu.vm"
- condition="documentDTO.isHTML()"
- action="document.retrieve" />
- <page id="content-upload" label="tab.document-edit.content" template="/WEB-INF/view/document/document-edit-upload.vm"
- condition="documentDTO.isBinary()"
- action="document.retrieve" />
-
- <page id="security" label="tab.security" template= "/WEB-INF/view/security/security-browser.vm"
- action="permission.retrieve" />
- </tab>
-
- <!-- Order is important for the view page reference :
- the engine will the select the first viewpage which has a condition returning true -->
- <viewpage condition=" (! documentDTO.isBinary())" portletPageId="documentHtmlTextViewer" />
- <viewpage portletPageId="documentUploadViewer" />
- </page>
-
- <page id = "documentCreate" action="document.createWizard" template="/WEB-INF/view/document/document-edit-metadata.vm" />
-
- <page id = "textEdit" action="document.createWizard" template="/WEB-INF/view/document/document-edit-text.vm" >
- <viewpage portletPageId="documentHtmlTextViewer" />
- </page>
-
- <page id = "htmlEdit" action="document.createWizard" template="/kupu/kupu.vm" >
- <viewpage portletPageId="documentHtmlTextViewer" />
- </page>
-
- <page id = "uploadEdit" action="document.createWizard" template="/WEB-INF/view/document/document-edit-upload.vm" >
- <viewpage portletPageId="documentUploadViewer" />
- </page>
-
- <page id = "permissionCreate" action="permission.create" template="/WEB-INF/view/security/security-permission.vm" />
- </edit>
+<pages>
+ <actions>
+ <action id="cmsobject" class="org.apache.portals.graffito.portlets.browser.actions.CmsObjectAction" />
+ <action id="folder" class="org.apache.portals.graffito.portlets.browser.actions.FolderAction" />
+ <action id="document" class="org.apache.portals.graffito.portlets.browser.actions.DocumentAction" />
+ <action id="permission" class="org.apache.portals.graffito.portlets.browser.actions.PermissionAction" />
+ <action id="forward" class="org.apache.portals.graffito.portlets.browser.actions.ForwardAction" forward = "true" />
+ </actions>
+
+ <view>
+ <page id = "folderViewer" action="folder.retrieve" template="/WEB-INF/view/folder/folder-browser.vm" defaultPage="true" />
+ <page id = "documentHtmlTextViewer" action="document.retrieve"
+ template="/WEB-INF/view/document/document-view-text-html.vm">
+ <editpage portletPageId="documentEdit" />
+ </page>
+ <page id = "documentUploadViewer" action="document.retrieve" template="/WEB-INF/view/document/document-view-upload.vm">
+ <editpage portletPageId="documentEdit" />
+ </page>
+ </view>
+
+ <edit>
+ <page id = "folderEdit" template="/WEB-INF/view/folder/folder-tab.vm" defaultPage="true">
+ <tab id="folder-edit">
+ <page id="metadata" label="tab.folder-edit.metadata" template="/WEB-INF/view/folder/folder-metadata.vm" action =
+ "folder.retrieve" defaultTabPage="true" />
+ <page id="children" label="tab.folder-edit.children" template="/WEB-INF/view/folder/folder-children.vm" action =
+ "folder.retrieve" />
+ <page id="security" label="tab.security" template="/WEB-INF/view/security/security-browser.vm" action
+ ="permission.retrieve" />
+ </tab>
+ </page>
+
+ <page id = "folderCreate" action="folder.create" template="/WEB-INF/view/folder/folder-metadata.vm" >
+ <viewpage portletPageId="folderViewer" />
+ </page>
+
+ <page id = "documentEdit" template="/WEB-INF/view/document/document-tab.vm" action="document.retrieve" >
+ <tab id="document-edit">
+ <page id="metadata" label="tab.document-edit.metadata"
+ template= "/WEB-INF/view/document/document-edit-metadata.vm" action="document.retrieve"
+ defaultTabPage="true" />
+ <page id="content-text" label="tab.document-edit.content" template="/WEB-INF/view/document/document-edit-text.vm"
+ condition="documentDTO.isText()"
+ action="document.retrieve" />
+ <page id="content-html" label="tab.document-edit.content" template="/kupu/kupu.vm"
+ condition="documentDTO.isHTML()"
+ action="document.retrieve" />
+ <page id="content-upload" label="tab.document-edit.content" template="/WEB-INF/view/document/document-edit-upload.vm"
+ condition="documentDTO.isBinary()"
+ action="document.retrieve" />
+
+ <page id="security" label="tab.security" template= "/WEB-INF/view/security/security-browser.vm"
+ action="permission.retrieve" />
+ </tab>
+
+ <!-- Order is important for the view page reference :
+ the engine will the select the first viewpage which has a condition returning true -->
+ <viewpage condition=" (! documentDTO.isBinary())" portletPageId="documentHtmlTextViewer" />
+ <viewpage portletPageId="documentUploadViewer" />
+ </page>
+
+ <page id = "documentCreate" action="document.createWizard" template="/WEB-INF/view/document/document-edit-metadata.vm" />
+
+ <page id = "textEdit" action="document.createWizard" template="/WEB-INF/view/document/document-edit-text.vm" >
+ <viewpage portletPageId="documentHtmlTextViewer" />
+ </page>
+
+ <page id = "htmlEdit" action="document.createWizard" template="/kupu/kupu.vm" >
+ <viewpage portletPageId="documentHtmlTextViewer" />
+ </page>
+
+ <page id = "uploadEdit" action="document.createWizard" template="/WEB-INF/view/document/document-edit-upload.vm" >
+ <viewpage portletPageId="documentUploadViewer" />
+ </page>
+
+ <page id = "permissionCreate" action="permission.create" template="/WEB-INF/view/security/security-permission.vm" />
+ </edit>
</pages>
Propchange: incubator/graffito/trunk/applications/framework-portlets/test/pages.xml
------------------------------------------------------------------------------
svn:eol-style = native