From 2ade66693bc99864ce8eab895138d5b7efe4790d Mon Sep 17 00:00:00 2001
From: Justin Cleveland <clevelandj@wustl.edu>
Date: Thu, 14 Jul 2016 16:39:30 -0500
Subject: [PATCH] (partial commit) XNAT-1649 - Archive mount point is missing,
 but system runs without a message

---
 .../tasks/AbstractInitializingTask.java       |   2 +-
 .../tasks/SystemPathVerification.java         | 129 ++++++++++++++++++
 .../webapp/scripts/xnat/admin/pwExpType.js    |   6 +-
 3 files changed, 133 insertions(+), 4 deletions(-)
 create mode 100644 src/main/java/org/nrg/xnat/initialization/tasks/SystemPathVerification.java

diff --git a/src/main/java/org/nrg/xnat/initialization/tasks/AbstractInitializingTask.java b/src/main/java/org/nrg/xnat/initialization/tasks/AbstractInitializingTask.java
index 20681767..b00cf58b 100644
--- a/src/main/java/org/nrg/xnat/initialization/tasks/AbstractInitializingTask.java
+++ b/src/main/java/org/nrg/xnat/initialization/tasks/AbstractInitializingTask.java
@@ -11,7 +11,7 @@ public abstract class AbstractInitializingTask implements InitializingTask {
     @Override
     public abstract void run();
 
-        @Override
+    @Override
     public boolean isCompleted() {
         return _completedAt != null;
     }
diff --git a/src/main/java/org/nrg/xnat/initialization/tasks/SystemPathVerification.java b/src/main/java/org/nrg/xnat/initialization/tasks/SystemPathVerification.java
new file mode 100644
index 00000000..c8a401d8
--- /dev/null
+++ b/src/main/java/org/nrg/xnat/initialization/tasks/SystemPathVerification.java
@@ -0,0 +1,129 @@
+/*
+ * org.nrg.xnat.initialization.tasks.SystemPathVerification
+ * XNAT http://www.xnat.org
+ * Copyright (c) 2016, Washington University School of Medicine
+ * All Rights Reserved
+ *
+ * Released under the Simplified BSD.
+ *
+ * Created:
+ * Author: Justin Cleveland (clevelandj@wustl.edu)
+ */
+package org.nrg.xnat.initialization.tasks;
+
+import org.nrg.xdat.preferences.SiteConfigPreferences;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.dao.DataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.ResultSetExtractor;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class SystemPathVerification extends AbstractInitializingTask {
+    @Override
+    public String getTaskName() {
+        return "System Path Verification";
+    }
+
+    private final static ArrayList<String> pathErrors = new ArrayList<>();
+
+    @Override
+    public void run() {
+        try {
+            String archivePath = _siteConfigPreferences.getArchivePath();
+            validatePath(archivePath, "Archive", true);
+
+            final ProjectExtractor pe = new ProjectExtractor();
+            final SubjectExtractor se = new SubjectExtractor();
+            final Map<String, String> projects = _template.query("SELECT id, name FROM xnat_projectdata", pe);
+            if(projects.size() > 0){
+                final Map<String, String> subjects = _template.query("SELECT id, name FROM xnat_subjectdata", se);
+                if(subjects.size() > 0){
+
+                }
+            }
+            complete();
+        } catch (Exception e) {
+            logger.error("", e);
+        }
+    }
+
+    private boolean validatePath(final String path, final String displayName, final boolean checkForFiles) throws SQLException {
+        File filePath = new File(path);
+        if (!filePath.exists()) {
+            pathErrors.add(displayName+" path \""+path+"\" does not exist.");
+            return false;
+        } else if (!filePath.isDirectory()){
+            pathErrors.add(displayName+" path \""+path+"\" is not a directory.");
+            return false;
+        } else if (checkForFiles) {
+            // check for actual subdirectories and files existing here
+            /*
+            FileFilter directoryFilter = new FileFilter() {
+                public boolean accept(File file) {
+                    return file.isDirectory();
+                }
+            };
+            */
+            File[] files = filePath.listFiles();
+            //directoryFilter);
+            final String noFiles = displayName + " files do not exist under \"" + path + "\".";
+            if(files == null) {
+                pathErrors.add(noFiles);
+                return false;
+            }
+            if(files.length < 1) {
+                pathErrors.add(noFiles);
+                return false;
+            }
+else {
+    for (File file : files) {
+        System.out.println(file);
+    }
+}
+        }
+        return true;
+    }
+
+    private static class ProjectExtractor implements ResultSetExtractor<Map<String, String>> {
+        @Override
+        public Map<String, String> extractData(final ResultSet results) throws SQLException, DataAccessException {
+            final Map<String, String> projects = new HashMap<>();
+            while (results.next()) {
+                projects.put(results.getString(1), results.getString(2));
+            }
+            return projects;
+        }
+    }
+
+    private static class SubjectExtractor implements ResultSetExtractor<Map<String, String>> {
+        @Override
+        public Map<String, String> extractData(final ResultSet results) throws SQLException, DataAccessException {
+            final Map<String, String> subjects = new HashMap<>();
+            while (results.next()) {
+                subjects.put(results.getString(1), results.getString(2));
+            }
+            return subjects;
+        }
+    }
+
+    private static Logger logger = LoggerFactory.getLogger(SystemPathVerification.class);
+
+    @Autowired
+    @Lazy
+    private JdbcTemplate _template;
+
+    @Autowired
+    @Lazy
+    private SiteConfigPreferences _siteConfigPreferences;
+}
diff --git a/src/main/webapp/scripts/xnat/admin/pwExpType.js b/src/main/webapp/scripts/xnat/admin/pwExpType.js
index d488379e..fbae91c3 100644
--- a/src/main/webapp/scripts/xnat/admin/pwExpType.js
+++ b/src/main/webapp/scripts/xnat/admin/pwExpType.js
@@ -7,15 +7,15 @@
       fieldDate.attr('placeholder', 'MM/DD/YYYY');
       openCal = $('#openCal-passwordExpirationDate');
       openCal.click(openCalendar);
-      fieldInterval[0].style.width = '40px';
-      fieldInterval[0].style.textAlign = 'right';
+//      fieldInterval[0].style.width = '40px';
+//      fieldInterval[0].style.textAlign = 'right';
       fieldInterval[0].style.marginTop='10px';
       fieldDate[0].style.width = '90px';
       fieldDate[0].style.marginTop='10px';
       fieldDate.datetimepicker({
         timepicker:false,
         format:'m/d/Y',
-//        minDate:'-1970/01/01' // today is minimum date
+        maxDate:'1970/01/01' // today is max date, disallow future date selection
       });
       sdtDisabled = $('#passwordExpirationTypeDisabled');
       sdtInterval = $('#passwordExpirationTypeInterval');
-- 
GitLab