diff --git a/pom.xml b/pom.xml index 79a1fe0..fd39c9a 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ com.inteligr8.alfresco aps-public-rest-api - 2.0.14 + 2.0.15 com.inteligr8.alfresco diff --git a/src/main/java/com/inteligr8/maven/aps/modeling/goal/DownloadTemplateGoal.java b/src/main/java/com/inteligr8/maven/aps/modeling/goal/DownloadTemplateGoal.java index d9be23c..54bd705 100644 --- a/src/main/java/com/inteligr8/maven/aps/modeling/goal/DownloadTemplateGoal.java +++ b/src/main/java/com/inteligr8/maven/aps/modeling/goal/DownloadTemplateGoal.java @@ -66,30 +66,38 @@ public class DownloadTemplateGoal extends ApsTemplateAddressibleGoal { try { Map> templates = this.findTemplates(tenantId); for (TemplateType ttype : templates.keySet()) { - this.getLog().debug("Downloading templates: " + ttype); + this.getLog().info("Downloading " + templates.get(ttype).size() + " " + ttype + " templates"); for (Entry template : templates.get(ttype).entrySet()) { switch (ttype) { case Document: + File dfilebin = new File(this.templateDirectory, template.getValue().getId() + ".doc-template.docx"); + + Response response = this.getApsApi().getTemplatesApi().getDocumentTemplate( + template.getValue().getId(), + System.currentTimeMillis()); + try { + if (response.getStatus() / 100 == 2) { + InputStream istream = (InputStream) response.getEntity(); + try { + FileUtils.copyInputStreamToFile(istream, dfilebin); + } finally { + istream.close(); + } + } else { + this.getLog().warn("The document template could not be downloaded; skipping: " + template.getValue().getName()); + continue; + } + } finally { + response.close(); + } + ObjectNode djson = ModelUtil.getInstance().readPojo(template.getValue()); File dfile = new File(this.templateDirectory, template.getValue().getId() + ".doc-template.json"); ModelUtil.getInstance().writeJson(djson, dfile, this.diffFriendly); if (this.normalize) new ApsTemplateJsonNormalizer(this.diffFriendly).normalizeFile(dfile, null); - - File dfilebin = new File(this.templateDirectory, template.getValue().getId() + ".doc-template.docx"); - - Response response = this.getApsApi().getTemplatesApi().getDocumentTemplate((DocumentTemplateLight) template.getValue()); - try { - InputStream istream = (InputStream) response.getEntity(); - try { - FileUtils.copyInputStreamToFile(istream, dfilebin); - } finally { - istream.close(); - } - } finally { - response.close(); - } + break; case CustomEmail: EmailTemplate etemplate = this.getApsApi().getTemplatesApi().getCustomEmailTemplate(template.getValue().getId(), tenantId); diff --git a/src/main/java/com/inteligr8/maven/aps/modeling/goal/UploadTemplateGoal.java b/src/main/java/com/inteligr8/maven/aps/modeling/goal/UploadTemplateGoal.java index 5ffc08c..1e5511f 100644 --- a/src/main/java/com/inteligr8/maven/aps/modeling/goal/UploadTemplateGoal.java +++ b/src/main/java/com/inteligr8/maven/aps/modeling/goal/UploadTemplateGoal.java @@ -30,6 +30,7 @@ import org.codehaus.plexus.component.annotations.Component; import com.fasterxml.jackson.core.JsonProcessingException; import com.inteligr8.alfresco.activiti.model.DocumentTemplateLight; import com.inteligr8.alfresco.activiti.model.EmailTemplate; +import com.inteligr8.alfresco.activiti.model.EmailTemplateLight; import com.inteligr8.alfresco.activiti.model.FileMultipartJersey; import com.inteligr8.maven.aps.modeling.util.ModelUtil; @@ -50,6 +51,12 @@ public class UploadTemplateGoal extends ApsAddressibleGoal { @Parameter( property = "aps-model.upload.directory", required = true, defaultValue = "${project.build.directory}/aps" ) protected File templateDirectory; + + @Parameter( required = true, defaultValue = "false" ) + protected boolean alwaysOverwrite; + + @Parameter( property = "aps-model.dryRun", required = true, defaultValue = "false" ) + protected boolean dryRun; protected final int bufferSize = 128 * 1024; @@ -68,6 +75,13 @@ public class UploadTemplateGoal extends ApsAddressibleGoal { try { if (file.getName().endsWith(".doc-template.json")) { DocumentTemplateLight template = ModelUtil.getInstance().writePojo(ModelUtil.getInstance().readJsonAsMap(file), DocumentTemplateLight.class); + if (!this.alwaysOverwrite && template.getId() != null && template.getCreated() != null) { + DocumentTemplateLight serverSideTemplate = this.getApsApi().getTemplatesApi().getDocumentTemplate(template.getId()); + if (serverSideTemplate != null && !serverSideTemplate.getCreated().isBefore(template.getCreated())) { + this.getLog().debug("Document template unchanged; not updating: " + template.getId()); + continue; + } + } File docxfile = new File(file.getParent(), file.getName().substring(0, file.getName().length() - ".json".length()) + ".docx"); if (!docxfile.exists()) @@ -78,9 +92,19 @@ public class UploadTemplateGoal extends ApsAddressibleGoal { try { FileMultipartJersey multipart = FileMultipartJersey.from(docxfile.getName(), bistream); if (template.getId() == null) { - this.getApsApi().getTemplatesJerseyApi().createDocumentTemplate(tenantId, multipart); + if (this.dryRun) { + this.getLog().info("[DRYRUN]: Creating document template: " + template.getName()); + } else { + this.getLog().info("Creating document template: " + template.getName()); + this.getApsApi().getTemplatesJerseyApi().createDocumentTemplate(tenantId, multipart); + } } else { - this.getApsApi().getTemplatesJerseyApi().updateDocumentTemplate(template.getId(), tenantId, multipart); + if (this.dryRun) { + this.getLog().info("[DRYRUN]: Updating document template: " + template.getName()); + } else { + this.getLog().info("Updating document template: " + template.getName()); + this.getApsApi().getTemplatesJerseyApi().updateDocumentTemplate(template.getId(), tenantId, multipart); + } } } finally { bistream.close(); @@ -88,14 +112,45 @@ public class UploadTemplateGoal extends ApsAddressibleGoal { } } else if (file.getName().endsWith(".custom-email-template.json")) { EmailTemplate template = ModelUtil.getInstance().writePojo(ModelUtil.getInstance().readJsonAsMap(file), EmailTemplate.class); + if (!this.alwaysOverwrite && template.getId() != null && template.getCreated() != null) { + EmailTemplate serverSideTemplate = this.getApsApi().getTemplatesApi().getCustomEmailTemplate(template.getId(), tenantId); + if (serverSideTemplate != null && !serverSideTemplate.getCreated().isBefore(template.getCreated())) { + this.getLog().debug("Custom email template unchanged; not updating: " + template.getId()); + continue; + } + } + if (template.getId() == null) { - this.getApsApi().getTemplatesJerseyApi().createCustomEmailTemplate(template); + if (this.dryRun) { + this.getLog().info("[DRYRUN]: Creating custom email template: " + template.getName()); + } else { + this.getLog().info("Creating custom email template: " + template.getName()); + this.getApsApi().getTemplatesJerseyApi().createCustomEmailTemplate(template); + } } else { - this.getApsApi().getTemplatesJerseyApi().updateCustomEmailTemplate(template.getId(), template); + if (this.dryRun) { + this.getLog().info("[DRYRUN]: Updating custom email template: " + template.getName()); + } else { + this.getLog().info("Updating custom email template: " + template.getName()); + this.getApsApi().getTemplatesJerseyApi().updateCustomEmailTemplate(template.getId(), template); + } } } else if (file.getName().endsWith(".system-email-template.json")) { EmailTemplate template = ModelUtil.getInstance().writePojo(ModelUtil.getInstance().readJsonAsMap(file), EmailTemplate.class); - this.getApsApi().getTemplatesJerseyApi().updateSystemEmailTemplate(template.getName(), template); + if (!this.alwaysOverwrite) { + EmailTemplate serverSideTemplate = this.getApsApi().getTemplatesApi().getSystemEmailTemplate(template.getName(), tenantId); + if (serverSideTemplate != null && template.getTemplate().equals(serverSideTemplate.getTemplate())) { + this.getLog().debug("System email template unchanged; not updating: " + template.getName()); + continue; + } + } + + if (this.dryRun) { + this.getLog().info("[DRYRUN]: Updating system email template: " + template.getName()); + } else { + this.getLog().info("Updating system email template: " + template.getName()); + this.getApsApi().getTemplatesJerseyApi().updateSystemEmailTemplate(template.getName(), template); + } } } catch (JsonProcessingException jpe) { throw new MojoExecutionException("The APS templates JSON files could not be parsed", jpe); diff --git a/src/main/java/com/inteligr8/maven/aps/modeling/normalizer/ApsTemplateJsonNormalizer.java b/src/main/java/com/inteligr8/maven/aps/modeling/normalizer/ApsTemplateJsonNormalizer.java index 659fd18..68a4ec5 100644 --- a/src/main/java/com/inteligr8/maven/aps/modeling/normalizer/ApsTemplateJsonNormalizer.java +++ b/src/main/java/com/inteligr8/maven/aps/modeling/normalizer/ApsTemplateJsonNormalizer.java @@ -27,7 +27,7 @@ import com.inteligr8.maven.aps.modeling.util.ModelUtil; /** * This class implements an APS template JSON configuration file normalizer. * - * This will remove the 'created' date of each defined template. + * This will remove the 'createdBy' of each defined template. * * @author brian@inteligr8.com */ @@ -66,7 +66,7 @@ public class ApsTemplateJsonNormalizer implements ApsFileNormalizer { this.logger.trace("Removing excess template meta-data: {}", jsonModel.get("name")); int fields = jsonModel.size(); - jsonModel.remove(Arrays.asList("created", "createdBy")); + jsonModel.remove(Arrays.asList("createdBy")); return jsonModel.size() < fields; }