You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2013/05/12 15:14:15 UTC
svn commit: r1481551 - in /chemistry/opencmis/trunk:
chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/
chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apach...
Author: fmui
Date: Sun May 12 13:14:14 2013
New Revision: 1481551
URL: http://svn.apache.org/r1481551
Log:
a few internal improvements
Added:
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java?rev=1481551&r1=1481550&r2=1481551&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java Sun May 12 13:14:14 2013
@@ -21,9 +21,9 @@ package org.apache.chemistry.opencmis.cl
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.EnumMap;
import java.util.EnumSet;
import java.util.GregorianCalendar;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -98,7 +98,7 @@ public abstract class AbstractCmisObject
this.session = session;
this.objectType = objectType;
this.secondaryTypes = null;
- this.extensions = new HashMap<ExtensionLevel, List<CmisExtensionElement>>();
+ this.extensions = new EnumMap<ExtensionLevel, List<CmisExtensionElement>>(ExtensionLevel.class);
this.creationContext = new OperationContextImpl(context);
this.refreshTimestamp = System.currentTimeMillis();
Added: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java?rev=1481551&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/CmisEnumHelper.java Sun May 12 13:14:14 2013
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.chemistry.opencmis.commons.impl;
+
+import java.math.BigInteger;
+
+import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
+import org.apache.chemistry.opencmis.commons.enums.Action;
+import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
+import org.apache.chemistry.opencmis.commons.enums.Cardinality;
+import org.apache.chemistry.opencmis.commons.enums.ChangeType;
+import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
+import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
+import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
+import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
+import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
+import org.apache.chemistry.opencmis.commons.enums.PropertyType;
+import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
+import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions;
+import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
+import org.apache.chemistry.opencmis.commons.enums.Updatability;
+import org.apache.chemistry.opencmis.commons.enums.VersioningState;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+
+/**
+ * Helper methods to turn a value into a CMIS enum.
+ */
+public class CmisEnumHelper {
+
+ @SuppressWarnings("unchecked")
+ public static <E extends Enum<E>> E fromValue(final String value, final Class<E> clazz) {
+ if (value == null || value.length() == 0) {
+ return null;
+ }
+
+ try {
+ if (Action.class == clazz) {
+ return (E) Action.fromValue(value);
+ } else if (BaseTypeId.class == clazz) {
+ return (E) BaseTypeId.fromValue(value);
+ } else if (CmisVersion.class == clazz) {
+ return (E) CmisVersion.fromValue(value);
+ } else if (IncludeRelationships.class == clazz) {
+ return (E) IncludeRelationships.fromValue(value);
+ } else if (ReturnVersion.class == clazz) {
+ return (E) ReturnVersion.fromValue(value);
+ } else if (VersioningState.class == clazz) {
+ return (E) VersioningState.fromValue(value);
+ } else if (RelationshipDirection.class == clazz) {
+ return (E) RelationshipDirection.fromValue(value);
+ } else if (AclPropagation.class == clazz) {
+ return (E) AclPropagation.fromValue(value);
+ } else if (UnfileObject.class == clazz) {
+ return (E) UnfileObject.fromValue(value);
+ } else if (PropertyType.class == clazz) {
+ return (E) PropertyType.fromValue(value);
+ } else if (Cardinality.class == clazz) {
+ return (E) Cardinality.fromValue(value);
+ } else if (Updatability.class == clazz) {
+ return (E) Updatability.fromValue(value);
+ } else if (ContentStreamAllowed.class == clazz) {
+ return (E) ContentStreamAllowed.fromValue(value);
+ } else if (DateTimeResolution.class == clazz) {
+ return (E) DateTimeResolution.fromValue(value);
+ } else if (ChangeType.class == clazz) {
+ return (E) ChangeType.fromValue(value);
+ } else if (SupportedPermissions.class == clazz) {
+ return (E) SupportedPermissions.fromValue(value);
+ } else if (CapabilityAcl.class == clazz) {
+ return (E) CapabilityAcl.fromValue(value);
+ } else if (CapabilityChanges.class == clazz) {
+ return (E) CapabilityChanges.fromValue(value);
+ } else if (CapabilityContentStreamUpdates.class == clazz) {
+ return (E) CapabilityContentStreamUpdates.fromValue(value);
+ } else if (CapabilityJoin.class == clazz) {
+ return (E) CapabilityJoin.fromValue(value);
+ } else if (CapabilityOrderBy.class == clazz) {
+ return (E) CapabilityOrderBy.fromValue(value);
+ } else if (CapabilityQuery.class == clazz) {
+ return (E) CapabilityQuery.fromValue(value);
+ } else if (CapabilityRenditions.class == clazz) {
+ return (E) CapabilityRenditions.fromValue(value);
+ }
+ } catch (IllegalArgumentException e) {
+ throw new CmisInvalidArgumentException("Invalid enum value '" + value + "'!");
+ }
+
+ throw new CmisRuntimeException(clazz.getSimpleName() + " is not a CMIS enum!");
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <E extends Enum<E>> E fromValue(final BigInteger value, final Class<E> clazz) {
+ if (value == null) {
+ return null;
+ }
+
+ try {
+ if (DecimalPrecision.class == clazz) {
+ return (E) DecimalPrecision.fromValue(value);
+ }
+ } catch (IllegalArgumentException e) {
+ throw new CmisInvalidArgumentException("Invalid enum value '" + value + "'!");
+ }
+
+ throw new CmisRuntimeException(clazz.getSimpleName() + " is not a CMIS enum!");
+ }
+}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java?rev=1481551&r1=1481550&r2=1481551&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/JSONConverter.java Sun May 12 13:14:14 2013
@@ -2918,42 +2918,12 @@ public final class JSONConverter {
return null;
}
- @SuppressWarnings("unchecked")
public static <T extends Enum<T>> T getEnum(final Map<String, Object> json, final String key, final Class<T> clazz) {
- String value = getString(json, key);
- if (value == null) {
- return null;
- }
-
- try {
- Method m = clazz.getMethod("fromValue", String.class);
- return (T) m.invoke(null, value);
- } catch (Exception e) {
- if (e instanceof IllegalArgumentException) {
- return null;
- } else {
- throw new CmisRuntimeException("Could not parse enum value!", e);
- }
- }
+ return CmisEnumHelper.fromValue(getString(json, key), clazz);
}
- @SuppressWarnings("unchecked")
public static <T extends Enum<T>> T getIntEnum(final Map<String, Object> json, final String key,
final Class<T> clazz) {
- BigInteger value = getInteger(json, key);
- if (value == null) {
- return null;
- }
-
- try {
- Method m = clazz.getMethod("fromValue", BigInteger.class);
- return (T) m.invoke(null, value);
- } catch (Exception e) {
- if (e instanceof IllegalArgumentException) {
- return null;
- } else {
- throw new CmisRuntimeException("Could not parse enum value!", e);
- }
- }
+ return CmisEnumHelper.fromValue(getInteger(json, key), clazz);
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java?rev=1481551&r1=1481550&r2=1481551&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/XMLWalker.java Sun May 12 13:14:14 2013
@@ -21,7 +21,6 @@ package org.apache.chemistry.opencmis.co
import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.next;
import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.skip;
-import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
@@ -230,23 +229,8 @@ public abstract class XMLWalker<T> {
return result;
}
- @SuppressWarnings("unchecked")
public <E extends Enum<E>> E readEnum(final XMLStreamReader parser, final Class<E> clazz) throws XMLStreamException {
- String value = readText(parser);
- if (value == null) {
- return null;
- }
-
- try {
- Method m = clazz.getMethod("fromValue", String.class);
- return (E) m.invoke(null, value);
- } catch (Exception e) {
- if (e instanceof IllegalArgumentException) {
- return null;
- } else {
- throw new CmisInvalidArgumentException("Invalid enum value!", e);
- }
- }
+ return CmisEnumHelper.fromValue(readText(parser), clazz);
}
protected abstract T prepareTarget(XMLStreamReader parser, QName name) throws XMLStreamException;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java?rev=1481551&r1=1481550&r2=1481551&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/MultiFilingService.java Sun May 12 13:14:14 2013
@@ -21,6 +21,7 @@ package org.apache.chemistry.opencmis.se
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
@@ -101,8 +102,14 @@ public class MultiFilingService {
VersioningState.class);
// create
- String newObjectId = service.create(repositoryId, parser.getProperties(), null, parser.getContentStream(),
- versioningState, parser.getPolicyIds(), null);
+ ContentStream contentStream = parser.getContentStream();
+ String newObjectId = null;
+ try {
+ newObjectId = service.create(repositoryId, parser.getProperties(), null, contentStream,
+ versioningState, parser.getPolicyIds(), null);
+ } finally {
+ closeContentStream(contentStream);
+ }
ObjectInfo objectInfo = service.getObjectInfo(repositoryId, newObjectId);
if (objectInfo == null) {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java?rev=1481551&r1=1481550&r2=1481551&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/browser/MultipartParser.java Sun May 12 13:14:14 2013
@@ -30,7 +30,9 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.chemistry.opencmis.commons.impl.Constants;
import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
import org.apache.chemistry.opencmis.server.shared.ThresholdOutputStream;
@@ -47,7 +49,7 @@ public class MultipartParser {
private static final String CHARSET_FIELD = "_charset_";
private static final int MAX_FIELD_BYTES = 10 * 1024 * 1024;
- private static final int BUFFER_SIZE = 64 * 1024;
+ private static final int BUFFER_SIZE = 128 * 1024;
private static final byte CR = 0x0D;
private static final byte LF = 0x0A;
@@ -503,9 +505,15 @@ public class MultipartParser {
private void skipEpilogue() {
try {
- // read to the end of stream
+ // read to the end of stream, but max 1 MB
+ int count = 0;
byte[] tmpBuf = new byte[4096];
- while (requestStream.read(tmpBuf) > -1) {
+ int b;
+ while ((b = requestStream.read(tmpBuf)) > -1) {
+ count += b;
+ if (count >= 1024 * 1024) {
+ break;
+ }
}
} catch (IOException e) {
// ignore
@@ -565,7 +573,7 @@ public class MultipartParser {
fields.put(e.getKey(), values);
}
- } catch (UnsupportedEncodingException uee) {
+ } catch (Exception e) {
if (contentStream != null) {
try {
contentStream.close();
@@ -578,7 +586,15 @@ public class MultipartParser {
fields = null;
- throw new CmisInvalidArgumentException("Encoding not supported!");
+ if (e instanceof UnsupportedEncodingException) {
+ throw new CmisInvalidArgumentException("Encoding not supported!");
+ } else if (e instanceof CmisBaseException) {
+ throw (CmisBaseException) e;
+ } else if (e instanceof IOException) {
+ throw (IOException) e;
+ } else {
+ throw new CmisRuntimeException(e.getMessage(), e);
+ }
} finally {
rawFields = null;
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java?rev=1481551&r1=1481550&r2=1481551&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/shared/AbstractServiceCall.java Sun May 12 13:14:14 2013
@@ -19,8 +19,6 @@
package org.apache.chemistry.opencmis.server.shared;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.math.BigInteger;
import java.util.Date;
import java.util.GregorianCalendar;
@@ -33,7 +31,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.LastModifiedContentStream;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.chemistry.opencmis.commons.impl.CmisEnumHelper;
import org.apache.chemistry.opencmis.commons.impl.DateTimeHelper;
public abstract class AbstractServiceCall implements ServiceCall {
@@ -100,23 +98,8 @@ public abstract class AbstractServiceCal
/**
* Extracts an enum parameter.
*/
- @SuppressWarnings("unchecked")
- public <T> T getEnumParameter(HttpServletRequest request, String name, Class<T> clazz) {
- String value = getStringParameter(request, name);
- if ((value == null) || (value.length() == 0)) {
- return null;
- }
-
- try {
- Method m = clazz.getMethod("fromValue", new Class[] { String.class });
- return (T) m.invoke(null, new Object[] { value });
- } catch (Exception e) {
- if (e instanceof InvocationTargetException && e.getCause() instanceof IllegalArgumentException) {
- throw new CmisInvalidArgumentException("Invalid parameter '" + name + "'!");
- }
-
- throw new CmisRuntimeException(e.getMessage(), e);
- }
+ public <T extends Enum<T>> T getEnumParameter(HttpServletRequest request, String name, Class<T> clazz) {
+ return CmisEnumHelper.fromValue(getStringParameter(request, name), clazz);
}
/**