diff --git a/pom.xml b/pom.xml index 87e6f09..5992b82 100755 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - + org.gcube.tools maven-parent 1.1.0 @@ -27,6 +27,11 @@ + + org.gcube.core + common-scope-maps + + com.sun.xml.bind jaxb-impl diff --git a/src/main/java/org/gcube/vremanagement/App.java b/src/main/java/org/gcube/vremanagement/App.java index 9f093d8..7ef91c4 100755 --- a/src/main/java/org/gcube/vremanagement/App.java +++ b/src/main/java/org/gcube/vremanagement/App.java @@ -1,15 +1,55 @@ package org.gcube.vremanagement; -public class App{ +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; + +public class App { - public static void main (String[] args) - { + public static void main(String[] args) { // Create here the CSV and XML managers object to parse and sync the XML with the CSV file - CsvManager csvManager = new CsvManager("/home/biniam/eclipse-workspace/vre-removed-publisher/src/main/resources/updated_VREDecommisioned-240326.csv"); - XmlManager xmlManager = new XmlManager("/home/biniam/eclipse-workspace/vre-removed-publisher/src/main/resources/doc.xml"); + //CsvManager csvManager = new CsvManager("/home/biniam/eclipse-workspace/vre-removed-publisher/src/main/resources/updated_VREDecommisioned-240326.csv"); + String filePath = "src/main/resources"; + String filename = "doc.xml"; + XmlManager xmlManager = new XmlManager(filePath+File.separator+filename); // Parse CSV and XML files - csvManager.parse(); + //csvManager.parse(); xmlManager.parse(); + + // Parse XML to HashMap + // HashMap> gatewayMap = xmlManager.parseToHashMap(); + + /*for (String gatewayName: gatewayMap.keySet()) + { + ArrayList listGateway = gatewayMap.get(gatewayName); + for (Gateway gate : listGateway) + { + System.out.println("Gateway name: "+gate.getName()); + System.out.println("Gateway description: "+gate.getDescription()); + ArrayList vosList = gate.getVosList(); + for (Vos voTemp: vosList) + { + ArrayList vreList = voTemp.getVresList(); + System.out.println("VO name:" +voTemp.getName()); + System.out.println("VO description: "+voTemp.getDescription()); + for(Vres vreTemp:vreList) + { + System.out.println("VRE name: "+vreTemp.getName()); + System.out.println("Vre description: "+vreTemp.getDescription()); + } + } + + + } + + + }*/ + // methods to query and print information + //xmlManager.getGatewaysInfo(); + xmlManager.getVosInfo("D4Science.org Detached Gateway"); + //xmlManager.findVo("D4Science.org Detached Gateway", "gCubeApps"); + xmlManager.findVre("D4Science.org Detached Gateway", "D4OS", "CNROutreach"); + } -} +} \ No newline at end of file diff --git a/src/main/java/org/gcube/vremanagement/CsvManager.java b/src/main/java/org/gcube/vremanagement/CsvManager.java index cd25453..4f8ef45 100755 --- a/src/main/java/org/gcube/vremanagement/CsvManager.java +++ b/src/main/java/org/gcube/vremanagement/CsvManager.java @@ -6,6 +6,11 @@ import java.io.IOException; import java.util.ArrayList; + + +import com.opencsv.CSVParser; + + public class CsvManager implements VreRemPubInterface { private String filePath; private ArrayList dataList; diff --git a/src/main/java/org/gcube/vremanagement/Gateway.java b/src/main/java/org/gcube/vremanagement/Gateway.java new file mode 100755 index 0000000..f23caf4 --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/Gateway.java @@ -0,0 +1,39 @@ +package org.gcube.vremanagement; + +import java.util.ArrayList; + +public class Gateway { + private String name; + private String description; + private ArrayListlistOfVos; + public Gateway(String name, String description) { + this.name = name; + this.description = description; + this.listOfVos= new ArrayList(); + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + // Method to print gateway information + public void printInfo() { + System.out.println("Gateway Name: " + name); + System.out.println("Gateway Description: " + description); + } + + public ArrayList getVosList() { + // TODO Auto-generated method stub + return listOfVos; + } + + // In the Gateway class + public void addVos(Vos vos) { + listOfVos.add(vos); + } + +} diff --git a/src/main/java/org/gcube/vremanagement/Vos.java b/src/main/java/org/gcube/vremanagement/Vos.java new file mode 100755 index 0000000..b7a15aa --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/Vos.java @@ -0,0 +1,54 @@ +package org.gcube.vremanagement; + +import java.util.ArrayList; +import java.util.HashMap; + +public class Vos { + private String key; + private String name; + private String scope; + private ArrayListlistOfVres; + public Vos(String key,String scope,String name) { + this.key = key; + this.name = name; + this.scope = scope; + this.listOfVres=new ArrayList(); + + } + + + public String getKey() { + return key; + } + + public String getName() { + return name; + } + + public String getScope() { + return scope; + } + + // Method to print VO information + public void printInfo() { + System.out.println("VO Key: " + key); + System.out.println("VO Name: " + name); + System.out.println("VO Scope: " + scope); + } + + public ArrayList getVresList() { + // TODO Auto-generated method stub + return listOfVres; + } + + public String getDescription() { + // TODO Auto-generated method stub + return null; + } + + public void addVres(Vres vres) { + // TODO Auto-generated method stub + listOfVres.add(vres); + } + +} diff --git a/src/main/java/org/gcube/vremanagement/Vres.java b/src/main/java/org/gcube/vremanagement/Vres.java new file mode 100755 index 0000000..2c5696e --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/Vres.java @@ -0,0 +1,67 @@ +package org.gcube.vremanagement; + +public class Vres { + private String key; + private String name; + private String description; + private String manager; + private String startDate; + private String endDate; + + public Vres(String key, String name, String description, String manager, String startDate, String endDate) { + this.key = key; + this.name = name; + this.description = description; + this.manager = manager; + this.startDate = startDate; + this.endDate = endDate; + } + + public Vres() { + // TODO Auto-generated constructor stub + } + + public String getKey() { + return key; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getManager() { + return manager; + } + + public String getStartDate() { + return startDate; + } + + public String getEndDate() { + return endDate; + } + + // Method to print VRE information + public void printInfo() { + System.out.println("VRE Key: " + key); + System.out.println("VRE Name: " + name); + System.out.println("VRE Description: " + description); + System.out.println("VRE Manager: " + manager); + System.out.println("VRE Start Date: " + startDate); + System.out.println("VRE End Date: " + endDate); + } + + public String getManagers() { + // TODO Auto-generated method stub + return manager; + } + + public String getCatalogUrl() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/org/gcube/vremanagement/XmlManager.java b/src/main/java/org/gcube/vremanagement/XmlManager.java index cea4eca..841efce 100755 --- a/src/main/java/org/gcube/vremanagement/XmlManager.java +++ b/src/main/java/org/gcube/vremanagement/XmlManager.java @@ -1,75 +1,264 @@ package org.gcube.vremanagement; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XmlManager implements VreRemPubInterface { - private String filePath; - private HashMap tagCountMap; + private String filePath; + private HashMap gatewaysMap; - public XmlManager(String filePath) { - this.filePath = filePath; - System.out.println("XML manager created!"); - this.tagCountMap = new HashMap<>(); - } + public XmlManager(String filePath) { + this.filePath = filePath; + this.gatewaysMap = new HashMap<>(); + } - @Override - public void parse() { - try { - File xmlFile = new File(filePath); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(xmlFile); - doc.getDocumentElement().normalize(); - NodeList nodeList = doc.getElementsByTagName("*"); // Get all elements + @Override + public void parse() { + try { + File xmlFile = new File(filePath); + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(xmlFile); + doc.getDocumentElement().normalize(); + NodeList gatewayNodes = doc.getElementsByTagName("gateways"); + + NodeList gatewayList = gatewayNodes.item(0).getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - String tagName = node.getNodeName(); - // Update tag count in the HashMap - tagCountMap.put(tagName, tagCountMap.getOrDefault(tagName, 0) + 1); - } - } - System.out.println("XML file parsed successfully."); - // Optionally, print the tag count map here - System.out.println("Tag count map: " + tagCountMap); - } catch (Exception e) { - e.printStackTrace(); - } - } + for (int i = 0; i < gatewayList.getLength(); i++) { + Node gatewayNode = gatewayList.item(i); + if (gatewayNode.getNodeType() == Node.ELEMENT_NODE) { + Element gatewayElement = (Element) gatewayNode; + String gatewayName = gatewayElement.getElementsByTagName("name").item(0).getTextContent().trim(); + String gatewayDescription = gatewayElement.getElementsByTagName("description").item(0) + .getTextContent().trim(); - @Override - public void update() { - // Implement update logic if needed - } + //System.out.println("gateway name:"+gatewayName); + //System.out.println("Gateway descr:"+gatewayDescription); + Gateway gateway = new Gateway(gatewayName, gatewayDescription); - // Other methods... + // Find the element within the gateway entry + NodeList vosList = gatewayElement.getElementsByTagName("vos"); + for (int j = 0; j < vosList.getLength(); j++) { + Node vosNode = vosList.item(j); + if (vosNode.getNodeType() == Node.ELEMENT_NODE) { + Element vosElement = (Element) vosNode; + + + + + String voKey = vosElement.getElementsByTagName("key").item(0).getTextContent().trim(); + String voName = vosElement.getElementsByTagName("name").item(0).getTextContent().trim(); + String voScope = vosElement.getElementsByTagName("scope").item(0).getTextContent().trim(); + + //getting vo + Vos vos = new Vos(voKey,voScope, voName); + + //vos.printInfo(); + + // Iterate on the vres.. + //NodeList vreList = vosElement.getElementsByTagName("vres"); + // + //for (int k = 0; k < vreList.getLength(); k++) { + // Node voNode = voList.item(k); + // if (voNode.getNodeType() == Node.ELEMENT_NODE) { + // Element voElement = (Element) voNode; + + + // String voName = voElement.getElementsByTagName("name").item(0).getTextContent().trim(); + // String voScope = voElement.getElementsByTagName("scope").item(0).getTextContent().trim(); + // String voKey = voElement.getElementsByTagName("key").item(0).getTextContent().trim(); + // Create a new Vos object and add it to the gateway's vosList + // Vos vos = new Vos(voKey, voScope, voName); + + // Find the element within the VO entry + NodeList vresList = vosElement.getElementsByTagName("vres"); + for (int l = 0; l < vresList.getLength(); l++) { + Node vresNode = vresList.item(l); + if (vresNode.getNodeType() == Node.ELEMENT_NODE) { + Element vresElement = (Element) vresNode; + // Iterate through elements representing VREs within + NodeList vreEntryList = vresElement.getElementsByTagName("entry"); + for (int m = 0; m < vreEntryList.getLength(); m++) { + Node vreEntryNode = vreEntryList.item(m); + if (vreEntryNode.getNodeType() == Node.ELEMENT_NODE) { + Element vreEntryElement = (Element) vreEntryNode; + String vreKey = vreEntryElement.getElementsByTagName("key").item(0) + .getTextContent().trim(); + String vreName = vreEntryElement.getElementsByTagName("name") + .item(0).getTextContent().trim(); + String vreDescription = vreEntryElement + .getElementsByTagName("description").item(0) + .getTextContent().trim(); + String vreManager = vreEntryElement.getElementsByTagName("managers") + .item(0).getTextContent().trim(); + String vreStartDate = vreEntryElement + .getElementsByTagName("startdate").item(0).getTextContent().trim(); + String vreEndDate = vreEntryElement.getElementsByTagName("enddate") + .item(0).getTextContent().trim(); + + // Create a new Vres object and add it to the Vos's vreList + Vres vres = new Vres(vreKey, vreName, vreDescription, vreManager, + vreStartDate, vreEndDate); + vos.addVres(vres); + + //vres.printInfo(); + } + } + } + } + + // Add the Vos object to the gateway's vosList + gateway.addVos(vos); + //} + //} + } + } + + // Store the gateway object in the gateways map + + gatewaysMap.put(gatewayName, gateway); + //computeIfAbsent(gatewayName, k -> new ArrayList<>()).add(gateway); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void getGatewaysInfo() { + System.out.println("Name of the Gateway:"); + gatewaysMap.keySet().stream().filter(gatewayName -> gatewayName.endsWith("Gateway")) + .forEach(System.out::println); + } + // Other methods... + + @Override + public void update() { + // Implement update logic if needed + } @Override public void find() { - // TODO Auto-generated method stub - + // Implement find logic if needed } @Override public void read() { - // TODO Auto-generated method stub - + // Implement read logic if needed } @Override public void write() { - // TODO Auto-generated method stub - + // Implement write logic if needed } - // Other methods... + //public HashMap> parseToHashMap() { +// return gatewaysMap; +// } + + + public void getVosInfo(String _gateway) { + System.out.println("VOs Information for Gateway: " + _gateway); + + if (gatewaysMap.containsKey(_gateway)) { + Gateway gatewayItem = gatewaysMap.get(_gateway); + //Gateway gateway = gatewayList.get(0); // Get the first gateway with the specified name + ArrayList vosList = gatewayItem.getVosList(); + if (vosList != null) { + for (Vos vos : vosList) { + vos.printInfo(); + //System.out.println("Name of VREs: "); + //ArrayList vresList = vos.getVresList(); + //if (vresList != null && !vresList.isEmpty()) { + // for (Vres vre : vresList) { + // vre.printInfo(); + // } + //} else { + // System.out.println("No VREs found for this VOS."); + // } + // System.out.println("----------------------------------------"); + } + } else { + //System.out.println("No VOS found for this gateway."); + } + } else { + System.out.println("No gateways found with the name: " + _gateway); + } + } + + // Method to find a VO within a gateway + public void findVo(String _gateway, String _vo) { + + if (gatewaysMap.containsKey(_gateway)) + { + Gateway gatewayItem = gatewaysMap.get(_gateway); + boolean found = false; + ArrayList vosList = gatewayItem.getVosList(); + if (vosList != null) { + for (Vos vos : vosList) { + if (vos.getName().equals(_vo)) { + found = true; + System.out.println("VO info for " + _vo + " in " + _gateway + ":"); + System.out.println("Name of VOS: " + vos.getName()); + } + } + + } + if (!found) { + System.out.println("VO " + _vo + " not found in the gateway " + _gateway + "."); + } + } else { + System.out.println("Gateway " + _gateway + " not found."); + } + } + + public void findVre(String _gateway, String _vo, String _vre) { + //System.out.println("VRE Information for VO: " + _vo + " in Gateway:\n " + _gateway); + boolean vreFound = false; // Flag to track if VRE exists + //ArrayList gatewayList = gatewaysMap.get(_gateway); + + if (gatewaysMap.containsKey(_gateway)) { + + Gateway gatewayItem = gatewaysMap.get(_gateway); + ArrayList vosList = gatewayItem.getVosList(); + if (vosList != null) { + for (Vos vos : vosList) { + if (vos.getName().equals(_vo)) { + ArrayList vresList = vos.getVresList(); + if (vresList != null) { + for (Vres vre : vresList) { + if (vre.getName().equals(_vre)) { + // Print VRE information + vre.printInfo(); + vreFound = true; // Set flag to true + // return; // Exit method after printing information + } + } + } + } + } + } + } + // If execution reaches here and VRE not found, print message + if (!vreFound) { + System.out.println("VRE does not exist in the " + _vo + " of the " + _gateway); + } + } + + +// Other methods... }