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
-
}
-
}
}