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