Search in sources :

Example 1 with Record

use of org.alfresco.rest.rm.community.model.record.Record in project records-management by Alfresco.

the class DeclareInPlaceRecordsUnitTest method testDeclareAsRecordWithNotDeclaredFail.

@Test
public void testDeclareAsRecordWithNotDeclaredFail() throws Exception {
    String fileId = "testFileId";
    String username = "testUserName";
    String password = "testPassword";
    long delay = 10L;
    declareInPlaceRecords.setDeclareInPlaceRecordDelay(delay);
    Event mockedEvent = mock(Event.class);
    DBObject mockedData = mock(DBObject.class);
    when(mockedData.get(FIELD_ID)).thenReturn(fileId);
    when(mockedData.get(FIELD_USERNAME)).thenReturn(username);
    when(mockedData.get(FIELD_PASSWORD)).thenReturn(password);
    when(mockedEvent.getData()).thenReturn(mockedData);
    RecordData dbRecord = new RecordData(fileId, RecordContext.IN_PLACE_RECORD, "testFileName", "testFilePath", "testInPlacePath", ExecutionState.SCHEDULED);
    when(mockedRecordService.getRecord(fileId)).thenReturn(dbRecord);
    FilesAPI mockedFilesAPI = mock(FilesAPI.class);
    when(mockedRestAPIFactory.getFilesAPI(any(UserModel.class))).thenReturn(mockedFilesAPI);
    Record record = mock(Record.class);
    when(record.getName()).thenReturn("newRecordName");
    when(record.getParentId()).thenReturn("recordParentId");
    when(mockedFilesAPI.declareAsRecord(fileId)).thenReturn(record);
    RMRestWrapper mockedRmRestWrapper = mock(RMRestWrapper.class);
    when(mockedRmRestWrapper.getStatusCode()).thenReturn(Integer.toString(HttpStatus.CREATED.value()));
    when(mockedRestAPIFactory.getRmRestWrapper()).thenReturn(mockedRmRestWrapper);
    UnfiledContainer mockedUnfiledContainer = mock(UnfiledContainer.class);
    when(mockedUnfiledContainer.getId()).thenReturn("unfiledContainerID");
    UnfiledContainerAPI mockedUnfiledContainerAPI = mock(UnfiledContainerAPI.class);
    when(mockedUnfiledContainerAPI.getUnfiledContainer(FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS)).thenReturn(mockedUnfiledContainer);
    when(mockedRestAPIFactory.getUnfiledContainersAPI()).thenReturn(mockedUnfiledContainerAPI);
    when(mockedApplicationContext.getBean("restAPIFactory", RestAPIFactory.class)).thenReturn(mockedRestAPIFactory);
    EventResult result = declareInPlaceRecords.processEvent(mockedEvent, new StopWatch());
    assertEquals(false, result.isSuccess());
    assertEquals("Declaring record with id=" + fileId + " didn't take place.", result.getData());
}
Also used : RecordData(org.alfresco.bm.dataload.rm.services.RecordData) DBObject(com.mongodb.DBObject) StopWatch(org.apache.commons.lang3.time.StopWatch) UserModel(org.alfresco.utility.model.UserModel) UnfiledContainer(org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer) FilesAPI(org.alfresco.rest.rm.community.requests.gscore.api.FilesAPI) EventResult(org.alfresco.bm.event.EventResult) Event(org.alfresco.bm.event.Event) Record(org.alfresco.rest.rm.community.model.record.Record) RMRestWrapper(org.alfresco.rest.core.RMRestWrapper) UnfiledContainerAPI(org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI) Test(org.junit.Test)

Example 2 with Record

use of org.alfresco.rest.rm.community.model.record.Record in project records-management by Alfresco.

the class LoadRecordUnitTest method testUploadRecordOperation.

@Test
public void testUploadRecordOperation() throws Exception {
    loadSingleComponent.setEventNameComplete("recordLoaded");
    Event mockedEvent = mock(Event.class);
    DBObject mockedData = mock(DBObject.class);
    when(mockedData.get(FIELD_CONTEXT)).thenReturn("someContext");
    when(mockedData.get(FIELD_PATH)).thenReturn("/aPath");
    when(mockedData.get(FIELD_LOAD_OPERATION)).thenReturn(LOAD_RECORD_OPERATION);
    when(mockedEvent.getData()).thenReturn(mockedData);
    FolderData mockedFolder = mock(FolderData.class);
    when(mockedFolder.getId()).thenReturn("folderId");
    when(mockedFolder.getPath()).thenReturn("/aPath");
    when(mockedFolder.getContext()).thenReturn("someContext");
    when(mockedFileFolderService.getFolder("someContext", "/aPath")).thenReturn(mockedFolder);
    when(mockedEvent.getSessionId()).thenReturn("someId");
    when(mockedRestApiFactory.getRecordFolderAPI(any(UserModel.class))).thenReturn(mockedRecordFolderAPI);
    RecordFolder mockedFilePlanComponent = mock(RecordFolder.class);
    when(mockedFilePlanComponent.getId()).thenReturn("folderId");
    when(mockedRecordFolderAPI.getRecordFolder("folderId")).thenReturn(mockedFilePlanComponent);
    File mockedFile = mock(File.class);
    when(mockedTestFileService.getFile()).thenReturn(mockedFile);
    mockSiteAndUserData();
    EventResult result = loadSingleComponent.processEvent(mockedEvent, new StopWatch());
    verify(mockedTestFileService, times(1)).getFile();
    verify(mockedRecordFolderAPI, times(1)).createRecord(any(Record.class), eq("folderId"), any(File.class));
    verify(mockedFileFolderService, times(1)).incrementFileCount(any(String.class), any(String.class), any(Long.class));
    assertEquals(true, result.isSuccess());
    DBObject data = (DBObject) result.getData();
    assertEquals("Created 1 record.", data.get("msg"));
    assertEquals("/aPath", data.get(FIELD_PATH));
    assertEquals("aUser", data.get("username"));
    assertEquals(1, result.getNextEvents().size());
    Event event = result.getNextEvents().get(0);
    assertEquals("recordLoaded", event.getName());
    DBObject eventData = (DBObject) event.getData();
    assertEquals("someContext", eventData.get(FIELD_CONTEXT));
    assertEquals("/aPath", eventData.get(FIELD_PATH));
}
Also used : UserModel(org.alfresco.utility.model.UserModel) EventResult(org.alfresco.bm.event.EventResult) RecordFolder(org.alfresco.rest.rm.community.model.recordfolder.RecordFolder) FolderData(org.alfresco.bm.cm.FolderData) Event(org.alfresco.bm.event.Event) Record(org.alfresco.rest.rm.community.model.record.Record) DBObject(com.mongodb.DBObject) File(java.io.File) StopWatch(org.apache.commons.lang3.time.StopWatch) LoadSingleComponentUnitTest(org.alfresco.bm.dataload.LoadSingleComponentUnitTest) Test(org.junit.Test)

Example 3 with Record

use of org.alfresco.rest.rm.community.model.record.Record in project records-management by Alfresco.

the class RMBaseEventProcessor method uploadElectronicRecordInRecordFolder.

/**
 * Helper method for uploading one record on specified record folder.
 *
 * @param folder - record folder that will contain uploaded record
 * @param userModel - UserModel instance with wich rest api will be called
 * @param nameIdentifier - a string identifier that the uploaded record will start with
 * @param loadFilePlanComponentDelay - delay between upload record operations
 * @throws Exception
 */
public void uploadElectronicRecordInRecordFolder(FolderData folder, UserModel userModel, String nameIdentifier, long loadFilePlanComponentDelay) throws Exception {
    String unique;
    String folderPath = folder.getPath();
    File file = testFileService.getFile();
    if (file == null) {
        throw new RuntimeException("No test files exist for upload: " + testFileService);
    }
    unique = UUID.randomUUID().toString();
    String newfilePlanComponentName = nameIdentifier + unique + "-" + file.getName();
    String newfilePlanComponentTitle = "title: " + newfilePlanComponentName;
    // Build record properties
    Record recordModel = Record.builder().name(newfilePlanComponentName).nodeType(CONTENT_TYPE).properties(RecordProperties.builder().title(newfilePlanComponentTitle).description(EMPTY).build()).build();
    RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI(userModel);
    recordFolderAPI.createRecord(recordModel, folder.getId(), file);
    TimeUnit.MILLISECONDS.sleep(loadFilePlanComponentDelay);
    fileFolderService.incrementFileCount(folder.getContext(), folderPath, 1);
}
Also used : Record(org.alfresco.rest.rm.community.model.record.Record) File(java.io.File) RecordFolderAPI(org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI) UnfiledRecordFolderAPI(org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI)

Example 4 with Record

use of org.alfresco.rest.rm.community.model.record.Record in project records-management by Alfresco.

the class RMBaseEventProcessor method createNonElectonicRecordInRecordFolder.

/**
 * Helper method for creating a non-electronic document in specified record folder.
 *
 * @param folder - record folder that will contain created non-electronic document
 * @param userModel - UserModel instance with wich rest api will be called
 * @param nameIdentifier - a string identifier that the created non-electronic document will start with
 * @param loadFilePlanComponentDelay - delay between creation of non-electronic documents
 * @throws Exception
 */
public void createNonElectonicRecordInRecordFolder(FolderData folder, UserModel userModel, String nameIdentifier, long loadFilePlanComponentDelay) throws Exception {
    String unique;
    String folderPath = folder.getPath();
    unique = UUID.randomUUID().toString();
    String newfilePlanComponentName = nameIdentifier + unique;
    String newfilePlanComponentTitle = "title: " + newfilePlanComponentName;
    // Build non electronic record properties
    Record recordModel = Record.builder().name(newfilePlanComponentName).nodeType(NON_ELECTRONIC_RECORD_TYPE).properties(RecordProperties.builder().title(newfilePlanComponentTitle).description(EMPTY).build()).build();
    RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI(userModel);
    String parentId = folder.getId();
    recordFolderAPI.createRecord(recordModel, parentId);
    TimeUnit.MILLISECONDS.sleep(loadFilePlanComponentDelay);
    // Increment counts
    fileFolderService.incrementFileCount(folder.getContext(), folderPath, 1);
}
Also used : Record(org.alfresco.rest.rm.community.model.record.Record) RecordFolderAPI(org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI) UnfiledRecordFolderAPI(org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI)

Example 5 with Record

use of org.alfresco.rest.rm.community.model.record.Record in project records-management by Alfresco.

the class DeclareInPlaceRecords method processEvent.

@Override
protected EventResult processEvent(Event event) throws Exception {
    StringBuilder eventOutputMsg = new StringBuilder("Declaring file as record: \n");
    super.suspendTimer();
    if (event == null) {
        throw new IllegalStateException("This processor requires an event.");
    }
    DBObject dataObj = (DBObject) event.getData();
    if (dataObj == null) {
        throw new IllegalStateException(MessageFormat.format(INVALID_DATA_MSG_TEMPLATE, FIELD_ID, FIELD_USERNAME, FIELD_PASSWORD));
    }
    String id = (String) dataObj.get(FIELD_ID);
    String username = (String) dataObj.get(FIELD_USERNAME);
    String password = (String) dataObj.get(FIELD_PASSWORD);
    if (isBlank(id) || isBlank(username) || isBlank(password)) {
        throw new IllegalStateException(MessageFormat.format(INVALID_DATA_MSG_TEMPLATE, FIELD_ID, FIELD_USERNAME, FIELD_PASSWORD));
    }
    try {
        // Get the record from database
        RecordData dbRecord = recordService.getRecord(id);
        if (dbRecord.getExecutionState() != ExecutionState.SCHEDULED) {
            throw new IllegalStateException("The record + " + id + " was found but it was already processed");
        }
        // Call the REST API
        super.resumeTimer();
        RestAPIFactory restAPIFactory = getRestAPIFactory();
        Record record = restAPIFactory.getFilesAPI(new UserModel(username, password)).declareAsRecord(id);
        String statusCode = restAPIFactory.getRmRestWrapper().getStatusCode();
        super.suspendTimer();
        TimeUnit.MILLISECONDS.sleep(declareInPlaceRecordDelay);
        if (HttpStatus.valueOf(Integer.parseInt(statusCode)) == HttpStatus.CREATED) {
            String recordParentId = record.getParentId();
            String unfiledContainerId = getRestAPIFactory().getUnfiledContainersAPI().getUnfiledContainer(FilePlanComponentAlias.UNFILED_RECORDS_CONTAINER_ALIAS).getId();
            if (!unfiledContainerId.equals(recordParentId)) {
                dbRecord.setExecutionState(ExecutionState.FAILED);
                recordService.updateRecord(dbRecord);
                return new EventResult("Declaring record with id=" + id + " didn't take place.", false);
            }
            eventOutputMsg.append("success");
            dbRecord.setExecutionState(ExecutionState.UNFILED_RECORD_DECLARED);
            dbRecord.setName(record.getName());
            String parentPath = fileFolderService.getFolder(recordParentId).getPath();
            fileFolderService.incrementFileCount(UNFILED_CONTEXT, parentPath, 1);
            dbRecord.setParentPath(parentPath);
        } else {
            eventOutputMsg.append("Failed with code " + statusCode + ".\n " + restAPIFactory.getRmRestWrapper().assertLastError().getBriefSummary() + ". \n" + restAPIFactory.getRmRestWrapper().assertLastError().getStackTrace());
            dbRecord.setExecutionState(ExecutionState.FAILED);
        }
        recordService.updateRecord(dbRecord);
        return new EventResult(eventOutputMsg.toString(), new Event(getEventNameInPlaceRecordsDeclared(), dataObj));
    } catch (Exception e) {
        String error = e.getMessage();
        String stack = ExceptionUtils.getStackTrace(e);
        // Grab REST API information
        DBObject data = BasicDBObjectBuilder.start().append("error", error).append(FIELD_ID, id).append(FIELD_USERNAME, username).append(FIELD_PASSWORD, password).append("stack", stack).get();
        // Build failure result
        return new EventResult(data, false);
    }
}
Also used : UserModel(org.alfresco.utility.model.UserModel) RecordData(org.alfresco.bm.dataload.rm.services.RecordData) EventResult(org.alfresco.bm.event.EventResult) RestAPIFactory(org.alfresco.rest.core.RestAPIFactory) Event(org.alfresco.bm.event.Event) Record(org.alfresco.rest.rm.community.model.record.Record) DBObject(com.mongodb.DBObject)

Aggregations

Record (org.alfresco.rest.rm.community.model.record.Record)6 DBObject (com.mongodb.DBObject)4 Event (org.alfresco.bm.event.Event)4 EventResult (org.alfresco.bm.event.EventResult)4 UserModel (org.alfresco.utility.model.UserModel)4 RecordData (org.alfresco.bm.dataload.rm.services.RecordData)3 StopWatch (org.apache.commons.lang3.time.StopWatch)3 Test (org.junit.Test)3 File (java.io.File)2 FolderData (org.alfresco.bm.cm.FolderData)2 RMRestWrapper (org.alfresco.rest.core.RMRestWrapper)2 UnfiledContainer (org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer)2 FilesAPI (org.alfresco.rest.rm.community.requests.gscore.api.FilesAPI)2 RecordFolderAPI (org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI)2 UnfiledContainerAPI (org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI)2 UnfiledRecordFolderAPI (org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI)2 LoadSingleComponentUnitTest (org.alfresco.bm.dataload.LoadSingleComponentUnitTest)1 RestAPIFactory (org.alfresco.rest.core.RestAPIFactory)1 RecordFolder (org.alfresco.rest.rm.community.model.recordfolder.RecordFolder)1