diff --git a/source/java/org/alfresco/cmis/CMISTypeDefinition.java b/source/java/org/alfresco/cmis/CMISTypeDefinition.java index 8d39cf771a..0b438120c9 100644 --- a/source/java/org/alfresco/cmis/CMISTypeDefinition.java +++ b/source/java/org/alfresco/cmis/CMISTypeDefinition.java @@ -161,14 +161,14 @@ public interface CMISTypeDefinition * * @return property definitions */ - public Map getPropertyDefinitions(); + public Map getPropertyDefinitions(); /** * Gets the property definitions owned by this type * * @return */ - public Map getOwnedPropertyDefinitions(); + public Map getOwnedPropertyDefinitions(); /** * Gets the Action evaluators for this type diff --git a/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java b/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java index e04521d7ea..09ffcb9ce1 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java @@ -321,8 +321,8 @@ public abstract class CMISAbstractDictionaryService extends AbstractLifecycleBea boolean isMatchingType = (matchingType == null); if (property != null && matchingType != null) { - Map props = matchingType.getPropertyDefinitions(); - if (props.containsKey(property.getPropertyId())) + Map props = matchingType.getPropertyDefinitions(); + if (props.containsKey(property.getPropertyId().getName())) { isMatchingType = true; } @@ -362,7 +362,7 @@ public abstract class CMISAbstractDictionaryService extends AbstractLifecycleBea createDefinitions(registry); for (CMISAbstractTypeDefinition objectTypeDef : registry.objectDefsByTypeId.values()) { - Map propDefs = objectTypeDef.createProperties(cmisMapping, dictionaryService); + Map propDefs = objectTypeDef.createProperties(cmisMapping, dictionaryService); for (CMISPropertyDefinition propDef : propDefs.values()) { registry.registerPropertyDefinition(propDef); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java index 09b222fcf6..595268ef01 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java @@ -79,9 +79,9 @@ public class CMISAbstractTypeDefinition implements CMISTypeDefinition, Serializa protected boolean includeInSuperTypeQuery; protected Collection subTypeIds = new ArrayList(); protected Collection subTypes = new ArrayList(); - protected Map properties = new HashMap(); - protected Map inheritedProperties = new HashMap(); - protected Map ownedProperties = new HashMap(); + protected Map properties = new HashMap(); + protected Map inheritedProperties = new HashMap(); + protected Map ownedProperties = new HashMap(); protected Map actionEvaluators; @@ -92,7 +92,7 @@ public class CMISAbstractTypeDefinition implements CMISTypeDefinition, Serializa * @param dictionaryService * @return */ - /*package*/ Map createProperties(CMISMapping cmisMapping, DictionaryService dictionaryService) + /*package*/ Map createProperties(CMISMapping cmisMapping, DictionaryService dictionaryService) { // map properties directly defined on this type for (PropertyDefinition propDef : cmisClassDef.getProperties().values()) @@ -102,7 +102,7 @@ public class CMISAbstractTypeDefinition implements CMISTypeDefinition, Serializa if (cmisMapping.getDataType(propDef.getDataType()) != null) { CMISPropertyDefinition cmisPropDef = createProperty(cmisMapping, propDef); - properties.put(cmisPropDef.getPropertyId(), cmisPropDef); + properties.put(cmisPropDef.getPropertyId().getName(), cmisPropDef); } } } @@ -374,7 +374,7 @@ public class CMISAbstractTypeDefinition implements CMISTypeDefinition, Serializa * (non-Javadoc) * @see org.alfresco.cmis.dictionary.CMISTypeDefinition#getPropertyDefinitions() */ - public Map getPropertyDefinitions() + public Map getPropertyDefinitions() { return inheritedProperties; } @@ -383,7 +383,7 @@ public class CMISAbstractTypeDefinition implements CMISTypeDefinition, Serializa * (non-Javadoc) * @see org.alfresco.cmis.dictionary.CMISTypeDefinition#getOwnedPropertyDefinitions() */ - public Map getOwnedPropertyDefinitions() + public Map getOwnedPropertyDefinitions() { return ownedProperties; } diff --git a/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java index 1706ba72ec..d979d1ea44 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java @@ -31,7 +31,6 @@ import java.util.Map; import org.alfresco.cmis.CMISDictionaryModel; import org.alfresco.cmis.CMISPropertyDefinition; -import org.alfresco.cmis.CMISPropertyId; import org.alfresco.cmis.CMISScope; import org.alfresco.cmis.CMISTypeDefinition; import org.alfresco.cmis.CMISTypeId; @@ -120,7 +119,7 @@ public class CMISRelationshipTypeDefinition extends CMISAbstractTypeDefinition * @see org.alfresco.cmis.dictionary.CMISObjectTypeDefinition#createProperties(org.alfresco.cmis.dictionary.CMISMapping, org.alfresco.service.cmr.dictionary.DictionaryService) */ @Override - /*package*/ Map createProperties(CMISMapping cmisMapping, DictionaryService dictionaryService) + /*package*/ Map createProperties(CMISMapping cmisMapping, DictionaryService dictionaryService) { if (objectTypeId.equals(CMISDictionaryModel.RELATIONSHIP_TYPE_ID)) { diff --git a/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java b/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java index c74a045846..45b41e246b 100644 --- a/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java +++ b/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java @@ -31,7 +31,6 @@ import java.util.Map; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISPropertyDefinition; -import org.alfresco.cmis.CMISPropertyId; import org.alfresco.cmis.CMISServices; import org.alfresco.cmis.CMISTypeDefinition; import org.alfresco.cmis.CMISTypesFilterEnum; @@ -483,7 +482,7 @@ public class CMISServicesImpl implements CMISServices, ApplicationContextAware, { throw new AlfrescoRuntimeException("Type " + typeQName + " not found in CMIS Dictionary"); } - Map propDefs = typeDef.getPropertyDefinitions(); + Map propDefs = typeDef.getPropertyDefinitions(); Map values = new HashMap(propDefs.size()); for (CMISPropertyDefinition propDef : propDefs.values()) { diff --git a/source/java/org/alfresco/cmis/mapping/ContentStreamUriProperty.java b/source/java/org/alfresco/cmis/mapping/ContentStreamUriProperty.java index 94eeec3f7d..ba33928e4b 100644 --- a/source/java/org/alfresco/cmis/mapping/ContentStreamUriProperty.java +++ b/source/java/org/alfresco/cmis/mapping/ContentStreamUriProperty.java @@ -65,8 +65,12 @@ public class ContentStreamUriProperty extends AbstractProperty sb.append(nodeRef.getStoreRef().getIdentifier()); sb.append("/"); sb.append(nodeRef.getId()); - sb.append("/content."); - sb.append(getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_NAME)); + sb.append("/content"); + String name = (String)getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_NAME); + if (name.lastIndexOf('.') != -1) + { + sb.append(name.substring(name.lastIndexOf('.'))); + } return sb.toString(); } diff --git a/source/java/org/alfresco/cmis/search/CMISQueryParser.java b/source/java/org/alfresco/cmis/search/CMISQueryParser.java index 3d577cd076..f2a4c8fa6c 100644 --- a/source/java/org/alfresco/cmis/search/CMISQueryParser.java +++ b/source/java/org/alfresco/cmis/search/CMISQueryParser.java @@ -36,7 +36,6 @@ import org.alfresco.cmis.CMISCardinalityEnum; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISJoinEnum; import org.alfresco.cmis.CMISPropertyDefinition; -import org.alfresco.cmis.CMISPropertyId; import org.alfresco.cmis.CMISQueryException; import org.alfresco.cmis.CMISQueryOptions; import org.alfresco.cmis.CMISScope; @@ -533,7 +532,7 @@ public class CMISQueryParser { throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); } - Map propDefs = typeDef.getPropertyDefinitions(); + Map propDefs = typeDef.getPropertyDefinitions(); for (CMISPropertyDefinition definition : propDefs.values()) { if (definition.getCardinality() == CMISCardinalityEnum.SINGLE_VALUED) @@ -570,7 +569,7 @@ public class CMISQueryParser { throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); } - Map propDefs = typeDef.getPropertyDefinitions(); + Map propDefs = typeDef.getPropertyDefinitions(); for (CMISPropertyDefinition definition : propDefs.values()) { if (definition.getCardinality() == CMISCardinalityEnum.SINGLE_VALUED) diff --git a/source/java/org/alfresco/repo/jscript/ScriptNode.java b/source/java/org/alfresco/repo/jscript/ScriptNode.java index ecfab71a3a..8a4883d352 100644 --- a/source/java/org/alfresco/repo/jscript/ScriptNode.java +++ b/source/java/org/alfresco/repo/jscript/ScriptNode.java @@ -24,7 +24,10 @@ */ package org.alfresco.repo.jscript; +import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; import java.io.Serializable; import java.text.MessageFormat; import java.util.ArrayList; @@ -2704,18 +2707,43 @@ public class ScriptNode implements Serializable, Scopeable, NamespacePrefixResol { ContentService contentService = services.getContentService(); ContentReader reader = contentService.getReader(nodeRef, property); - return (reader != null && reader.exists()) ? reader.getContentString() : ""; } + /* + * (non-Javadoc) + * @see org.alfresco.util.Content#getInputStream() + */ public InputStream getInputStream() { ContentService contentService = services.getContentService(); ContentReader reader = contentService.getReader(nodeRef, property); - return (reader != null && reader.exists()) ? reader.getContentInputStream() : null; } + /* + * (non-Javadoc) + * @see org.alfresco.util.Content#getReader() + */ + public Reader getReader() + { + ContentService contentService = services.getContentService(); + ContentReader reader = contentService.getReader(nodeRef, property); + + if (reader != null && reader.exists()) + { + try + { + return (contentData.getEncoding() == null) ? new InputStreamReader(reader.getContentInputStream()) : new InputStreamReader(reader.getContentInputStream(), contentData.getEncoding()); + } + catch (IOException e) + { + // NOTE: fall-through + } + } + return null; + } + /** * Set the content stream *