diff --git a/src/main/java/org/gcube/vremanagement/App.java b/src/main/java/org/gcube/vremanagement/App.java index 613035e..acd5ead 100644 --- a/src/main/java/org/gcube/vremanagement/App.java +++ b/src/main/java/org/gcube/vremanagement/App.java @@ -13,15 +13,16 @@ public class App { private static String[] listVOs= {"D4Research","gCubeApps","FARM","ParthenosVO","OpenAIRE"}; private static String scopeIn = "/d4science.research-infrastructures.eu"; private static int skipLines = 3; - private static String InCsvFile="VREDecommisioned-240326.csv"; + private static String InCsvFileName="VREDecommisioned-240326.csv"; + private static String filePath="src/main/resources"; //Used for GooGle APis; public static void main (String[] args) { - try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines);){ - + try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build()) + { String voIn="D4Research"; String vreName="FoodborneOutbreak"; updaterCSV.getVREInfoFromClient(scopeIn,voIn, vreName); diff --git a/src/main/java/org/gcube/vremanagement/VREQueryService.java b/src/main/java/org/gcube/vremanagement/VREQueryService.java index 7a8353c..ad70c29 100644 --- a/src/main/java/org/gcube/vremanagement/VREQueryService.java +++ b/src/main/java/org/gcube/vremanagement/VREQueryService.java @@ -42,7 +42,11 @@ import org.gcube.vremanagement.vremodeler.utils.reports.DeployReport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - +/** + * Class that implement the methods to parse the CSV file produced by redmine, + * query the remote client to get additional information about the VREs contained in CSV + * like start time, end time and description and, finally, store the information in a new CSV file. + */ public class VREQueryService implements AutoCloseable{ private File fileCSV; @@ -62,40 +66,88 @@ public class VREQueryService implements AutoCloseable{ private static final Logger logger = LoggerFactory.getLogger(VREQueryService.class); + private static VREQueryService VQSInstance; - - public VREQueryService (String _InCsvPath, int _skipLines) + /** + * Private Class constructor that takes as input the path and the name of the CSV file to read, + * and the starting rows to skip inside the CSV file + * + * @param _filePath path of the CSV file produced by redmine to read + * @param _InCsvPath name of the CSV file produced by redmine to read + * @param _skipLines initial rows to skip in the CSV file + */ + private VREQueryService (String _filePath,String _InCsvPath, int _skipLines) { try { - String filePath = "src/test/resources"; - String InFilePath = filePath+File.separator+ _InCsvPath; - OutFilePath = filePath+File.separator+"updated_"+_InCsvPath; - MissFilePath =filePath+File.separator+"missing_"+_InCsvPath; - fileCSV = new File(InFilePath); - if(!fileCSV.exists()) + + String InFilePath = _filePath+File.separator+ _InCsvPath; + this.OutFilePath = _filePath+File.separator+"updated_"+_InCsvPath; + this.MissFilePath =_filePath+File.separator+"missing_"+_InCsvPath; + this.fileCSV = new File(InFilePath); + if(!this.fileCSV.exists()) { - System.err.println("Input CSV File "+_InCsvPath+" does not exists in the path "+filePath+"!"); + System.err.println("Input CSV File "+_InCsvPath+" does not exists in the path "+_filePath+"!"); System.exit(0); } logger.debug("file url path:" + fileCSV.getPath()); - csvParser = new CSVParserBuilder().withSeparator(',').withIgnoreQuotations(true).build(); - csvReader = new CSVReaderBuilder(new FileReader(fileCSV)).withSkipLines(_skipLines).withCSVParser(csvParser).build(); + this.csvParser = new CSVParserBuilder().withSeparator(',').withIgnoreQuotations(true).build(); + this.csvReader = new CSVReaderBuilder(new FileReader(fileCSV)).withSkipLines(_skipLines).withCSVParser(csvParser).build(); - allRows = csvReader.readAll(); - dateFormat = new SimpleDateFormat("MMM dd yyyy hh:mm a"); - mapVres = new HashMap<>(); + this.allRows = csvReader.readAll(); + this.dateFormat = new SimpleDateFormat("MMM dd yyyy hh:mm a"); + this.mapVres = new HashMap<>(); } catch(Exception e) { e.printStackTrace();}; } + + + /** + * Class builder + */ + public static class VQSBuilder{ + private String filePath; + private String csvName; + private int toSkip; + + public VQSBuilder setCSVFiles(String _filePath, String _csvName, int _toSkip) + { + this.filePath = _filePath; + this.csvName= _csvName; + this.toSkip = _toSkip; + return this; + } + + + public VREQueryService build() { + return new VREQueryService(filePath,csvName,toSkip); + } + + + } + + + /** + * Empty class constructor + */ public VREQueryService() {} - public static VREQueryService getInstance() { return new VREQueryService();}; + /** + * Singleton of the service + * @return + */ + public static synchronized VREQueryService getInstance() { + if(VQSInstance !=null) + return VQSInstance; + + return new VREQueryService();}; - + /** + * Close metodo of the AutoCloseable interface + */ public void close() throws IOException { if(csvReader !=null) { csvReader.close();} @@ -103,7 +155,11 @@ public class VREQueryService implements AutoCloseable{ if(csvMissWriter !=null) {csvMissWriter.close();} } - + /** + * Return all the VREs of a specific VO + * @param _scopeVO the VO to query + * @return list of all the VREs of a specific VO + */ public List getReportVREs(String _scopeVO) { try { @@ -120,6 +176,12 @@ public class VREQueryService implements AutoCloseable{ } + /** + * Method that try to reduce the query number to the remote service. + * It save all the VREs of the specified VO in a hash map data structure + * @param _scopeList list of VOs + * @return hash map with key=VO, value = List of Vres of the VO + */ public Map>> fillMapAllVREs(String[] _scopeList) { Map>> vreAllMap = new HashMap<>(); @@ -144,6 +206,13 @@ public class VREQueryService implements AutoCloseable{ return vreAllMap; } + /** + * Method that find a specific VRE name in a VO + * @param _scope + * @param _vo + * @param _vreName + * @return information of the VRE found or null + */ public VREDescription findVREDescr(String _scope, String _vo, String _vreName) { @@ -171,6 +240,11 @@ public class VREQueryService implements AutoCloseable{ } + /** + * Method that checks if a VRE is in the CSV file + * @param _vreName VRE name to find + * @return 0= not fount, 1=found + */ public int isVREinCSVbyName(String _vreName) { @@ -205,6 +279,12 @@ public class VREQueryService implements AutoCloseable{ * ROM[10] = Description */ + /** + * Method used to integrate the VRE information contained in the redmine report + * with the information taken from the client (start time, end time, managers, description) + * It store the new information in a new CSV file. + * @param _scope + */ public void updateCSVformCSVList(String _scope) { @@ -256,6 +336,12 @@ public class VREQueryService implements AutoCloseable{ * ROW[10] = Description */ + /** + * Method used to find the missing VRE Disposed in the redmine report across the specified VOs. + * It creates a new CSV file. + * @param _scope + * @param _voList + */ public void missingVREinCSV(String _scope, String[] _voList) { @@ -303,6 +389,14 @@ public class VREQueryService implements AutoCloseable{ } + /** + * Method used to retrieve information about a specific VRE of a specific VO + * In prints the main information of the VREs if found. + * @param _scope + * @param _vo VO that contains the VRE to find + * @param _vreName VRE name to find + * @return 0=not found, 1 found + */ public int getVREInfoFromClient(String _scope, String _vo, String _vreName) { try { @@ -332,6 +426,15 @@ public class VREQueryService implements AutoCloseable{ } + /** + * Method used to update the end time of a removed VO on the remote service + * @param _scope + * @param _vo VO that contains the VRE to update + * @param _vreName VRE name to update + * @param _year end_time year + * @param _month end_time month + * @param _day end_time day + */ public void updateEndTimeVRE(String _scope, String _vo, String _vreName, int _year, int _month, int _day ) { diff --git a/src/test/java/org/gcube/vremanagement/CsvUpdateTest.java b/src/test/java/org/gcube/vremanagement/CsvUpdateTest.java index 10ce90e..62ad095 100644 --- a/src/test/java/org/gcube/vremanagement/CsvUpdateTest.java +++ b/src/test/java/org/gcube/vremanagement/CsvUpdateTest.java @@ -20,19 +20,22 @@ class CsvUpdateTest { private String[] listVOs= {"D4Research","gCubeApps","FARM","ParthenosVO","OpenAIRE"}; private String scopeIn = "/d4science.research-infrastructures.eu"; - int skipLines = 3; - private String InCsvFile="VREDecommisioned-240326.csv"; + private int skipLines = 3; + private String InCsvFileName="VREDecommisioned-240326.csv"; //Used for Google APIs remote update private String vreSheet = "VREs"; private String missVreSheet="VREs-missing"; private String updateVreSheet = "VREs-extended-info"; //Used for GooGle APis; - String spreadID="1-_24RYwFHG5DuR-rrcmHDSz9pOqVHApBLhXiFLub9JA"; + private String spreadID="1-_24RYwFHG5DuR-rrcmHDSz9pOqVHApBLhXiFLub9JA"; + + private String filePath = "src/test/resources"; @Test void QueryClientVREInfoTest(){ - try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){ + try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build()) + { String voIn="D4Research"; String vreName="FoodborneOutbreak"; logger.debug("Checking information about the VRE "+vreName+" in the VO:"+voIn); @@ -46,7 +49,8 @@ class CsvUpdateTest { @Test void UpdateLocalCSVTest() { - try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){ + try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build()) + { logger.debug("Updating VREs in a LOCAL CSV file"); updaterCSV.updateCSVformCSVList(scopeIn); logger.debug("Update CSV done"); @@ -58,7 +62,8 @@ class CsvUpdateTest { @Test void MissingLocalCSVTest(){ - try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){ + try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build()) + { logger.debug("Getting missing VRE in a LOCAL CSV file"); updaterCSV.missingVREinCSV(scopeIn, listVOs); logger.debug("Missing CSV done"); @@ -72,7 +77,8 @@ class CsvUpdateTest { @Disabled @Test void UpdateEndTimeVRETest(){ - try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){ + try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build()) + { String voTimeIn="D4Research"; String vreTimeName="FoodborneOutbreak"; int yearIn=2024; @@ -129,7 +135,8 @@ class CsvUpdateTest { int choice=0; do { - try (VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){ + try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build()) + { logger.debug("Menu:"); logger.debug("1. Update VREs in a LOCAL CSV file");