From 9a540965e7aa3b442c26e50e6d100c31cf3dfeac Mon Sep 17 00:00:00 2001
From: bourgesl <bourges.laurent@gmail.com>
Date: Mon, 26 Mar 2018 17:29:03 +0200
Subject: [PATCH] refactored ProjectConfig cache to only synchronize datacite
 on the working project

---
 .../fr/osug/doi/DataciteSyncPipeline.java     | 17 ++++++++++++-----
 .../java/fr/osug/doi/GeneratePipeline.java    |  4 ++--
 .../fr/osug/doi/GenerateRedirectPipeline.java |  2 +-
 .../java/fr/osug/doi/PipelineCommonData.java  | 19 +++++++++++++++----
 .../java/fr/osug/doi/PublishPipeline.java     | 12 +-----------
 src/main/java/fr/osug/doi/RemovePipeline.java | 13 +------------
 6 files changed, 32 insertions(+), 35 deletions(-)

diff --git a/src/main/java/fr/osug/doi/DataciteSyncPipeline.java b/src/main/java/fr/osug/doi/DataciteSyncPipeline.java
index 3192ae1..a80000f 100644
--- a/src/main/java/fr/osug/doi/DataciteSyncPipeline.java
+++ b/src/main/java/fr/osug/doi/DataciteSyncPipeline.java
@@ -10,6 +10,7 @@ import fr.osug.doi.service.DoiService;
 import fr.osug.util.FileUtils;
 import java.io.File;
 import java.io.IOException;
+import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import org.slf4j.Logger;
@@ -38,13 +39,19 @@ public final class DataciteSyncPipeline extends AbstractPipeline<PipelineCommonD
 
     @Override
     public void doExecute() throws IOException {
-        logger.info("doStaging: {}", doStaging);
-        logger.info("doPublic:  {}", doPublic);
+        final Collection<ProjectConfig> projectConfigs = pipeData.getProjectConfigs();
 
-        prepare();
+        if (projectConfigs.isEmpty()) {
+            logger.info("publishDatacite: skipping (no project defined)");
+        } else {
+            logger.info("doStaging: {}", doStaging);
+            logger.info("doPublic:  {}", doPublic);
 
-        for (ProjectConfig projectConfig : pipeData.getProjectConfigs()) {
-            publishDatacite(projectConfig);
+            prepare();
+
+            for (ProjectConfig projectConfig : projectConfigs) {
+                publishDatacite(projectConfig);
+            }
         }
     }
 
diff --git a/src/main/java/fr/osug/doi/GeneratePipeline.java b/src/main/java/fr/osug/doi/GeneratePipeline.java
index cb5ecb1..8695b2e 100644
--- a/src/main/java/fr/osug/doi/GeneratePipeline.java
+++ b/src/main/java/fr/osug/doi/GeneratePipeline.java
@@ -99,7 +99,7 @@ public final class GeneratePipeline extends AbstractPipeline<PipelineCommonData>
             if (p == null) {
                 logger.warn("Unknown Project [{}]", projectName);
             } else {
-                pipeData.getProjectConfig(p.getName());
+                pipeData.getProjectConfigAll(p.getName());
             }
         }
 
@@ -109,7 +109,7 @@ public final class GeneratePipeline extends AbstractPipeline<PipelineCommonData>
     @Override
     public void doExecute() throws IOException {
         // 1 - Landing pages for selected project(s):
-        for (ProjectConfig projectConfig : pipeData.getProjectConfigs()) {
+        for (ProjectConfig projectConfig : pipeData.getProjectConfigsAll()) {
             generateLandingPages(projectConfig);
         }
         // 2 - Update index pages:
diff --git a/src/main/java/fr/osug/doi/GenerateRedirectPipeline.java b/src/main/java/fr/osug/doi/GenerateRedirectPipeline.java
index d618e21..15b7a1f 100644
--- a/src/main/java/fr/osug/doi/GenerateRedirectPipeline.java
+++ b/src/main/java/fr/osug/doi/GenerateRedirectPipeline.java
@@ -152,7 +152,7 @@ public final class GenerateRedirectPipeline extends AbstractPipeline<PipelineCom
         for (Project p : projects) {
             final String projectName = p.getName();
 
-            final ProjectConfig projectConfig = pipeData.getProjectConfig(projectName);
+            final ProjectConfig projectConfig = pipeData.getProjectConfigAll(projectName);
 
             if (projectConfig.getPropertyBoolean(ProjectConfig.CONF_KEY_GENERATE_EMBEDDED)) {
                 // // [public/staging]/PROJECT/embed/DOI_SUFFIX[.html]
diff --git a/src/main/java/fr/osug/doi/PipelineCommonData.java b/src/main/java/fr/osug/doi/PipelineCommonData.java
index 8a244dc..032ccbf 100644
--- a/src/main/java/fr/osug/doi/PipelineCommonData.java
+++ b/src/main/java/fr/osug/doi/PipelineCommonData.java
@@ -25,6 +25,8 @@ public class PipelineCommonData {
     final StringBuilder buffer = new StringBuilder(BUFFER_SIZE);
     /** project config instances keyed by project name */
     private final Map<String, ProjectConfig> projectConfigs = new LinkedHashMap<String, ProjectConfig>();
+    /** all project config instances keyed by project name (dynamically filled) */
+    private final Map<String, ProjectConfig> projectConfigsAll = new LinkedHashMap<String, ProjectConfig>();
     /** optional doi pattern */
     private String doiPattern = null;
 
@@ -34,17 +36,26 @@ public class PipelineCommonData {
 
     public void addProjectConfig(final ProjectConfig projectConfig) {
         projectConfigs.put(projectConfig.getProjectName(), projectConfig);
+        addProjectConfigAll(projectConfig);
     }
-
+    
     public Collection<ProjectConfig> getProjectConfigs() {
         return projectConfigs.values();
     }
 
-    public ProjectConfig getProjectConfig(final String projectName) throws IOException {
-        ProjectConfig projectConfig = projectConfigs.get(projectName);
+    public void addProjectConfigAll(final ProjectConfig projectConfig) {
+        projectConfigsAll.put(projectConfig.getProjectName(), projectConfig);
+    }
+
+    public Collection<ProjectConfig> getProjectConfigsAll() {
+        return projectConfigsAll.values();
+    }
+    
+    public ProjectConfig getProjectConfigAll(final String projectName) throws IOException {
+        ProjectConfig projectConfig = projectConfigsAll.get(projectName);
         if (projectConfig == null) {
             projectConfig = new ProjectConfig(pathConfig, projectName);
-            addProjectConfig(projectConfig);
+            addProjectConfigAll(projectConfig);
         }
         return projectConfig;
     }
diff --git a/src/main/java/fr/osug/doi/PublishPipeline.java b/src/main/java/fr/osug/doi/PublishPipeline.java
index 1093922..b75b0d9 100644
--- a/src/main/java/fr/osug/doi/PublishPipeline.java
+++ b/src/main/java/fr/osug/doi/PublishPipeline.java
@@ -46,7 +46,7 @@ public class PublishPipeline extends AbstractPipeline<PipelineCommonData> {
     private void publish(final ProjectConfig projectConfig, final String doiPattern) throws IOException {
         logger.info("publish ...");
 
-        final String pattern = convertPattern(doiPattern);
+        final String pattern = DoiService.convertPattern(doiPattern);
         logger.debug("pattern: {}", pattern);
 
         final String projectName = projectConfig.getProjectName();
@@ -122,16 +122,6 @@ public class PublishPipeline extends AbstractPipeline<PipelineCommonData> {
         return changed;
     }
 
-    private static String convertPattern(final String doiPattern) {
-        String pattern;
-        // escape '%' and '_'
-        pattern = doiPattern.replaceAll("_", "\\_");
-        pattern = pattern.replaceAll("%", "\\%");
-
-        // '<pattern>%' 
-        return pattern + "%";
-    }
-
     private static String replacePrefix(final String metadata, final String prefix) {
         return metadata.replaceAll(Const.DOI_PREFIX_TEST, prefix);
     }
diff --git a/src/main/java/fr/osug/doi/RemovePipeline.java b/src/main/java/fr/osug/doi/RemovePipeline.java
index 397bf12..4a70905 100644
--- a/src/main/java/fr/osug/doi/RemovePipeline.java
+++ b/src/main/java/fr/osug/doi/RemovePipeline.java
@@ -40,7 +40,7 @@ public final class RemovePipeline extends AbstractPipeline<PipelineCommonData> {
     private void remove(final ProjectConfig projectConfig, final String doiPattern) throws IOException {
         logger.info("remove ...");
 
-        final String pattern = convertPattern(doiPattern);
+        final String pattern = DoiService.convertPattern(doiPattern);
         logger.debug("pattern: {}", pattern);
 
         final String projectName = projectConfig.getProjectName();
@@ -142,15 +142,4 @@ public final class RemovePipeline extends AbstractPipeline<PipelineCommonData> {
             file.delete();
         }
     }
-
-// TODO: refactor
-    private static String convertPattern(final String doiPattern) {
-        String pattern;
-        // escape '%' and '_'
-        pattern = doiPattern.replaceAll("_", "\\_");
-        pattern = pattern.replaceAll("%", "\\%");
-
-        // '<pattern>%' 
-        return pattern + "%";
-    }
 }
-- 
GitLab