builder class and singleton implemented for the service. Documentation of the service that uses local csv files
This commit is contained in:
parent
c275b14df5
commit
fa19680a85
|
@ -13,15 +13,16 @@ public class App {
|
||||||
private static String[] listVOs= {"D4Research","gCubeApps","FARM","ParthenosVO","OpenAIRE"};
|
private static String[] listVOs= {"D4Research","gCubeApps","FARM","ParthenosVO","OpenAIRE"};
|
||||||
private static String scopeIn = "/d4science.research-infrastructures.eu";
|
private static String scopeIn = "/d4science.research-infrastructures.eu";
|
||||||
private static int skipLines = 3;
|
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;
|
//Used for GooGle APis;
|
||||||
|
|
||||||
|
|
||||||
public static void main (String[] args)
|
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 voIn="D4Research";
|
||||||
String vreName="FoodborneOutbreak";
|
String vreName="FoodborneOutbreak";
|
||||||
updaterCSV.getVREInfoFromClient(scopeIn,voIn, vreName);
|
updaterCSV.getVREInfoFromClient(scopeIn,voIn, vreName);
|
||||||
|
|
|
@ -42,7 +42,11 @@ import org.gcube.vremanagement.vremodeler.utils.reports.DeployReport;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
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{
|
public class VREQueryService implements AutoCloseable{
|
||||||
|
|
||||||
private File fileCSV;
|
private File fileCSV;
|
||||||
|
@ -62,40 +66,88 @@ public class VREQueryService implements AutoCloseable{
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(VREQueryService.class);
|
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 {
|
try {
|
||||||
String filePath = "src/test/resources";
|
|
||||||
String InFilePath = filePath+File.separator+ _InCsvPath;
|
String InFilePath = _filePath+File.separator+ _InCsvPath;
|
||||||
OutFilePath = filePath+File.separator+"updated_"+_InCsvPath;
|
this.OutFilePath = _filePath+File.separator+"updated_"+_InCsvPath;
|
||||||
MissFilePath =filePath+File.separator+"missing_"+_InCsvPath;
|
this.MissFilePath =_filePath+File.separator+"missing_"+_InCsvPath;
|
||||||
fileCSV = new File(InFilePath);
|
this.fileCSV = new File(InFilePath);
|
||||||
if(!fileCSV.exists())
|
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);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.debug("file url path:" + fileCSV.getPath());
|
logger.debug("file url path:" + fileCSV.getPath());
|
||||||
csvParser = new CSVParserBuilder().withSeparator(',').withIgnoreQuotations(true).build();
|
this.csvParser = new CSVParserBuilder().withSeparator(',').withIgnoreQuotations(true).build();
|
||||||
csvReader = new CSVReaderBuilder(new FileReader(fileCSV)).withSkipLines(_skipLines).withCSVParser(csvParser).build();
|
this.csvReader = new CSVReaderBuilder(new FileReader(fileCSV)).withSkipLines(_skipLines).withCSVParser(csvParser).build();
|
||||||
|
|
||||||
allRows = csvReader.readAll();
|
this.allRows = csvReader.readAll();
|
||||||
dateFormat = new SimpleDateFormat("MMM dd yyyy hh:mm a");
|
this.dateFormat = new SimpleDateFormat("MMM dd yyyy hh:mm a");
|
||||||
mapVres = new HashMap<>();
|
this.mapVres = new HashMap<>();
|
||||||
|
|
||||||
} catch(Exception e)
|
} catch(Exception e)
|
||||||
{ e.printStackTrace();};
|
{ 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 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
|
public void close() throws IOException
|
||||||
{
|
{
|
||||||
if(csvReader !=null) { csvReader.close();}
|
if(csvReader !=null) { csvReader.close();}
|
||||||
|
@ -103,7 +155,11 @@ public class VREQueryService implements AutoCloseable{
|
||||||
if(csvMissWriter !=null) {csvMissWriter.close();}
|
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<Report> getReportVREs(String _scopeVO)
|
public List<Report> getReportVREs(String _scopeVO)
|
||||||
{
|
{
|
||||||
try {
|
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<String,List<List<Report>>> fillMapAllVREs(String[] _scopeList)
|
public Map<String,List<List<Report>>> fillMapAllVREs(String[] _scopeList)
|
||||||
{
|
{
|
||||||
Map<String,List<List<Report>>> vreAllMap = new HashMap<>();
|
Map<String,List<List<Report>>> vreAllMap = new HashMap<>();
|
||||||
|
@ -144,6 +206,13 @@ public class VREQueryService implements AutoCloseable{
|
||||||
return vreAllMap;
|
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)
|
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)
|
public int isVREinCSVbyName(String _vreName)
|
||||||
{
|
{
|
||||||
|
@ -205,6 +279,12 @@ public class VREQueryService implements AutoCloseable{
|
||||||
* ROM[10] = Description
|
* 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)
|
public void updateCSVformCSVList(String _scope)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -256,6 +336,12 @@ public class VREQueryService implements AutoCloseable{
|
||||||
* ROW[10] = Description
|
* 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)
|
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)
|
public int getVREInfoFromClient(String _scope, String _vo, String _vreName)
|
||||||
{
|
{
|
||||||
try {
|
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 )
|
public void updateEndTimeVRE(String _scope, String _vo, String _vreName, int _year, int _month, int _day )
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,19 +20,22 @@ class CsvUpdateTest {
|
||||||
|
|
||||||
private String[] listVOs= {"D4Research","gCubeApps","FARM","ParthenosVO","OpenAIRE"};
|
private String[] listVOs= {"D4Research","gCubeApps","FARM","ParthenosVO","OpenAIRE"};
|
||||||
private String scopeIn = "/d4science.research-infrastructures.eu";
|
private String scopeIn = "/d4science.research-infrastructures.eu";
|
||||||
int skipLines = 3;
|
private int skipLines = 3;
|
||||||
private String InCsvFile="VREDecommisioned-240326.csv";
|
private String InCsvFileName="VREDecommisioned-240326.csv";
|
||||||
//Used for Google APIs remote update
|
//Used for Google APIs remote update
|
||||||
private String vreSheet = "VREs";
|
private String vreSheet = "VREs";
|
||||||
private String missVreSheet="VREs-missing";
|
private String missVreSheet="VREs-missing";
|
||||||
private String updateVreSheet = "VREs-extended-info";
|
private String updateVreSheet = "VREs-extended-info";
|
||||||
//Used for GooGle APis;
|
//Used for GooGle APis;
|
||||||
String spreadID="1-_24RYwFHG5DuR-rrcmHDSz9pOqVHApBLhXiFLub9JA";
|
private String spreadID="1-_24RYwFHG5DuR-rrcmHDSz9pOqVHApBLhXiFLub9JA";
|
||||||
|
|
||||||
|
private String filePath = "src/test/resources";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void QueryClientVREInfoTest(){
|
void QueryClientVREInfoTest(){
|
||||||
|
|
||||||
try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){
|
try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build())
|
||||||
|
{
|
||||||
String voIn="D4Research";
|
String voIn="D4Research";
|
||||||
String vreName="FoodborneOutbreak";
|
String vreName="FoodborneOutbreak";
|
||||||
logger.debug("Checking information about the VRE "+vreName+" in the VO:"+voIn);
|
logger.debug("Checking information about the VRE "+vreName+" in the VO:"+voIn);
|
||||||
|
@ -46,7 +49,8 @@ class CsvUpdateTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void UpdateLocalCSVTest() {
|
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");
|
logger.debug("Updating VREs in a LOCAL CSV file");
|
||||||
updaterCSV.updateCSVformCSVList(scopeIn);
|
updaterCSV.updateCSVformCSVList(scopeIn);
|
||||||
logger.debug("Update CSV done");
|
logger.debug("Update CSV done");
|
||||||
|
@ -58,7 +62,8 @@ class CsvUpdateTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void MissingLocalCSVTest(){
|
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");
|
logger.debug("Getting missing VRE in a LOCAL CSV file");
|
||||||
updaterCSV.missingVREinCSV(scopeIn, listVOs);
|
updaterCSV.missingVREinCSV(scopeIn, listVOs);
|
||||||
logger.debug("Missing CSV done");
|
logger.debug("Missing CSV done");
|
||||||
|
@ -72,7 +77,8 @@ class CsvUpdateTest {
|
||||||
@Disabled
|
@Disabled
|
||||||
@Test
|
@Test
|
||||||
void UpdateEndTimeVRETest(){
|
void UpdateEndTimeVRETest(){
|
||||||
try(VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){
|
try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build())
|
||||||
|
{
|
||||||
String voTimeIn="D4Research";
|
String voTimeIn="D4Research";
|
||||||
String vreTimeName="FoodborneOutbreak";
|
String vreTimeName="FoodborneOutbreak";
|
||||||
int yearIn=2024;
|
int yearIn=2024;
|
||||||
|
@ -129,7 +135,8 @@ class CsvUpdateTest {
|
||||||
int choice=0;
|
int choice=0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
try (VREQueryService updaterCSV = new VREQueryService(InCsvFile,skipLines)){
|
try(VREQueryService updaterCSV = new VREQueryService.VQSBuilder().setCSVFiles(filePath,InCsvFileName,skipLines).build())
|
||||||
|
{
|
||||||
|
|
||||||
logger.debug("Menu:");
|
logger.debug("Menu:");
|
||||||
logger.debug("1. Update VREs in a LOCAL CSV file");
|
logger.debug("1. Update VREs in a LOCAL CSV file");
|
||||||
|
|
Loading…
Reference in New Issue