Creating Custom Workflows 0.8 alpha
Main Page > Development > Creating Custom Workflows
Read First
Creating your first workflow
Make sure you read the section "Read First" (above) first.
The mock situation
Collection of jpgs normalized to bmp for preservation poorly. Want to remove the bmps, from a transfer, then process it as a standard transfer. (will later be normalized to Uncompressed TIFF by archivematica).
To start
gedit /usr/share/archivematica/mysql view -> highlight mode -> source -> SQL
I find it easier to work back chronologically. The chronological order is: Watched directory watched Move to processing directory Remove .bmp files. Set permissions Move to regular processing watched directory.
So reverse is: Move to regular processing watched directory. Remove .bmp files. Move to processing directory Set permissions Watched directory watched
- Paths may be different
- patch from video video
Index: src/MCPServer/share/mysql =================================================================== --- src/MCPServer/share/mysql (revision 2328) +++ src/MCPServer/share/mysql (working copy) @@ -2774,12 +2774,62 @@ +-- Move to regular processing watched directory. -- +INSERT INTO StandardTasksConfigs (filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments) + VALUES + (NULL, NULL, NULL, FALSE, NULL, NULL, 'moveTransfer_v0.0', '"%SIPDirectory%" "%sharedPath%watchedDirectories/activeTransfers/standardTransfer/." "%SIPUUID%" "%sharedPath%" "%SIPUUID%" "%sharedPath%"'); +INSERT INTO TasksConfigs (taskType, taskTypePKReference, description) + VALUES + (0, LAST_INSERT_ID(), 'Move to standard transfer directory'); +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, LAST_INSERT_ID(), NULL); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, NULL); +set @NextMicroServiceChainLink = @MicroServiceChainLink; +-- Remove .bmp files. -- +INSERT INTO StandardTasksConfigs (filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments) + VALUES + ('.bmp', NULL, 'objects', TRUE, NULL, NULL, 'remove_v0.0', '"%relativeLocation%"'); +SET @AssignfileUUIDstoobjects = LAST_INSERT_ID(); +INSERT INTO TasksConfigs (taskType, taskTypePKReference, description) + VALUES + (1, @AssignfileUUIDstoobjects, 'Remove .bmp files'); +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, LAST_INSERT_ID(), @defaultNextChainLink); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); +set @NextMicroServiceChainLink = @MicroServiceChainLink; +-- Move to processing directory -- +-- move to processing directory -- +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, @moveToProcessingDirectoryTaskConfig, @defaultNextChainLink); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); +set @NextMicroServiceChainLink = @MicroServiceChainLink; +-- Set permissions -- +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, @setFilePermissionsTaskConfig, @defaultNextChainLink); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); +set @NextMicroServiceChainLink = @MicroServiceChainLink; +/* +Watched directory watched +/var/archivematica/sharedDirectory/watchedDirectories/example1 +*/ +INSERT INTO MicroServiceChains (startingLink, description) VALUES (@MicroServiceChainLink, 'Remove .bmp\'s before processing'); +set @MicroServiceChain = LAST_INSERT_ID(); +INSERT INTO WatchedDirectories (watchedDirectoryPath, chain, expectedType) + VALUES ('%watchDirectoryPath%example1', @MicroServiceChain, @expectedTypeTransfer); @@ -2803,6 +2853,11 @@ + + + + + -- DSPACE TRANSER -- -- transfer processing complete -- SET @microserviceGroup = 'Complete transfer';
using choices
Continuing the example using choices
Index: src/MCPServer/share/mysql =================================================================== --- src/MCPServer/share/mysql (revision 2328) +++ src/MCPServer/share/mysql (working copy) @@ -2657,6 +2657,87 @@ VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); set @NextMicroServiceChainLink = @MicroServiceChainLink; + +-- move to processing directory -- +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, @moveToProcessingDirectoryTaskConfig, @defaultNextChainLink); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); + +INSERT INTO MicroServiceChains (startingLink, description) VALUES (@MicroServiceChainLink, 'Continue processing normally'); +set @ContinueProcessingNormallyMicroServiceChain = LAST_INSERT_ID(); + +-- Remove .bmp files. -- +INSERT INTO StandardTasksConfigs (filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments) + VALUES + ('.bmp', NULL, 'objects', TRUE, NULL, NULL, 'remove_v0.0', '"%relativeLocation%"'); +SET @AssignfileUUIDstoobjects = LAST_INSERT_ID(); +INSERT INTO TasksConfigs (taskType, taskTypePKReference, description) + VALUES + (1, @AssignfileUUIDstoobjects, 'Remove .bmp files'); +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, LAST_INSERT_ID(), @defaultNextChainLink); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); +set @NextMicroServiceChainLink = @MicroServiceChainLink; + +-- move to processing directory -- +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, @moveToProcessingDirectoryTaskConfig, @defaultNextChainLink); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, @NextMicroServiceChainLink); +set @NextMicroServiceChainLink = @MicroServiceChainLink; + +INSERT INTO MicroServiceChains (startingLink, description) VALUES (@MicroServiceChainLink, 'Remove .bmp files'); +set @RemoveBMPfilesFirstMicroServiceChain = LAST_INSERT_ID(); + + +INSERT INTO StandardTasksConfigs (filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments) + VALUES + (NULL, NULL, NULL, FALSE, NULL, NULL, '', ''); +INSERT INTO TasksConfigs (taskType, taskTypePKReference, description) + VALUES + (2, LAST_INSERT_ID(), 'Workflow decision - remove .bmp files'); +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, LAST_INSERT_ID(), NULL); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainChoice (choiceAvailableAtLink, chainAvailable) + VALUES + (@MicroServiceChainLink, @ContinueProcessingNormallyMicroServiceChain); +INSERT INTO MicroServiceChainChoice (choiceAvailableAtLink, chainAvailable) + VALUES + (@MicroServiceChainLink, @RemoveBMPfilesFirstMicroServiceChain); +INSERT INTO MicroServiceChainChoice (choiceAvailableAtLink, chainAvailable) + VALUES + (@MicroServiceChainLink, @rejectSIPMicroServiceChain); +set @NextMicroServiceChainLink = @MicroServiceChainLink; + +INSERT INTO MicroServiceChains (startingLink, description) VALUES (@MicroServiceChainLink, 'create remove .bmp files?'); +set @MicroServiceChain = LAST_INSERT_ID(); + +INSERT INTO WatchedDirectories (watchedDirectoryPath, chain, expectedType) + VALUES ('%watchDirectoryPath%workFlowDecisions/removeBMPFiles/', @MicroServiceChain, @expectedTypeTransfer); + + +INSERT INTO StandardTasksConfigs (filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments) + VALUES + (NULL, NULL, NULL, FALSE, NULL, NULL, 'moveTransfer_v0.0', '"%SIPDirectory%" "%sharedPath%watchedDirectories/workFlowDecisions/removeBMPFiles/." "%SIPUUID%" "%sharedPath%" "%SIPUUID%" "%sharedPath%"'); +Set @MovetoworkFlowDecisionsquarantineSIPdirectory = LAST_INSERT_ID(); +INSERT INTO TasksConfigs (taskType, taskTypePKReference, description) + VALUES + (0, @MovetoworkFlowDecisionsquarantineSIPdirectory, 'Move to workFlowDecisions-removeBMPFiles directory'); +INSERT INTO MicroServiceChainLinks (microserviceGroup, currentTask, defaultNextChainLink) + VALUES (@microserviceGroup, LAST_INSERT_ID(), NULL); +set @MicroServiceChainLink = LAST_INSERT_ID(); +INSERT INTO MicroServiceChainLinksExitCodes (microServiceChainLink, exitCode, nextMicroServiceChainLink) + VALUES (@MicroServiceChainLink, 0, NULL); +set @NextMicroServiceChainLink = @MicroServiceChainLink; + + + SET @microserviceGroup = 'Include default Transfer processingMCP.xml'; INSERT INTO StandardTasksConfigs (filterFileEnd, filterFileStart, filterSubDir, requiresOutputLock, standardOutputFile, standardErrorFile, execute, arguments) VALUES @@ -2802,7 +2883,6 @@ - -- DSPACE TRANSER -- -- transfer processing complete -- SET @microserviceGroup = 'Complete transfer';