diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties index 118522e442..03b90dd00c 100644 --- a/config/alfresco/messages/patch-service.properties +++ b/config/alfresco/messages/patch-service.properties @@ -37,3 +37,7 @@ patch.guestPersonPermission.result=Updated Guest Person permission from 'Consume patch.spacesRootPermission.description=Change Spaces store root permission from 'Consumer' to 'Read' patch.spacesRootPermission.result=Updated Spaces store root permission from 'Consumer' to 'Read' + +patch.contentPermission.description=Update permission entries from 'cm:content' to 'sys:base'. +patch.contentPermission.result=Created the following permission reference names: {0}. \nUpdated {1} permission entries. + diff --git a/config/alfresco/model/permissionDefinitions.xml b/config/alfresco/model/permissionDefinitions.xml index ddd6fa7942..e5c403d79d 100644 --- a/config/alfresco/model/permissionDefinitions.xml +++ b/config/alfresco/model/permissionDefinitions.xml @@ -66,6 +66,7 @@ + @@ -121,6 +122,33 @@ + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index 16b1e5c194..5046000bc5 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -265,5 +265,20 @@ + + patch.contentPermission + patch.contentPermission.description + 0 + 6 + 7 + + + + + + + + + diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index 548cf585ed..7eef75d594 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -378,8 +378,8 @@ - org.alfresco.service.cmr.repository.ContentService.getReader=ACL_NODE.0.cm:content.ReadContent - org.alfresco.service.cmr.repository.ContentService.getWriter=ACL_NODE.0.cm:content.WriteContent + org.alfresco.service.cmr.repository.ContentService.getReader=ACL_NODE.0.sys:base.ReadContent + org.alfresco.service.cmr.repository.ContentService.getWriter=ACL_NODE.0.sys:base.WriteContent org.alfresco.service.cmr.repository.ContentService.isTransformable=ACL_ALLOW org.alfresco.service.cmr.repository.ContentService.transform=ACL_ALLOW org.alfresco.service.cmr.repository.ContentService.getTempWriter=ACL_ALLOW diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties index e067cd5c83..1b9f946e75 100644 --- a/config/alfresco/version.properties +++ b/config/alfresco/version.properties @@ -15,4 +15,4 @@ version.edition=Community Network # Schema number -version.schema=6 +version.schema=7 diff --git a/source/java/org/alfresco/repo/admin/patch/impl/ContentPermissionPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/ContentPermissionPatch.java new file mode 100644 index 0000000000..1ba220b298 --- /dev/null +++ b/source/java/org/alfresco/repo/admin/patch/impl/ContentPermissionPatch.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2005 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * 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.alfresco.repo.admin.patch.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.i18n.I18NUtil; +import org.alfresco.repo.admin.patch.AbstractPatch; +import org.alfresco.repo.security.permissions.impl.hibernate.PermissionReference; +import org.alfresco.repo.security.permissions.impl.hibernate.PermissionReferenceImpl; +import org.alfresco.service.namespace.QName; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.springframework.orm.hibernate3.HibernateCallback; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +/** + * Roles defined in permissionsDefinition.xml moved from cm:content to sys:base. + * This effects the data stored in the node_perm_entry table. + * + * @author Derek Hulley + */ +public class ContentPermissionPatch extends AbstractPatch +{ + private static final String MSG_SUCCESS = "patch.contentPermission.result"; + + private HibernateHelper helper; + + public ContentPermissionPatch() + { + helper = new HibernateHelper(); + } + + public void setSessionFactory(SessionFactory sessionFactory) + { + this.helper.setSessionFactory(sessionFactory); + } + + @Override + protected String applyInternal() throws Exception + { + List createdNames = helper.createPermissionReferences(); + int updatedEntries = helper.updatePermissionEntries(); + + // build the result message + String msg = I18NUtil.getMessage(MSG_SUCCESS, createdNames, updatedEntries); + // done + return msg; + } + + private static class HibernateHelper extends HibernateDaoSupport + { + private static final String TYPE_URI_OLD = "http://www.alfresco.org/model/content/1.0"; + private static final String TYPE_NAME_OLD = "content"; + private static final String TYPE_URI_NEW = "http://www.alfresco.org/model/system/1.0"; + private static final String TYPE_NAME_NEW = "base"; + private static final String[] NAMES = new String[] {"Execute", "ReadContent", "WriteContent", "ExecuteContent"}; + + private static final String QUERY_UPDATE_PERM_ENTRY_TYPE = "permission.patch.UpdatePermissionEntryType"; + + public List createPermissionReferences() + { + List createdNames = new ArrayList(4); + for (String name : NAMES) + { + // create permission references as required, double checking for their existence first + PermissionReference ref = new PermissionReferenceImpl(); + ref.setTypeUri(TYPE_URI_NEW); + ref.setTypeName(TYPE_NAME_NEW); + ref.setName(name); + + // it acts as its own key + PermissionReference found = (PermissionReference) getHibernateTemplate().get( + PermissionReferenceImpl.class, + ref); + + if (found == null) + { + // it was not found, so create it + getHibernateTemplate().save(ref); + createdNames.add(QName.createQName(TYPE_URI_NEW, TYPE_NAME_NEW).toString() + "/" + name); + } + } + return createdNames; + } + + public int updatePermissionEntries() + { + HibernateCallback callback = new HibernateCallback() + { + public Object doInHibernate(Session session) + { + // flush any outstanding entities + session.flush(); + + Query query = session.getNamedQuery(HibernateHelper.QUERY_UPDATE_PERM_ENTRY_TYPE); + query.setString("typeNameNew", TYPE_NAME_NEW) + .setString("typeNameOld", TYPE_NAME_OLD) + .setString("typeUriNew", TYPE_URI_NEW) + .setString("typeUriOld", TYPE_URI_OLD) + .setParameterList("names", NAMES); + int updateCount = query.executeUpdate(); + return new Integer(updateCount); + } + }; + Integer updateCount = (Integer) getHibernateTemplate().execute(callback); + // done + return updateCount.intValue(); + } + } +} diff --git a/source/java/org/alfresco/repo/content/RoutingContentService.java b/source/java/org/alfresco/repo/content/RoutingContentService.java index 9cf753c5e8..30b69f6352 100644 --- a/source/java/org/alfresco/repo/content/RoutingContentService.java +++ b/source/java/org/alfresco/repo/content/RoutingContentService.java @@ -236,22 +236,31 @@ public class RoutingContentService implements ContentService { return getReader(nodeRef, propertyQName, true); } - + private ContentReader getReader(NodeRef nodeRef, QName propertyQName, boolean fireContentReadPolicy) { - // ensure that the node property is of type content - PropertyDefinition contentPropDef = dictionaryService.getProperty(propertyQName); - if (contentPropDef == null || !contentPropDef.getDataType().getName().equals(DataTypeDefinition.CONTENT)) + // get the property value + ContentData contentData = null; + Serializable propValue = nodeService.getProperty(nodeRef, propertyQName); + if (propValue instanceof ContentData) { - throw new InvalidTypeException("The node property must be of type content: \n" + - " node: " + nodeRef + "\n" + - " property name: " + propertyQName + "\n" + - " property type: " + ((contentPropDef == null) ? "unknown" : contentPropDef.getDataType()), - propertyQName); + contentData = (ContentData)propValue; + } + + // ensure that the node property is of type content + if (contentData == null) + { + PropertyDefinition contentPropDef = dictionaryService.getProperty(propertyQName); + if (contentPropDef == null || !(contentPropDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) + { + throw new InvalidTypeException("The node property must be of type content: \n" + + " node: " + nodeRef + "\n" + + " property name: " + propertyQName + "\n" + + " property type: " + ((contentPropDef == null) ? "unknown" : contentPropDef.getDataType()), + propertyQName); + } } - // get the content property - ContentData contentData = (ContentData) nodeService.getProperty(nodeRef, propertyQName); // check that the URL is available if (contentData == null || contentData.getContentUrl() == null) { diff --git a/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java b/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java index 45c8fad015..b9445318d5 100644 --- a/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java +++ b/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java @@ -142,6 +142,12 @@ public class ACPExportPackageHandler */ public ContentData exportContent(InputStream content, ContentData contentData) { + // if the content stream to output is empty, then just return content descriptor as is + if (content == null) + { + return contentData; + } + // create zip entry for stream to export String contentDirPath = contentDir.getPath(); if (contentDirPath.indexOf(".") != -1) diff --git a/source/java/org/alfresco/repo/exporter/ChainedExporter.java b/source/java/org/alfresco/repo/exporter/ChainedExporter.java index 93fb58f676..9116a9c2a7 100644 --- a/source/java/org/alfresco/repo/exporter/ChainedExporter.java +++ b/source/java/org/alfresco/repo/exporter/ChainedExporter.java @@ -18,7 +18,6 @@ package org.alfresco.repo.exporter; import java.io.InputStream; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import org.alfresco.service.cmr.repository.ContentData; @@ -234,6 +233,28 @@ import org.alfresco.service.namespace.QName; } } + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#startValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + public void startValueCollection(NodeRef nodeRef, QName property) + { + for (Exporter exporter : exporters) + { + exporter.startValueCollection(nodeRef, property); + } + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#endValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + public void endValueCollection(NodeRef nodeRef, QName property) + { + for (Exporter exporter : exporters) + { + exporter.endValueCollection(nodeRef, property); + } + } + /* (non-Javadoc) * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.Serializable) */ @@ -245,17 +266,6 @@ import org.alfresco.service.namespace.QName; } } - /* (non-Javadoc) - * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.util.Collection) - */ - public void value(NodeRef nodeRef, QName property, Collection values) - { - for (Exporter exporter : exporters) - { - exporter.value(nodeRef, property, values); - } - } - /* (non-Javadoc) * @see org.alfresco.service.cmr.view.Exporter#content(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.InputStream) */ diff --git a/source/java/org/alfresco/repo/exporter/ExporterComponent.java b/source/java/org/alfresco/repo/exporter/ExporterComponent.java index 1f41bf0932..af994ab364 100644 --- a/source/java/org/alfresco/repo/exporter/ExporterComponent.java +++ b/source/java/org/alfresco/repo/exporter/ExporterComponent.java @@ -33,6 +33,7 @@ import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.NodeRef; @@ -396,66 +397,16 @@ public class ExporterComponent // start export of property exporter.startProperty(nodeRef, property); - // get the property type - PropertyDefinition propertyDef = dictionaryService.getProperty(property); - boolean isContentProperty = (propertyDef == null) ? false : propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT); - - if (isContentProperty) + if (value instanceof Collection) { - // export property of datatype CONTENT - ContentReader reader = contentService.getReader(nodeRef, property); - if (reader == null || reader.exists() == false) + for (Object valueInCollection : (Collection)value) { - exporter.warning("Failed to read content for property " + property + " on node " + nodeRef); - } - else - { - // filter out content if not required - if (parameters.isCrawlContent()) - { - InputStream inputStream = reader.getContentInputStream(); - try - { - exporter.content(nodeRef, property, inputStream, reader.getContentData()); - } - finally - { - try - { - inputStream.close(); - } - catch(IOException e) - { - throw new ExporterException("Failed to export node content for node " + nodeRef, e); - } - } - } - else - { - // skip content values - exporter.content(nodeRef, property, null, null); - } + walkProperty(nodeRef, property, valueInCollection, parameters, exporter); } } else { - // Export all other datatypes - try - { - if (value instanceof Collection) - { - exporter.value(nodeRef, property, (Collection)value); - } - else - { - exporter.value(nodeRef, property, value); - } - } - catch(TypeConversionException e) - { - exporter.warning("Value of property " + property + " could not be converted to xml string"); - exporter.value(nodeRef, property, properties.get(property).toString()); - } + walkProperty(nodeRef, property, value, parameters, exporter); } // end export of property @@ -511,6 +462,81 @@ public class ExporterComponent exporter.endNode(nodeRef); } + /** + * Export Property + * + * @param nodeRef + * @param property + * @param value + * @param parameters + * @param exporter + */ + private void walkProperty(NodeRef nodeRef, QName property, Object value, ExporterCrawlerParameters parameters, Exporter exporter) + { + // determine data type of value + PropertyDefinition propDef = dictionaryService.getProperty(property); + DataTypeDefinition dataTypeDef = (propDef == null) ? null : propDef.getDataType(); + QName valueDataType = null; + if (dataTypeDef == null || dataTypeDef.getName().equals(DataTypeDefinition.ANY)) + { + dataTypeDef = (value == null) ? null : dictionaryService.getDataType(value.getClass()); + if (dataTypeDef != null) + { + valueDataType = dataTypeDef.getName(); + } + } + else + { + valueDataType = dataTypeDef.getName(); + } + + if (valueDataType == null || !valueDataType.equals(DataTypeDefinition.CONTENT)) + { + // Export non content data types + try + { + exporter.value(nodeRef, property, value); + } + catch(TypeConversionException e) + { + exporter.warning("Value of property " + property + " could not be converted to xml string"); + exporter.value(nodeRef, property, value.toString()); + } + } + else + { + // export property of datatype CONTENT + ContentReader reader = contentService.getReader(nodeRef, property); + if (!parameters.isCrawlContent() || reader == null || reader.exists() == false) + { + // export an empty url for the content + ContentData contentData = (ContentData)value; + ContentData noContentURL = new ContentData("", contentData.getMimetype(), contentData.getSize(), contentData.getEncoding()); + exporter.content(nodeRef, property, null, noContentURL); + exporter.warning("Skipped content for property " + property + " on node " + nodeRef); + } + else + { + InputStream inputStream = reader.getContentInputStream(); + try + { + exporter.content(nodeRef, property, inputStream, reader.getContentData()); + } + finally + { + try + { + inputStream.close(); + } + catch(IOException e) + { + throw new ExporterException("Failed to export node content for node " + nodeRef, e); + } + } + } + } + } + /** * Export Secondary Links * diff --git a/source/java/org/alfresco/repo/exporter/ExporterComponentTest.java b/source/java/org/alfresco/repo/exporter/ExporterComponentTest.java index 32172f397f..c9fc188f1e 100644 --- a/source/java/org/alfresco/repo/exporter/ExporterComponentTest.java +++ b/source/java/org/alfresco/repo/exporter/ExporterComponentTest.java @@ -20,7 +20,6 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; -import java.util.Collection; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.service.ServiceRegistry; @@ -151,16 +150,21 @@ public class ExporterComponentTest extends BaseSpringTest // System.out.println("TestProgress: end property " + property); } + public void startValueCollection(NodeRef nodeRef, QName property) + { +// System.out.println("TestProgress: start value collection: node " + nodeRef + " , property " + property); + } + + public void endValueCollection(NodeRef nodeRef, QName property) + { +// System.out.println("TestProgress: end value collection: node " + nodeRef + " , property " + property); + } + public void value(NodeRef nodeRef, QName property, Object value) { // System.out.println("TestProgress: single value " + value); } - public void value(NodeRef nodeRef, QName property, Collection values) - { -// System.out.println("TestProgress: multi value " + value); - } - public void content(NodeRef nodeRef, QName property, InputStream content, ContentData contentData) { // System.out.println("TestProgress: content stream "); diff --git a/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java b/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java index 046d54ca8d..19fb9f37a9 100644 --- a/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java +++ b/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java @@ -113,6 +113,12 @@ public class FileExportPackageHandler */ public ContentData exportContent(InputStream content, ContentData contentData) { + // if the content stream to output is empty, then just return content descriptor as is + if (content == null) + { + return contentData; + } + // Lazily create package directory try { diff --git a/source/java/org/alfresco/repo/exporter/URLExporter.java b/source/java/org/alfresco/repo/exporter/URLExporter.java index 360e407829..644483ed92 100644 --- a/source/java/org/alfresco/repo/exporter/URLExporter.java +++ b/source/java/org/alfresco/repo/exporter/URLExporter.java @@ -17,7 +17,6 @@ package org.alfresco.repo.exporter; import java.io.InputStream; -import java.util.Collection; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; @@ -186,6 +185,22 @@ import org.alfresco.util.ParameterCheck; exporter.endProperty(nodeRef, property); } + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#startValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + public void startValueCollection(NodeRef nodeRef, QName property) + { + exporter.startValueCollection(nodeRef, property); + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#endValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + public void endValueCollection(NodeRef nodeRef, QName property) + { + exporter.endValueCollection(nodeRef, property); + } + /* (non-Javadoc) * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.Serializable) */ @@ -194,14 +209,6 @@ import org.alfresco.util.ParameterCheck; exporter.value(nodeRef, property, value); } - /* (non-Javadoc) - * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.util.Collection) - */ - public void value(NodeRef nodeRef, QName property, Collection values) - { - exporter.value(nodeRef, property, values); - } - /* (non-Javadoc) * @see org.alfresco.service.cmr.view.Exporter#content(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.InputStream) */ @@ -209,7 +216,7 @@ import org.alfresco.util.ParameterCheck; { // Handle the stream by converting it to a URL and export the URL ContentData exportedContentData = streamHandler.exportContent(content, contentData); - value(nodeRef, property, exportedContentData.toString()); + value(nodeRef, property, exportedContentData); } /* (non-Javadoc) diff --git a/source/java/org/alfresco/repo/exporter/ViewXMLExporter.java b/source/java/org/alfresco/repo/exporter/ViewXMLExporter.java index 4903135218..d6674f3bee 100644 --- a/source/java/org/alfresco/repo/exporter/ViewXMLExporter.java +++ b/source/java/org/alfresco/repo/exporter/ViewXMLExporter.java @@ -457,6 +457,38 @@ import org.xml.sax.helpers.AttributesImpl; } } + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#startValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + public void startValueCollection(NodeRef nodeRef, QName property) + { + try + { + // start collection + contentHandler.startElement(NamespaceService.REPOSITORY_VIEW_PREFIX, VALUES_LOCALNAME, toPrefixString(VALUES_QNAME), EMPTY_ATTRIBUTES); + } + catch (SAXException e) + { + throw new ExporterException("Failed to process start collection event - nodeRef " + nodeRef + "; property " + toPrefixString(property), e); + } + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#endValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) + */ + public void endValueCollection(NodeRef nodeRef, QName property) + { + try + { + // end collection + contentHandler.endElement(NamespaceService.REPOSITORY_VIEW_PREFIX, VALUES_LOCALNAME, toPrefixString(VALUES_QNAME)); + } + catch (SAXException e) + { + throw new ExporterException("Failed to process end collection event - nodeRef " + nodeRef + "; property " + toPrefixString(property), e); + } + } + /* (non-Javadoc) * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.Serializable) */ diff --git a/source/java/org/alfresco/repo/security/permissions/impl/hibernate/Permission.hbm.xml b/source/java/org/alfresco/repo/security/permissions/impl/hibernate/Permission.hbm.xml index eba019a626..efd5ab818d 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/hibernate/Permission.hbm.xml +++ b/source/java/org/alfresco/repo/security/permissions/impl/hibernate/Permission.hbm.xml @@ -149,7 +149,19 @@ typeName = :typeNameOld and name in ('Coordinator', 'Contributor', 'Editor', 'Guest') - + + + update + org.alfresco.repo.security.permissions.impl.hibernate.PermissionEntryImpl as entry + set + typeUri = :typeUriNew, + typeName = :typeNameNew + where + typeUri = :typeUriOld and + typeName = :typeNameOld and + name in ( :names ) + + update org.alfresco.repo.security.permissions.impl.hibernate.PermissionEntryImpl as entry diff --git a/source/java/org/alfresco/service/cmr/view/Exporter.java b/source/java/org/alfresco/service/cmr/view/Exporter.java index 24fd90985a..a9da31d6b2 100644 --- a/source/java/org/alfresco/service/cmr/view/Exporter.java +++ b/source/java/org/alfresco/service/cmr/view/Exporter.java @@ -17,7 +17,6 @@ package org.alfresco.service.cmr.view; import java.io.InputStream; -import java.util.Collection; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; @@ -163,6 +162,14 @@ public interface Exporter */ public void endProperties(NodeRef nodeRef); + /** + * Export start of value collection + * + * @param nodeRef the node reference + * @param property the property name + */ + public void startValueCollection(NodeRef nodeRef, QName property); + /** * Export single valued property * @@ -173,16 +180,15 @@ public interface Exporter public void value(NodeRef nodeRef, QName property, Object value); /** - * Export multi valued property + * Export end of value collection * * @param nodeRef the node reference * @param property the property name - * @param value the value */ - public void value(NodeRef nodeRef, QName property, Collection values); + public void endValueCollection(NodeRef nodeRef, QName property); /** - * Export content stream + * Export content stream property * * @param nodeRef the node reference * @param property the property name diff --git a/source/java/org/alfresco/tools/Export.java b/source/java/org/alfresco/tools/Export.java index 61a74b4419..721c3a699b 100644 --- a/source/java/org/alfresco/tools/Export.java +++ b/source/java/org/alfresco/tools/Export.java @@ -18,10 +18,9 @@ package org.alfresco.tools; import java.io.File; import java.io.InputStream; -import java.util.Collection; -import org.alfresco.repo.exporter.FileExportPackageHandler; import org.alfresco.repo.exporter.ACPExportPackageHandler; +import org.alfresco.repo.exporter.FileExportPackageHandler; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; @@ -239,6 +238,7 @@ public final class Export extends Tool } catch(ExporterException e) { + e.printStackTrace(); throw new ToolException("Failed to export", e); } } @@ -552,16 +552,23 @@ public final class Export extends Tool } /* (non-Javadoc) - * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.Serializable) + * @see org.alfresco.service.cmr.view.Exporter#startValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) */ - public void value(NodeRef nodeRef, QName property, Object value) + public void startValueCollection(NodeRef nodeRef, QName property) { } /* (non-Javadoc) - * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.util.Collection) + * @see org.alfresco.service.cmr.view.Exporter#endValueCollection(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName) */ - public void value(NodeRef nodeRef, QName property, Collection values) + public void endValueCollection(NodeRef nodeRef, QName property) + { + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.view.Exporter#value(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName, java.io.Serializable) + */ + public void value(NodeRef nodeRef, QName property, Object value) { } @@ -627,10 +634,7 @@ public final class Export extends Tool */ public void endReference(NodeRef nodeRef) { - // TODO Auto-generated method stub - } - } }