diff --git a/src/main/java/org/alfresco/com/FilePlanComponentAlias.java b/src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentAlias.java similarity index 96% rename from src/main/java/org/alfresco/com/FilePlanComponentAlias.java rename to src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentAlias.java index 13dc3dbd68..45ada4d9ec 100644 --- a/src/main/java/org/alfresco/com/FilePlanComponentAlias.java +++ b/src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentAlias.java @@ -9,7 +9,7 @@ * agreement is prohibited. * #L% */ -package org.alfresco.com; +package org.alfresco.com.fileplancomponents; /** * File plan component alias enumeration diff --git a/src/main/java/org/alfresco/com/FilePlanComponentFields.java b/src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentFields.java similarity index 94% rename from src/main/java/org/alfresco/com/FilePlanComponentFields.java rename to src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentFields.java index 76b91035c4..0f9b959462 100644 --- a/src/main/java/org/alfresco/com/FilePlanComponentFields.java +++ b/src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentFields.java @@ -9,7 +9,7 @@ * agreement is prohibited. * #L% */ -package org.alfresco.com; +package org.alfresco.com.fileplancomponents; /** * FIXME: Document me :) diff --git a/src/main/java/org/alfresco/com/FilePlanComponentType.java b/src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentType.java similarity index 97% rename from src/main/java/org/alfresco/com/FilePlanComponentType.java rename to src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentType.java index 432178c75e..ebf8cc070d 100644 --- a/src/main/java/org/alfresco/com/FilePlanComponentType.java +++ b/src/main/java/org/alfresco/com/fileplancomponents/FilePlanComponentType.java @@ -9,7 +9,7 @@ * agreement is prohibited. * #L% */ -package org.alfresco.com; +package org.alfresco.com.fileplancomponents; /** * File plan component type enumeration diff --git a/src/main/java/org/alfresco/com/site/RMSiteCompliance.java b/src/main/java/org/alfresco/com/site/RMSiteCompliance.java new file mode 100644 index 0000000000..84dd6b00f6 --- /dev/null +++ b/src/main/java/org/alfresco/com/site/RMSiteCompliance.java @@ -0,0 +1,24 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.com.site; + +/** + * FIXME: Document me :) + * + * @author Tuna Aksoy + * @since 1.0 + */ +public enum RMSiteCompliance +{ + STANDARD, + DOD5015; +} diff --git a/src/main/java/org/alfresco/com/site/RMSiteFields.java b/src/main/java/org/alfresco/com/site/RMSiteFields.java new file mode 100644 index 0000000000..d0ce8303b6 --- /dev/null +++ b/src/main/java/org/alfresco/com/site/RMSiteFields.java @@ -0,0 +1,26 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.com.site; + +/** + * FIXME: Document me :) + * + * @author Tuna Aksoy + * @since 1.0 + */ +public class RMSiteFields +{ + public static final String ID = "id"; + public static final String COMPLIANCE = "compliance"; + public static final String TITLE = "title"; + public static final String DESCRIPTION = "description"; +} diff --git a/src/main/java/org/alfresco/rest/model/FilePlanComponent.java b/src/main/java/org/alfresco/rest/model/fileplancomponents/FilePlanComponent.java similarity index 96% rename from src/main/java/org/alfresco/rest/model/FilePlanComponent.java rename to src/main/java/org/alfresco/rest/model/fileplancomponents/FilePlanComponent.java index 9403411bed..420233847c 100644 --- a/src/main/java/org/alfresco/rest/model/FilePlanComponent.java +++ b/src/main/java/org/alfresco/rest/model/fileplancomponents/FilePlanComponent.java @@ -9,9 +9,9 @@ * agreement is prohibited. * #L% */ -package org.alfresco.rest.model; +package org.alfresco.rest.model.fileplancomponents; -import static org.alfresco.com.FilePlanComponentFields.PROPERTIES; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/org/alfresco/rest/model/FilePlanComponentProperties.java b/src/main/java/org/alfresco/rest/model/fileplancomponents/FilePlanComponentProperties.java similarity index 85% rename from src/main/java/org/alfresco/rest/model/FilePlanComponentProperties.java rename to src/main/java/org/alfresco/rest/model/fileplancomponents/FilePlanComponentProperties.java index 311779450e..d51c86e52c 100644 --- a/src/main/java/org/alfresco/rest/model/FilePlanComponentProperties.java +++ b/src/main/java/org/alfresco/rest/model/fileplancomponents/FilePlanComponentProperties.java @@ -9,11 +9,11 @@ * agreement is prohibited. * #L% */ -package org.alfresco.rest.model; +package org.alfresco.rest.model.fileplancomponents; -import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_HOLD_REASON; -import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_TITLE; -import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_HOLD_REASON; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/src/main/java/org/alfresco/rest/model/site/RMSite.java b/src/main/java/org/alfresco/rest/model/site/RMSite.java new file mode 100644 index 0000000000..680777f96f --- /dev/null +++ b/src/main/java/org/alfresco/rest/model/site/RMSite.java @@ -0,0 +1,49 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.model.site; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import org.alfresco.com.site.RMSiteCompliance; +import org.alfresco.rest.model.RestSiteModel; + +/** + * FIXME: Document me :) + * + * @author Rodica Sutu + * @since 1.0 + */ +public class RMSite extends RestSiteModel +{ + @JsonProperty (required = true) + protected RMSiteCompliance compliance; + + /** + * FIXME: Document me :) + * + * @param compliance the compliance to set + */ + public void setCompliance(RMSiteCompliance compliance) + { + this.compliance = compliance; + } + + /** + * FIXME: Document me :) + * + * @return FIXME: Document me :) + */ + public RMSiteCompliance getCompliance() + { + return compliance; + } +} diff --git a/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java b/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java index 460e4eb23c..6da4b4ab49 100644 --- a/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java +++ b/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java @@ -23,7 +23,7 @@ import static org.springframework.http.HttpMethod.PUT; import com.google.gson.JsonObject; import org.alfresco.rest.core.RestAPI; -import org.alfresco.rest.model.FilePlanComponent; +import org.alfresco.rest.model.fileplancomponents.FilePlanComponent; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; diff --git a/src/main/java/org/alfresco/rest/requests/RMSiteAPI.java b/src/main/java/org/alfresco/rest/requests/RMSiteAPI.java new file mode 100644 index 0000000000..9b5a6b78d7 --- /dev/null +++ b/src/main/java/org/alfresco/rest/requests/RMSiteAPI.java @@ -0,0 +1,93 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.requests; + +import static org.alfresco.rest.core.RestRequest.requestWithBody; +import static org.alfresco.rest.core.RestRequest.simpleRequest; +import static org.springframework.http.HttpMethod.DELETE; +import static org.springframework.http.HttpMethod.GET; +import static org.springframework.http.HttpMethod.POST; +import static org.springframework.http.HttpMethod.PUT; + +import com.google.gson.JsonObject; + +import org.alfresco.rest.core.RestAPI; +import org.alfresco.rest.model.site.RMSite; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * FIXME: Document me :) + */ +@Component +@Scope (value = "prototype") +public class RMSiteAPI extends RestAPI +{ + /** + * Get the RM site + * + * @return FIXME: Document me :) + * @throws FIXME: Document me :) + */ + public RMSite getSite() throws Exception + { + return usingRestWrapper().processModel(RMSite.class, simpleRequest( + GET, + "sites/rm" + )); + } + + /** + * Create the RM site + * + * @param rmSiteProperties FIXME: Document me :) + * @return FIXME: Document me :) + * @throws Exception FIXME: Document me :) + */ + public RMSite createRMSite(JsonObject rmSiteProperties) throws Exception + { + return usingRestWrapper().processModel(RMSite.class, requestWithBody( + POST, + rmSiteProperties.toString(), + "sites" + )); + } + + /** + * Delete RM site + * + * @throws Exception FIXME: Document me :) + */ + public void deleteRMSite() throws Exception + { + usingRestWrapper().processEmptyModel(simpleRequest( + DELETE, + "sites/rm" + )); + } + + /** + * Update RM site + * + * @param rmSiteProperties FIXME: Document me :) + * @return FIXME: Document me :) + * @throws Exception FIXME: Document me :) + */ + public RMSite updateRMSite(JsonObject rmSiteProperties) throws Exception + { + return usingRestWrapper().processModel(RMSite.class, requestWithBody( + PUT, + rmSiteProperties.toString(), + "sites/rm" + )); + } +} diff --git a/src/test/java/org/alfresco/rest/fileplancomponents/RMSiteTests.java b/src/test/java/org/alfresco/rest/fileplancomponents/RMSiteTests.java new file mode 100644 index 0000000000..a6de974fb1 --- /dev/null +++ b/src/test/java/org/alfresco/rest/fileplancomponents/RMSiteTests.java @@ -0,0 +1,127 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.fileplancomponents; + +import static org.alfresco.com.site.RMSiteCompliance.STANDARD; +import static org.alfresco.com.site.RMSiteFields.COMPLIANCE; +import static org.alfresco.com.site.RMSiteFields.DESCRIPTION; +import static org.alfresco.com.site.RMSiteFields.TITLE; +import static org.jglue.fluentjson.JsonBuilderFactory.buildObject; +import static org.springframework.http.HttpStatus.CONFLICT; +import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.NO_CONTENT; +import static org.springframework.social.alfresco.api.entities.Site.Visibility.PUBLIC; +import static org.testng.Assert.assertEquals; + +import com.google.gson.JsonObject; + +import org.alfresco.rest.BaseRestTest; +import org.alfresco.rest.core.RestWrapper; +import org.alfresco.rest.model.site.RMSite; +import org.alfresco.rest.requests.RMSiteAPI; +import org.alfresco.utility.data.DataUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.testng.annotations.Test; + +/** + * FIXME: Document me :) + * FIXME: Should we use dependent tests or not? + * They were removed here but there is no guarantee for the test execution order. + * In {@link RecordCategoryTest} we create a record category first to delete it. + * Probbaly something to think about again. + * + * @author Rodica Sutu + * @since 1.0 + */ +public class RMSiteTests extends BaseRestTest +{ + @Autowired + private RMSiteAPI rmSiteAPI; + + @Autowired + private DataUser dataUser; + + // Constants + private static final String RM_ID = "rm"; + private static final String RM_TITLE = "Records Management"; + private static final String RM_DESCRIPTION = "Records Management Site"; + + @Test + ( + description = "Create RM site as admin user" + ) + public void createRMSiteAsAdminUser() throws Exception + { + RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); + + // Build the RM site properties + JsonObject rmSiteProperties = buildObject(). + add(TITLE, RM_TITLE). + add(DESCRIPTION, RM_DESCRIPTION). + add(COMPLIANCE, STANDARD.toString()). + getJson(); + + // Create the RM site + RMSite rmSite = rmSiteAPI.createRMSite(rmSiteProperties); + + // Verify the status code + restWrapper.assertStatusCodeIs(CREATED); + + // Verify the returned file plan component + assertEquals(rmSite.getId(), RM_ID); + assertEquals(rmSite.getTitle(), RM_TITLE); + assertEquals(rmSite.getDescription(), RM_DESCRIPTION); + assertEquals(rmSite.getCompliance(), STANDARD); + assertEquals(rmSite.getVisibility(), PUBLIC); + } + + @Test + ( + description = "Create RM site when site already exist admin user" + ) + public void createRMSiteWhenSiteExists() throws Exception + { + RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); + + // Construct new properties + String newTitle = RM_TITLE + "createRMSiteWhenSiteExists"; + String newDescription = RM_DESCRIPTION + "createRMSiteWhenSiteExists"; + + // Build the RM site properties + JsonObject rmSiteProperties = buildObject(). + add(TITLE, newTitle). + add(DESCRIPTION, newDescription). + add(COMPLIANCE, STANDARD.toString()). + getJson(); + + // Create the RM site + rmSiteAPI.createRMSite(rmSiteProperties); + + // Verify the status code + restWrapper.assertStatusCodeIs(CONFLICT); + } + + @Test + ( + description = "Delete RM site as admin user" + ) + public void deleteRMSite() throws Exception + { + RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); + + // Delete the RM site + rmSiteAPI.deleteRMSite(); + + // Verify the status code + restWrapper.assertStatusCodeIs(NO_CONTENT); + } +} diff --git a/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java b/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java index 54dce68633..75e243716d 100644 --- a/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java +++ b/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java @@ -13,12 +13,12 @@ package org.alfresco.rest.fileplancomponents; import static java.util.UUID.randomUUID; -import static org.alfresco.com.FilePlanComponentAlias.FILE_PLAN_ALIAS; -import static org.alfresco.com.FilePlanComponentFields.NAME; -import static org.alfresco.com.FilePlanComponentFields.NODE_TYPE; -import static org.alfresco.com.FilePlanComponentFields.PROPERTIES; -import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_TITLE; -import static org.alfresco.com.FilePlanComponentType.RECORD_CATEGORY_TYPE; +import static org.alfresco.com.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.NAME; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.NODE_TYPE; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES; +import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE; +import static org.alfresco.com.fileplancomponents.FilePlanComponentType.RECORD_CATEGORY_TYPE; import static org.jglue.fluentjson.JsonBuilderFactory.buildObject; import static org.springframework.http.HttpStatus.CREATED; import static org.springframework.http.HttpStatus.NO_CONTENT; @@ -30,8 +30,8 @@ import com.google.gson.JsonObject; import org.alfresco.rest.BaseRestTest; import org.alfresco.rest.core.RestWrapper; -import org.alfresco.rest.model.FilePlanComponent; -import org.alfresco.rest.model.FilePlanComponentProperties; +import org.alfresco.rest.model.fileplancomponents.FilePlanComponent; +import org.alfresco.rest.model.fileplancomponents.FilePlanComponentProperties; import org.alfresco.rest.requests.FilePlanComponentApi; import org.alfresco.utility.data.DataUser; import org.springframework.beans.factory.annotation.Autowired;