Merge branch 'master' into feature/RM-5087_UpdateNotesForGETEndpoints

This commit is contained in:
Ramona Popa
2017-05-15 18:04:59 +03:00
32 changed files with 578 additions and 96 deletions

View File

@@ -48,9 +48,18 @@ public class FilePlanComponentFields
public static final String PROPERTIES_VITAL_RECORD_INDICATOR = "rma:vitalRecordIndicator"; public static final String PROPERTIES_VITAL_RECORD_INDICATOR = "rma:vitalRecordIndicator";
public static final String PROPERTIES_REVIEW_PERIOD = "rma:reviewPeriod"; public static final String PROPERTIES_REVIEW_PERIOD = "rma:reviewPeriod";
public static final String PROPERTIES_OWNER = "cm:owner"; public static final String PROPERTIES_OWNER = "cm:owner";
public static final String PROPERTIES_AUTHOR="cm:author";
/** Common properties for record folders and records */ /** Common properties for record folders and records */
public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE = "rma:recordSearchHasDispositionSchedule"; public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE = "rma:recordSearchHasDispositionSchedule";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION = "rma:recordSearchDispositionPeriodExpression";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY = "rma:recordSearchDispositionAuthority";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF = "rma:recordSearchDispositionActionAsOf";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD = "rma:recordSearchDispositionPeriod";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME = "rma:recordSearchDispositionActionName";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE = "rma:recordSearchDispositionEventsEligible";
public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS = "rma:recordSearchDispositionInstructions";
/** File plan properties */ /** File plan properties */
public static final String PROPERTIES_COMPONENT_ID = "st:componentId"; public static final String PROPERTIES_COMPONENT_ID = "st:componentId";

View File

@@ -27,6 +27,7 @@
package org.alfresco.rest.rm.community.model.record; package org.alfresco.rest.rm.community.model.record;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_AUTHOR;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_BOX; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_BOX;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_FILED; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_FILED;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_TIME_ORIGINAL; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_TIME_ORIGINAL;
@@ -200,4 +201,7 @@ public class RecordProperties extends TestModel
@JsonProperty (PROPERTIES_OWNER) @JsonProperty (PROPERTIES_OWNER)
private Owner owner; private Owner owner;
@JsonProperty(PROPERTIES_AUTHOR)
private String author;
} }

View File

@@ -32,15 +32,26 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ID_IS_TEMPORARILY_EDITABLE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ID_IS_TEMPORARILY_EDITABLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IS_CLOSED; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IS_CLOSED;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_LOCATION; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_LOCATION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_REVIEW_PERIOD; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_REVIEW_PERIOD;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod; import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel; import org.alfresco.utility.model.TestModel;
@@ -103,4 +114,28 @@ public class RecordCategoryChildProperties extends TestModel
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) @JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
private Boolean recordSearchHasDispositionSchedule; private Boolean recordSearchHasDispositionSchedule;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
private String recordSearchDispositionPeriodExpression;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
private String recordSearchDispositionAuthority;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
private Date recordSearchDispositionActionAsOf;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
private String recordSearchDispositionPeriod;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
private String recordSearchDispositionActionName;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
private Boolean recordSearchDispositionEventsEligible;
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
private String recordSearchDispositionInstructions;
@JsonProperty (PROPERTIES_OWNER)
private Owner owner;
} }

View File

@@ -29,12 +29,11 @@ package org.alfresco.rest.rm.community.model.transfer;
import java.util.List; import java.util.List;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;

View File

@@ -29,12 +29,11 @@ package org.alfresco.rest.rm.community.model.transfercontainer;
import java.util.List; import java.util.List;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.rest.rm.community.model.common.Path;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.model.RestByUserModel;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;

View File

@@ -58,13 +58,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_X_RESOLUTION; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_X_RESOLUTION;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_Y_RESOLUTION; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_Y_RESOLUTION;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;

View File

@@ -28,15 +28,12 @@ package org.alfresco.rest.rm.community.model.unfiledcontainer;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ID_IS_TEMPORARILY_EDITABLE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ID_IS_TEMPORARILY_EDITABLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
import org.alfresco.rest.rm.community.model.common.Owner;
import org.alfresco.utility.model.TestModel;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import org.alfresco.utility.model.TestModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@@ -67,5 +64,4 @@ public class UnfiledContainerProperties extends TestModel
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
private String rootNodeRef; private String rootNodeRef;
} }

View File

@@ -41,19 +41,18 @@ import static org.testng.Assert.fail;
import java.io.File; import java.io.File;
import java.util.Iterator; import java.util.Iterator;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
import org.alfresco.rest.rm.community.requests.RMModelRequest;
import org.alfresco.rest.rm.community.util.FilePlanComponentMixIn;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.builder.RequestSpecBuilder;
import com.jayway.restassured.http.ContentType; import com.jayway.restassured.http.ContentType;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
import org.alfresco.rest.rm.community.requests.RMModelRequest;
import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
/** /**
* Unfiled Container REST API Wrapper * Unfiled Container REST API Wrapper
* *
@@ -209,7 +208,7 @@ public class UnfiledContainerAPI extends RMModelRequest
* to the request. * to the request.
*/ */
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec(); RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
JsonNode root = new ObjectMapper().readTree(toJson(unfiledContainerChildModel, Record.class, FilePlanComponentMixIn.class)); JsonNode root = new ObjectMapper().readTree(toJson(unfiledContainerChildModel, UnfiledContainerChild.class, UnfiledContainerChildMixin.class));
// add request fields // add request fields
Iterator<String> fieldNames = root.fieldNames(); Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext()) while (fieldNames.hasNext())

View File

@@ -42,19 +42,18 @@ import static org.testng.Assert.fail;
import java.io.File; import java.io.File;
import java.util.Iterator; import java.util.Iterator;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledRecordFolder;
import org.alfresco.rest.rm.community.requests.RMModelRequest;
import org.alfresco.rest.rm.community.util.FilePlanComponentMixIn;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.builder.RequestSpecBuilder;
import com.jayway.restassured.http.ContentType; import com.jayway.restassured.http.ContentType;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledRecordFolder;
import org.alfresco.rest.rm.community.requests.RMModelRequest;
import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
/** /**
* Unfiled Record Folders REST API Wrapper * Unfiled Record Folders REST API Wrapper
* *
@@ -209,7 +208,7 @@ public class UnfiledRecordFolderAPI extends RMModelRequest
* to the request. * to the request.
*/ */
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec(); RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
JsonNode root = new ObjectMapper().readTree(toJson(unfiledRecordFolderChildModel, Record.class, FilePlanComponentMixIn.class)); JsonNode root = new ObjectMapper().readTree(toJson(unfiledRecordFolderChildModel, UnfiledContainerChild.class, UnfiledContainerChildMixin.class));
// add request fields // add request fields
Iterator<String> fieldNames = root.fieldNames(); Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext()) while (fieldNames.hasNext())

View File

@@ -0,0 +1,49 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2017 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* -
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
* -
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* -
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* -
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
package org.alfresco.rest.rm.community.util;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildProperties;
/**
* Mix class for Record POJO class
* Mix-in annotations are: a way to associate annotations with classes
* without modifying (target) classes themselves.
*
* @author Tuna Aksoy
* @since 2.6
*/
public abstract class UnfiledContainerChildMixin
{
/**
* Annotation used to indicate that a property should be serialized "unwrapped"
* Its properties are instead included as properties of its containing Object
*/
@JsonUnwrapped
abstract UnfiledContainerChildProperties getProperties();
}

View File

@@ -54,7 +54,6 @@ import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@@ -77,8 +76,6 @@ public class RMRolesAndActionsAPI extends BaseAPI
@Autowired @Autowired
private AlfrescoHttpClientFactory alfrescoHttpClientFactory; private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
private ApplicationContext applicationContext;
/** user service */ /** user service */
@Autowired @Autowired
private UserService userService; private UserService userService;

View File

@@ -28,6 +28,7 @@ package org.alfresco.rest.rm.community.base;
import static lombok.AccessLevel.PROTECTED; import static lombok.AccessLevel.PROTECTED;
import static org.alfresco.rest.rm.community.base.TestData.ELECTRONIC_RECORD_NAME;
import static org.alfresco.rest.rm.community.base.TestData.RECORD_CATEGORY_TITLE; import static org.alfresco.rest.rm.community.base.TestData.RECORD_CATEGORY_TITLE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS;
@@ -35,10 +36,11 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_CATEGORY_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_CATEGORY_TYPE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_FOLDER_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_FOLDER_TYPE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_TYPE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_RECORD_FOLDER_TYPE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_CONTAINER_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_CONTAINER_TYPE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_RECORD_FOLDER_TYPE;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordCategoryChildModel; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordCategoryChildModel;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordCategoryModel; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordCategoryModel;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createTempFile;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createUnfiledContainerChildModel; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createUnfiledContainerChildModel;
import static org.alfresco.rest.rm.community.utils.RMSiteUtil.createStandardRMSiteModel; import static org.alfresco.rest.rm.community.utils.RMSiteUtil.createStandardRMSiteModel;
import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric; import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
@@ -52,6 +54,7 @@ import java.util.List;
import org.alfresco.rest.RestTest; import org.alfresco.rest.RestTest;
import org.alfresco.rest.core.RestAPIFactory; import org.alfresco.rest.core.RestAPIFactory;
import org.alfresco.rest.rm.community.model.fileplan.FilePlan; import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType;
import org.alfresco.rest.rm.community.model.record.Record; import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory; import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild; import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
@@ -334,8 +337,17 @@ public class BaseRMRestTest extends RestTest
*/ */
public UnfiledContainerChild createUnfiledContainerChild(UserModel user, String parentId, String childName, String nodeType) throws Exception public UnfiledContainerChild createUnfiledContainerChild(UserModel user, String parentId, String childName, String nodeType) throws Exception
{ {
UnfiledContainerChild child = null;
UnfiledContainerChild childModel = createUnfiledContainerChildModel(childName, nodeType); UnfiledContainerChild childModel = createUnfiledContainerChildModel(childName, nodeType);
UnfiledContainerChild child = getRestAPIFactory().getUnfiledContainersAPI(user).createUnfiledContainerChild(childModel, parentId);
if (FilePlanComponentType.CONTENT_TYPE.equals(nodeType))
{
child = getRestAPIFactory().getUnfiledContainersAPI(user).uploadRecord(childModel, parentId, createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME));
}
else
{
child = getRestAPIFactory().getUnfiledContainersAPI(user).createUnfiledContainerChild(childModel, parentId);
}
assertStatusCode(CREATED); assertStatusCode(CREATED);
return child; return child;

View File

@@ -159,6 +159,22 @@ public interface TestData
}; };
} }
/**
* Data Provider with:
* with the object types for creating a Record Category Child
*
* @return record category child type
*/
@DataProvider
public static Object[][] categoryChild()
{
return new String[][] {
{ RECORD_FOLDER_TYPE },
{ FOLDER_TYPE },
{ RECORD_CATEGORY_TYPE }
};
}
/** /**
* Invalid root level types, at unfiled record folder/unfiled containers container level that shouldn't be possible to create * Invalid root level types, at unfiled record folder/unfiled containers container level that shouldn't be possible to create
*/ */

View File

@@ -45,12 +45,14 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.user.UserPermissions.PERMISSION_FILING; import static org.alfresco.rest.rm.community.model.user.UserPermissions.PERMISSION_FILING;
import static org.alfresco.rest.rm.community.model.user.UserRoles.ROLE_RM_MANAGER; import static org.alfresco.rest.rm.community.model.user.UserRoles.ROLE_RM_MANAGER;
import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric; import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
import static org.springframework.http.HttpStatus.CONFLICT;
import static org.springframework.http.HttpStatus.CREATED; import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.FORBIDDEN; import static org.springframework.http.HttpStatus.FORBIDDEN;
import static org.springframework.http.HttpStatus.NOT_FOUND; import static org.springframework.http.HttpStatus.NOT_FOUND;
import static org.springframework.http.HttpStatus.OK; import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY; import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail; import static org.testng.Assert.fail;
@@ -241,10 +243,10 @@ public class FilePlanTests extends BaseRMRestTest
assertStatusCode(OK); assertStatusCode(OK);
// Verify the returned description field for the file plan component // Verify the returned description field for the file plan component
assertEquals(renamedFilePlan.getProperties().getDescription(), FILE_PLAN_DESCRIPTION); assertEquals(FILE_PLAN_DESCRIPTION, renamedFilePlan.getProperties().getDescription());
// Verify the returned title field for the file plan component // Verify the returned title field for the file plan component
assertEquals(renamedFilePlan.getProperties().getTitle(), FILE_PLAN_TITLE); assertEquals(FILE_PLAN_TITLE, renamedFilePlan.getProperties().getTitle());
} }
/** /**
@@ -322,6 +324,56 @@ public class FilePlanTests extends BaseRMRestTest
assertNotNull(rootRecordCategoryProperties.getIdentifier()); assertNotNull(rootRecordCategoryProperties.getIdentifier());
} }
/**
* <pre>
* Given a root category
* When I ask the API to create a root category having the same name
* Then the response code received is 409 - name clashes with an existing node
*</pre>
* <pre>
* Given a root category
* When I ask the API to create a root category having the same name with autoRename parameter on true
* Then the record category is created the record category has a unique name by adding an integer suffix
* </pre>
*/
@Test
@Bug(id = "RM-5116")
public void createDuplicateCategories() throws Exception
{
String categoryName = "Category name " + getRandomAlphanumeric();
String categoryTitle = "Category title " + getRandomAlphanumeric();
// Create the root record category
RecordCategory recordCategory = RecordCategory.builder()
.name(categoryName)
.properties(RecordCategoryProperties.builder()
.title(categoryTitle)
.build())
.build();
// Create the root record category
RecordCategory rootRecordCategory = getRestAPIFactory().getFilePlansAPI().createRootRecordCategory(recordCategory,FILE_PLAN_ALIAS);
// Verify the status code
assertStatusCode(CREATED);
assertEquals(rootRecordCategory.getName(), categoryName);
// Create the same root record category
getRestAPIFactory().getFilePlansAPI().createRootRecordCategory(recordCategory, FILE_PLAN_ALIAS);
// Verify the status code
assertStatusCode(CONFLICT);
//create the same category with autoRename parameter on true
RecordCategory rootRecordCategoryAutoRename = getRestAPIFactory().getFilePlansAPI()
.createRootRecordCategory(recordCategory, FILE_PLAN_ALIAS,"autoRename=true");
// Verify the status code
assertStatusCode(CREATED);
assertNotEquals(rootRecordCategoryAutoRename.getName(), categoryName);
assertTrue(rootRecordCategoryAutoRename.getName().startsWith(categoryName));
}
@Test @Test
public void listFilePlanChildren() throws Exception public void listFilePlanChildren() throws Exception
{ {

View File

@@ -38,8 +38,10 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_FOLDER_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.RECORD_FOLDER_TYPE;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_RECORD_FOLDER_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.UNFILED_RECORD_FOLDER_TYPE;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.TITLE_PREFIX; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.TITLE_PREFIX;
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createRecordCategoryChildModel;
import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric; import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.CONFLICT;
import static org.springframework.http.HttpStatus.CREATED; import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.NOT_FOUND; import static org.springframework.http.HttpStatus.NOT_FOUND;
import static org.springframework.http.HttpStatus.NO_CONTENT; import static org.springframework.http.HttpStatus.NO_CONTENT;
@@ -47,6 +49,7 @@ import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY; import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail; import static org.testng.Assert.fail;
@@ -294,6 +297,42 @@ public class RecordCategoryTests extends BaseRMRestTest
assertEquals(folderProperties.getTitle(), TITLE_PREFIX + RECORD_FOLDER_NAME); assertEquals(folderProperties.getTitle(), TITLE_PREFIX + RECORD_FOLDER_NAME);
assertNotNull(folderProperties.getIdentifier()); assertNotNull(folderProperties.getIdentifier());
} }
@Test
(
dataProviderClass = TestData.class,
dataProvider = "categoryChild"
)
@Bug(id = "RM-5116")
public void createdDuplicateChild(String childType)throws Exception
{
// create a root category
String rootRecordCategory = createRootCategory(RECORD_CATEGORY_NAME + getRandomAlphanumeric()).getId();
// Create the record category child
RecordCategoryChild recordFolder = createRecordCategoryChild(rootRecordCategory, RECORD_FOLDER_NAME, childType);
// check the response code
assertStatusCode(CREATED);
assertEquals(recordFolder.getName(), RECORD_FOLDER_NAME);
// Create a record category child with the same name as the exiting one
RecordCategoryChild recordFolderDuplicate = getRestAPIFactory().getRecordCategoryAPI().createRecordCategoryChild(
createRecordCategoryChildModel(RECORD_FOLDER_NAME, childType), rootRecordCategory);
// check the response code
assertStatusCode(CONFLICT);
// Create a record folder with the same name as the exiting one and with the autoRename parameter on true
recordFolderDuplicate = getRestAPIFactory().getRecordCategoryAPI()
.createRecordCategoryChild(createRecordCategoryChildModel(RECORD_FOLDER_NAME,
childType),
rootRecordCategory, "autoRename=true");
// check the response code
assertStatusCode(CREATED);
assertNotEquals(recordFolderDuplicate.getName(), RECORD_FOLDER_NAME);
assertTrue(recordFolderDuplicate.getName().contains(RECORD_FOLDER_NAME));
}
/** /**
* <pre> * <pre>

View File

@@ -349,9 +349,6 @@ public class ElectronicRecordTests extends BaseRMRestTest
UnfiledContainerChild unfiledContainerChildModel= UnfiledContainerChild.builder() UnfiledContainerChild unfiledContainerChildModel= UnfiledContainerChild.builder()
.name(ELECTRONIC_RECORD_NAME) .name(ELECTRONIC_RECORD_NAME)
.nodeType(CONTENT_TYPE) .nodeType(CONTENT_TYPE)
.content(RecordContent.builder()
.mimeType(TEXT_PLAIN_VALUE)
.build())
.relativePath(relativePath) .relativePath(relativePath)
.build(); .build();

View File

@@ -38,10 +38,13 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo
import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createUnfiledContainerChildModel; import static org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil.createUnfiledContainerChildModel;
import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric; import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric;
import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.CONFLICT;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.OK; import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY; import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
@@ -59,6 +62,7 @@ import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChi
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledRecordFolder; import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledRecordFolder;
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI; import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI;
import org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil; import org.alfresco.rest.rm.community.utils.FilePlanComponentsUtil;
import org.alfresco.utility.report.Bug;
import org.testng.annotations.AfterClass; import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterMethod;
import org.testng.annotations.DataProvider; import org.testng.annotations.DataProvider;
@@ -163,7 +167,7 @@ public class UnfiledContainerTests extends BaseRMRestTest
public void createUnfiledRecordFolderChild(String folderType) throws Exception public void createUnfiledRecordFolderChild(String folderType) throws Exception
{ {
String unfiledRecordFolderName = "UnfiledRecordFolder-" + getRandomAlphanumeric(); String unfiledRecordFolderName = "UnfiledRecordFolder-" + getRandomAlphanumeric();
UnfiledContainerChild unfiledRecordFolderChild = createUnfiledContainerChild(UNFILED_RECORDS_CONTAINER_ALIAS, unfiledRecordFolderName, UNFILED_RECORD_FOLDER_TYPE); UnfiledContainerChild unfiledRecordFolderChild = createUnfiledContainerChild(UNFILED_RECORDS_CONTAINER_ALIAS, unfiledRecordFolderName, folderType);
assertNotNull(unfiledRecordFolderChild.getId()); assertNotNull(unfiledRecordFolderChild.getId());
@@ -185,6 +189,39 @@ public class UnfiledContainerTests extends BaseRMRestTest
getRestAPIFactory().getUnfiledContainersAPI().getUnfiledContainer(UNFILED_RECORDS_CONTAINER_ALIAS).getId()); getRestAPIFactory().getUnfiledContainersAPI().getUnfiledContainer(UNFILED_RECORDS_CONTAINER_ALIAS).getId());
} }
@Test
( description = "Create duplicate unfiled folder child",
dataProvider = "unfiledFolderTypes"
)
@Bug(id ="RM-5116, RM-5148")
public void createDuplicateUnfiledFolderChild(String folderType) throws Exception
{
String unfiledRecordFolderName = "UnfiledRecordFolder-" + getRandomAlphanumeric();
UnfiledContainerChild unfiledRecordFolderChild = createUnfiledContainerChild(UNFILED_RECORDS_CONTAINER_ALIAS,
unfiledRecordFolderName, folderType);
// Verify the status code
assertStatusCode(CREATED);
assertEquals(unfiledRecordFolderChild.getName(), unfiledRecordFolderName);
// create the same unfiled folder
UnfiledContainerChild unfiledRecordFolderDuplicate = getRestAPIFactory().getUnfiledContainersAPI()
.createUnfiledContainerChild(createUnfiledContainerChildModel(unfiledRecordFolderName, folderType),
UNFILED_RECORDS_CONTAINER_ALIAS);
// Verify the status code
assertStatusCode(CONFLICT);
// create the same unfiled folder with the autoRename parameter on true
unfiledRecordFolderDuplicate = getRestAPIFactory().getUnfiledContainersAPI()
.createUnfiledContainerChild(createUnfiledContainerChildModel(unfiledRecordFolderName, folderType),UNFILED_RECORDS_CONTAINER_ALIAS,"autoRename=true");
//verify the response status code
assertStatusCode(CREATED);
assertNotEquals(unfiledRecordFolderDuplicate.getName(), unfiledRecordFolderName);
assertTrue(unfiledRecordFolderDuplicate.getName().startsWith(unfiledRecordFolderName));
}
/** /**
* <pre> * <pre>
* Given that an unfiled records container exists * Given that an unfiled records container exists

View File

@@ -58,6 +58,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.fileplans.FilePlanChildrenRelation"> <bean class="org.alfresco.rm.rest.api.fileplans.FilePlanChildrenRelation">
@@ -65,12 +66,14 @@
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="searchTypesFactory" ref="searchTypesFactory" /> <property name="searchTypesFactory" ref="searchTypesFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerEntityResource"> <bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerEntityResource">
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerChildrenRelation"> <bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerChildrenRelation">
@@ -85,6 +88,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.unfiledrecordfolders.UnfiledRecordFolderChildrenRelation"> <bean class="org.alfresco.rm.rest.api.unfiledrecordfolders.UnfiledRecordFolderChildrenRelation">
@@ -99,6 +103,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.recordcategories.RecordCategoryChildrenRelation"> <bean class="org.alfresco.rm.rest.api.recordcategories.RecordCategoryChildrenRelation">
@@ -106,12 +111,14 @@
<property name="searchTypesFactory" ref="searchTypesFactory" /> <property name="searchTypesFactory" ref="searchTypesFactory" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.recordfolders.RecordFolderEntityResource"> <bean class="org.alfresco.rm.rest.api.recordfolders.RecordFolderEntityResource">
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.recordfolders.RecordFolderChildrenRelation"> <bean class="org.alfresco.rm.rest.api.recordfolders.RecordFolderChildrenRelation">
@@ -128,6 +135,7 @@
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="recordService" ref="RecordService"/> <property name="recordService" ref="RecordService"/>
<property name="nodeService" ref="NodeService"/> <property name="nodeService" ref="NodeService"/>
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.files.FilesEntityResource"> <bean class="org.alfresco.rm.rest.api.files.FilesEntityResource">
@@ -142,6 +150,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.transfercontainers.TransferContainerChildrenRelation"> <bean class="org.alfresco.rm.rest.api.transfercontainers.TransferContainerChildrenRelation">

View File

@@ -33,12 +33,15 @@ import static org.alfresco.util.ParameterCheck.mandatory;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.alfresco.query.PagingResults; import org.alfresco.query.PagingResults;
import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.node.getchildren.FilterProp; import org.alfresco.repo.node.getchildren.FilterProp;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.api.impl.Util; import org.alfresco.rest.api.impl.Util;
import org.alfresco.rest.api.model.UserInfo; import org.alfresco.rest.api.model.UserInfo;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
@@ -51,11 +54,13 @@ import org.alfresco.rm.rest.api.impl.ApiNodesModelFactory;
import org.alfresco.rm.rest.api.impl.FilePlanComponentsApiUtils; import org.alfresco.rm.rest.api.impl.FilePlanComponentsApiUtils;
import org.alfresco.rm.rest.api.impl.SearchTypesFactory; import org.alfresco.rm.rest.api.impl.SearchTypesFactory;
import org.alfresco.rm.rest.api.model.FilePlan; import org.alfresco.rm.rest.api.model.FilePlan;
import org.alfresco.rm.rest.api.model.Record;
import org.alfresco.rm.rest.api.model.RecordCategory; import org.alfresco.rm.rest.api.model.RecordCategory;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
@@ -76,6 +81,7 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private SearchTypesFactory searchTypesFactory; private SearchTypesFactory searchTypesFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -97,6 +103,11 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read
this.searchTypesFactory = searchTypesFactory; this.searchTypesFactory = searchTypesFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -179,16 +190,32 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read
} }
NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType); NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType);
List<RecordCategory> result = new ArrayList<>(nodeInfos.size()); RetryingTransactionCallback<List<NodeRef>> callback = new RetryingTransactionCallback<List<NodeRef>>()
Map<String, UserInfo> mapUserInfo = new HashMap<>(); {
public List<NodeRef> execute()
{
List<NodeRef> createdNodes = new LinkedList<>();
for (RecordCategory nodeInfo : nodeInfos) for (RecordCategory nodeInfo : nodeInfos)
{ {
// Create the node // Create the node
nodeInfo.setNodeType(RECORD_CATEGORY_TYPE); nodeInfo.setNodeType(RECORD_CATEGORY_TYPE);
NodeRef newNode = apiUtils.createRMNode(parentNodeRef, nodeInfo, parameters); NodeRef newNodeRef = apiUtils.createRMNode(parentNodeRef, nodeInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(newNode); createdNodes.add(newNodeRef);
}
return createdNodes;
}
};
List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// Get the nodes info
List<RecordCategory> result = new ArrayList<>(nodeInfos.size());
Map<String, UserInfo> mapUserInfo = new HashMap<>();
for (NodeRef newNodeRef : createdNodes)
{
FileInfo info = fileFolderService.getFileInfo(newNodeRef);
result.add(nodesModelFactory.createRecordCategory(info, parameters, mapUserInfo, false)); result.add(nodesModelFactory.createRecordCategory(info, parameters, mapUserInfo, false));
} }
return result; return result;
} }
} }

View File

@@ -30,6 +30,7 @@ package org.alfresco.rm.rest.api.fileplans;
import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.checkNotBlank; import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.checkNotBlank;
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
@@ -43,6 +44,7 @@ import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
@@ -60,6 +62,7 @@ public class FilePlanEntityResource
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -76,6 +79,11 @@ public class FilePlanEntityResource
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -117,9 +125,26 @@ public class FilePlanEntityResource
throw new EntityNotFoundException(filePlanId); throw new EntityNotFoundException(filePlanId);
} }
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType);
apiUtils.updateNode(nodeRef, filePlanInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(nodeRef); RetryingTransactionCallback<Void> updateCallback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, filePlanInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(updateCallback, false, true);
RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(nodeRef);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
return nodesModelFactory.createFilePlan(info, parameters, null, false); return nodesModelFactory.createFilePlan(info, parameters, null, false);
} }
} }

View File

@@ -628,7 +628,7 @@ public class FilePlanComponentsApiUtils
QName typeQName = nodes.createQName(nodeType); QName typeQName = nodes.createQName(nodeType);
// Existing file/folder name handling // Existing file/folder name handling
if (TYPES_CAN_CREATE.contains(typeQName) && autoRename) if (TYPES_CAN_USE_AUTORENAME.contains(typeQName) && autoRename)
{ {
NodeRef existingNode = nodeService.getChildByName(parentNodeRef, ContentModel.ASSOC_CONTAINS, nodeName); NodeRef existingNode = nodeService.getChildByName(parentNodeRef, ContentModel.ASSOC_CONTAINS, nodeName);
if (existingNode != null) if (existingNode != null)

View File

@@ -26,6 +26,7 @@
*/ */
package org.alfresco.rm.rest.api.model; package org.alfresco.rm.rest.api.model;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
@@ -50,6 +51,8 @@ public class UploadInfo
public UploadInfo(FormData formData) public UploadInfo(FormData formData)
{ {
properties = new HashMap<>();
for (FormData.FormField field : formData.getFields()) for (FormData.FormField field : formData.getFields())
{ {
switch (field.getName().toLowerCase()) switch (field.getName().toLowerCase())

View File

@@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
@@ -43,6 +44,7 @@ import org.alfresco.rm.rest.api.model.RecordCategory;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -62,6 +64,7 @@ public class RecordCategoriesEntityResource implements
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -78,6 +81,11 @@ public class RecordCategoriesEntityResource implements
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -111,9 +119,26 @@ public class RecordCategoriesEntityResource implements
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordCategoryId, RecordsManagementModel.TYPE_RECORD_CATEGORY); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordCategoryId, RecordsManagementModel.TYPE_RECORD_CATEGORY);
apiUtils.updateNode(nodeRef, recordCategoryInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(nodeRef); RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, recordCategoryInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(nodeRef);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
return nodesModelFactory.createRecordCategory(info, parameters, null, false); return nodesModelFactory.createRecordCategory(info, parameters, null, false);
} }

View File

@@ -36,6 +36,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -44,6 +45,7 @@ import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.query.PagingResults; import org.alfresco.query.PagingResults;
import org.alfresco.repo.node.getchildren.FilterProp; import org.alfresco.repo.node.getchildren.FilterProp;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.api.impl.Util; import org.alfresco.rest.api.impl.Util;
import org.alfresco.rest.api.model.UserInfo; import org.alfresco.rest.api.model.UserInfo;
@@ -62,6 +64,7 @@ import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
/** /**
@@ -83,6 +86,7 @@ public class RecordCategoryChildrenRelation implements RelationshipResourceActio
private SearchTypesFactory searchTypesFactory; private SearchTypesFactory searchTypesFactory;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -104,6 +108,11 @@ public class RecordCategoryChildrenRelation implements RelationshipResourceActio
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
@WebApiDescription(title = "Return a paged list of record category children for the container identified by 'recordCategoryId'") @WebApiDescription(title = "Return a paged list of record category children for the container identified by 'recordCategoryId'")
public CollectionWithPagingInfo<RecordCategoryChild> readAll(String recordCategoryId, Parameters parameters) public CollectionWithPagingInfo<RecordCategoryChild> readAll(String recordCategoryId, Parameters parameters)
@@ -167,18 +176,33 @@ public class RecordCategoryChildrenRelation implements RelationshipResourceActio
List<RecordCategoryChild> result = new ArrayList<>(nodeInfos.size()); List<RecordCategoryChild> result = new ArrayList<>(nodeInfos.size());
Map<String, UserInfo> mapUserInfo = new HashMap<>(); Map<String, UserInfo> mapUserInfo = new HashMap<>();
RetryingTransactionCallback<List<NodeRef>> callback = new RetryingTransactionCallback<List<NodeRef>>()
{
public List<NodeRef> execute()
{
List<NodeRef> createdNodes = new LinkedList<>();
for (RecordCategoryChild nodeInfo : nodeInfos) for (RecordCategoryChild nodeInfo : nodeInfos)
{ {
// Resolve the parent node // Resolve the parent node
NodeRef nodeParent = parentNodeRef; NodeRef nodeParent = parentNodeRef;
if (StringUtils.isNoneBlank(nodeInfo.getRelativePath())) if (StringUtils.isNoneBlank(nodeInfo.getRelativePath()))
{ {
nodeParent = apiUtils.lookupAndValidateRelativePath(parentNodeRef, nodeInfo.getRelativePath(), RecordsManagementModel.TYPE_RECORD_CATEGORY); nodeParent = apiUtils.lookupAndValidateRelativePath(parentNodeRef, nodeInfo.getRelativePath(),
RecordsManagementModel.TYPE_RECORD_CATEGORY);
} }
// Create the node // Create the node
NodeRef newNode = apiUtils.createRMNode(nodeParent, nodeInfo, parameters); NodeRef newNode = apiUtils.createRMNode(nodeParent, nodeInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(newNode); createdNodes.add(newNode);
}
return createdNodes;
}
};
List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
for (NodeRef nodeInfo : createdNodes)
{
FileInfo info = fileFolderService.getFileInfo(nodeInfo);
result.add(nodesModelFactory.createRecordCategoryChild(info, parameters, mapUserInfo, false)); result.add(nodesModelFactory.createRecordCategoryChild(info, parameters, mapUserInfo, false));
} }

View File

@@ -173,7 +173,7 @@ public class RecordFolderChildrenRelation implements RelationshipResourceAction.
return createdNodes; return createdNodes;
} }
}; };
List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback); List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// Get the nodes info // Get the nodes info
List<Record> result = new LinkedList<>(); List<Record> result = new LinkedList<>();
@@ -211,7 +211,7 @@ public class RecordFolderChildrenRelation implements RelationshipResourceAction.
uploadInfo.getContent().getInputStream()); uploadInfo.getContent().getInputStream());
} }
}; };
NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback); NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// Get file info for response // Get file info for response
FileInfo info = fileFolderService.getFileInfo(newNode); FileInfo info = fileFolderService.getFileInfo(newNode);

View File

@@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.resource.EntityResource; import org.alfresco.rest.framework.resource.EntityResource;
@@ -42,6 +43,7 @@ import org.alfresco.rm.rest.api.model.RecordFolder;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -59,6 +61,7 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -75,6 +78,11 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -106,9 +114,26 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordFolderId, RecordsManagementModel.TYPE_RECORD_FOLDER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordFolderId, RecordsManagementModel.TYPE_RECORD_FOLDER);
apiUtils.updateNode(nodeRef, recordFolderInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(nodeRef); RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, recordFolderInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(nodeRef);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
return nodesModelFactory.createRecordFolder(info, parameters, null, false); return nodesModelFactory.createRecordFolder(info, parameters, null, false);
} }

View File

@@ -34,6 +34,7 @@ import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.node.integrity.IntegrityException;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.framework.BinaryProperties; import org.alfresco.rest.framework.BinaryProperties;
import org.alfresco.rest.framework.Operation; import org.alfresco.rest.framework.Operation;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
@@ -56,6 +57,7 @@ import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.model.FileNotFoundException; import org.alfresco.service.cmr.model.FileNotFoundException;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.ConcurrencyFailureException; import org.springframework.dao.ConcurrencyFailureException;
@@ -80,6 +82,7 @@ public class RecordsEntityResource implements BinaryResourceAction.Read,
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private RecordService recordService; private RecordService recordService;
private NodeService nodeService; private NodeService nodeService;
private TransactionService transactionService;
public void setNodesModelFactory(ApiNodesModelFactory nodesModelFactory) public void setNodesModelFactory(ApiNodesModelFactory nodesModelFactory)
{ {
@@ -105,6 +108,12 @@ public class RecordsEntityResource implements BinaryResourceAction.Read,
{ {
this.fileFolderService = fileFolderService; this.fileFolderService = fileFolderService;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
/** /**
* Download content * Download content
* *
@@ -197,10 +206,26 @@ public class RecordsEntityResource implements BinaryResourceAction.Read,
NodeRef record = apiUtils.validateRecord(recordId); NodeRef record = apiUtils.validateRecord(recordId);
// update info // update info
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(record, recordInfo, parameters); apiUtils.updateNode(record, recordInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// return record state // return record state
FileInfo info = fileFolderService.getFileInfo(record); RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(record);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
apiUtils.postActivity(info, recordInfo.getParentId(), ActivityType.FILE_UPDATED); apiUtils.postActivity(info, recordInfo.getParentId(), ActivityType.FILE_UPDATED);
return nodesModelFactory.createRecord(info, parameters, null, false); return nodesModelFactory.createRecord(info, parameters, null, false);
} }

View File

@@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
@@ -43,6 +44,7 @@ import org.alfresco.rm.rest.api.model.TransferContainer;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -60,6 +62,7 @@ public class TransferContainerEntityResource implements
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -76,6 +79,11 @@ public class TransferContainerEntityResource implements
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -108,9 +116,27 @@ public class TransferContainerEntityResource implements
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(transferContainerId, RecordsManagementModel.TYPE_TRANSFER_CONTAINER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(transferContainerId, RecordsManagementModel.TYPE_TRANSFER_CONTAINER);
apiUtils.updateTransferContainer(nodeRef, transferContainerInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(nodeRef); // update info
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateTransferContainer(nodeRef, transferContainerInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(nodeRef);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
return nodesModelFactory.createTransferContainer(info, parameters, null, false); return nodesModelFactory.createTransferContainer(info, parameters, null, false);
} }
} }

View File

@@ -192,7 +192,7 @@ public class UnfiledContainerChildrenRelation implements RelationshipResourceAct
return createdNodes; return createdNodes;
} }
}; };
List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback); List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// Get the nodes info // Get the nodes info
List<UnfiledContainerChild> result = new LinkedList<>(); List<UnfiledContainerChild> result = new LinkedList<>();
@@ -226,7 +226,7 @@ public class UnfiledContainerChildrenRelation implements RelationshipResourceAct
return apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), uploadInfo.getContent().getInputStream()); return apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), uploadInfo.getContent().getInputStream());
} }
}; };
NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback); NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// Get file info for response // Get file info for response
FileInfo info = fileFolderService.getFileInfo(newNode); FileInfo info = fileFolderService.getFileInfo(newNode);

View File

@@ -32,6 +32,7 @@ import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.resource.EntityResource; import org.alfresco.rest.framework.resource.EntityResource;
@@ -43,6 +44,7 @@ import org.alfresco.rm.rest.api.model.UnfiledContainer;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -60,6 +62,7 @@ public class UnfiledContainerEntityResource
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -76,6 +79,11 @@ public class UnfiledContainerEntityResource
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -107,9 +115,26 @@ public class UnfiledContainerEntityResource
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledContainerId, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledContainerId, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER);
apiUtils.updateNode(nodeRef, unfiledContainerInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(nodeRef); RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, unfiledContainerInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(nodeRef);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
apiUtils.postActivity(info, unfiledContainerInfo.getParentId(), ActivityType.FILE_UPDATED); apiUtils.postActivity(info, unfiledContainerInfo.getParentId(), ActivityType.FILE_UPDATED);
return nodesModelFactory.createUnfiledContainer(info, parameters, null, false); return nodesModelFactory.createUnfiledContainer(info, parameters, null, false);
} }

View File

@@ -67,6 +67,7 @@ import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService; import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.Pair;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.extensions.webscripts.servlet.FormData; import org.springframework.extensions.webscripts.servlet.FormData;
@@ -198,7 +199,7 @@ public class UnfiledRecordFolderChildrenRelation implements RelationshipResource
return createdNodes; return createdNodes;
} }
}; };
List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback); List<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
// Get the nodes info // Get the nodes info
List<UnfiledRecordFolderChild> result = new LinkedList<>(); List<UnfiledRecordFolderChild> result = new LinkedList<>();
@@ -224,21 +225,25 @@ public class UnfiledRecordFolderChildrenRelation implements RelationshipResource
// Retrieve the input data and resolve the parent node // Retrieve the input data and resolve the parent node
final UploadInfo uploadInfo = new UploadInfo(formData); final UploadInfo uploadInfo = new UploadInfo(formData);
final NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER, uploadInfo.getRelativePath());
// Create the record // Create the record - returns pair(newNode,parentNode)
RetryingTransactionCallback<NodeRef> callback = new RetryingTransactionCallback<NodeRef>() RetryingTransactionCallback<Pair<NodeRef,NodeRef>> callback = new RetryingTransactionCallback<Pair<NodeRef,NodeRef>>()
{ {
public NodeRef execute() public Pair<NodeRef,NodeRef> execute()
{ {
return apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), uploadInfo.getContent().getInputStream()); final NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER, uploadInfo.getRelativePath());
NodeRef newNode = apiUtils.uploadRecord(parentNodeRef, uploadInfo.getFileName(), uploadInfo.getNodeType(), uploadInfo.getProperties(), uploadInfo.getContent().getInputStream());
return new Pair<NodeRef, NodeRef>(newNode, parentNodeRef);
} }
}; };
NodeRef newNode = transactionService.getRetryingTransactionHelper().doInTransaction(callback); Pair<NodeRef,NodeRef> nodeAndParentInfo = transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
NodeRef newNode = nodeAndParentInfo.getFirst();
NodeRef parent = nodeAndParentInfo.getSecond();
// Get file info for response // Get file info for response
FileInfo info = fileFolderService.getFileInfo(newNode); FileInfo info = fileFolderService.getFileInfo(newNode);
apiUtils.postActivity(info, parentNodeRef, ActivityType.FILE_ADDED); apiUtils.postActivity(info, parent, ActivityType.FILE_ADDED);
return nodesModelFactory.createUnfiledRecordFolderChild(info, parameters, null, false); return nodesModelFactory.createUnfiledRecordFolderChild(info, parameters, null, false);
} }
} }

View File

@@ -32,6 +32,7 @@ import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
@@ -44,6 +45,7 @@ import org.alfresco.rm.rest.api.model.UnfiledRecordFolder;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -61,6 +63,8 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
this.apiUtils = apiUtils; this.apiUtils = apiUtils;
@@ -76,6 +80,11 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -110,9 +119,26 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER);
apiUtils.updateNode(nodeRef, unfiledRecordFolderInfo, parameters);
FileInfo info = fileFolderService.getFileInfo(nodeRef); RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, unfiledRecordFolderInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false, true);
RetryingTransactionCallback<FileInfo> readCallback = new RetryingTransactionCallback<FileInfo>()
{
public FileInfo execute()
{
return fileFolderService.getFileInfo(nodeRef);
}
};
FileInfo info = transactionService.getRetryingTransactionHelper().doInTransaction(readCallback, false, true);
apiUtils.postActivity(info, unfiledRecordFolderInfo.getParentId(), ActivityType.FILE_UPDATED); apiUtils.postActivity(info, unfiledRecordFolderInfo.getParentId(), ActivityType.FILE_UPDATED);
return nodesModelFactory.createUnfiledRecordFolder(info, parameters, null, false); return nodesModelFactory.createUnfiledRecordFolder(info, parameters, null, false);
} }