All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.epos.handler.dbapi.mastertable.Main Maven / Gradle / Ivy

package org.epos.handler.dbapi.mastertable;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.epos.eposdatamodel.*;
import org.epos.handler.dbapi.DBAPIClient;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;

public class Main {


    public static void main(String[] argc) throws IOException {
        //load master table excel file
        FileInputStream file = new FileInputStream("/Users/andreaorfino/Documents/dbapiTest/db-api/src/main/resources/DDSS_master_table_v6.03_20220818.xlsx");
        Workbook workbook = new XSSFWorkbook(file);

        //get the first sheet DDSS_master_table
        String sheetName = workbook.getSheetName(0);
        Sheet sheet = workbook.getSheet(sheetName);

        //iterate on every line (it exit with an exception when the line is empty)
        //it start from the 5th line to jump the headert
        for (int j = 4 ; j < sheet.getLastRowNum() ; j++) {
            Row row = sheet.getRow(j);

            //create a list to store all the entities which need to be saved
            List allRow = new ArrayList<>();

            //start with the dataProduct
            DataProduct dataProduct = new DataProduct();
            allRow.add(dataProduct);

            Identifier identifier = new Identifier();
            identifier.setType("DDSS-ID");
            String ddssid = getStringCellValue(row, 0);
            identifier.setIdentifier(ddssid);
            dataProduct.setIdentifier(List.of(identifier));

            dataProduct.setTitle(List.of(getStringCellValue(row, 6)));
            dataProduct.setType(getStringCellValue(row, 7));
            dataProduct.setDocumentation(getStringCellValue(row, 60));
            dataProduct.setQualityAssurance(getStringCellValue(row, 62));
            dataProduct.setUid(ddssid);
            dataProduct.setContactPoint(new ArrayList<>());


            String stringCellValueContactPoint1 = getStringCellValue(row, 3);
            dataProduct.getContactPoint().add(new LinkedEntity().uid(parseContactPoint(allRow, stringCellValueContactPoint1).getUid()));

            String contactPointsName = getStringCellValue(row, 50);
            String contactPointsEmail = getStringCellValue(row, 51);
            if (Objects.nonNull(contactPointsName) && Objects.nonNull(contactPointsEmail)
                && !contactPointsEmail.isBlank() && !contactPointsName.isBlank()){
                List contactPointsNameEntries;
                List contactPointsEmailEntries;
                if(contactPointsName.contains("/") && !contactPointsName.contains(",")){
                    contactPointsNameEntries = List.of(contactPointsName.split("/"));
                    contactPointsEmailEntries = List.of(contactPointsEmail.split("/"));
                } else {
                    contactPointsNameEntries = List.of(contactPointsName.split(", "));
                    contactPointsEmailEntries = List.of(contactPointsEmail.split(", "));
                }

                for (int i = 0 ; i < contactPointsEmailEntries.size() && i < contactPointsNameEntries.size() ; i++ ){
                    String buildedContactPointString = contactPointsNameEntries.get(i).trim() + " <" + contactPointsEmailEntries.get(i).trim() + ">";
                    ContactPoint contactPoint = parseContactPoint(allRow, buildedContactPointString);
                    if (contactPoint!= null) {
                        dataProduct.getContactPoint().add(new LinkedEntity().uid(contactPoint.getUid()));
                    }
                }
            }


            Organization organization = new Organization();
            String acronym = getStringCellValue(row, 2);
            organization.setAcronym(acronym);
            organization.setUid(acronym);
            dataProduct.setPublisher(new ArrayList<>());
            allRow.add(organization);

            for (int i = 0 ; i < 13 ; i++) {
                String orgString = getStringCellValue(row, i * 3 + 11);
                if (orgString != null && !orgString.isBlank()){

                Organization subOrganization = new Organization();
                allRow.add(subOrganization);

                subOrganization.setUid(orgString);
                subOrganization.setAcronym(orgString);

                String orgCountry = getStringCellValue(row, i * 3 + 12);
                subOrganization.setAddress(new Address().countryCode(orgCountry));

                String orgUrl = getStringCellValue(row, i * 3 + 13);
                subOrganization.setURL(orgUrl);

                dataProduct.getPublisher().add(
                        new LinkedEntity()
                                .uid(subOrganization.getUid())
                                .entityType("Organization")
                );
                //subOrganization.setMemberOf(List.of(new LinkedEntity().uid(organization.getUid())));
                }

            }

            String statusDataProductImplementationStatus = getStringCellValue(row, 56);
            if(statusDataProductImplementationStatus != null && !statusDataProductImplementationStatus.isBlank()){
                DataProductImplementationStatus dataProductImplementationStatus = new DataProductImplementationStatus();
                allRow.add(dataProductImplementationStatus);

                dataProductImplementationStatus.setStatus(statusDataProductImplementationStatus);
                dataProductImplementationStatus.setDataProduct(dataProduct.getUid());
                dataProductImplementationStatus.setDataProvider(organization.getUid());

            }

            Distribution distribution = new Distribution();
            allRow.add(distribution);

            distribution.setUid(dataProduct.getUid() + "_distribution");
            distribution.setConformsTo(getStringCellValue(row, 58));
            distribution.setFormat(getStringCellValue(row, 59));
            distribution.setDataPolicy(getStringCellValue(row, 61));
            distribution.setLicence(getStringCellValue(row, 63));

            dataProduct.setDistribution(List.of(new LinkedEntity().uid(distribution.getUid())));


            WebService webService = new WebService();
            allRow.add(webService);

            webService.setUid(dataProduct.getUid() + "_webservice");

            webService.setAaaiTypes(getStringCellValue(row, 66));
            ArrayList documentations = new ArrayList<>();
            documentations.add(new Documentation().uri(getStringCellValue(row, 64)));
            webService.setDocumentation(documentations);

            distribution.setAccessService(new LinkedEntity().uid(webService.getUid()));

            DBAPIClient dbapi = new DBAPIClient();

            allRow.forEach( e -> {
                e.setEditorId("backoffice");
                e.setState(State.PUBLISHED);
                e.setFileProvenance("Master Table");
                dbapi.create(e);
            });

            System.out.println(j);

        }



    }

    private static ContactPoint parseContactPoint(List allRow, String stringCellValueContactPoint) {
        ContactPoint contactPoint = new ContactPoint();
        allRow.add(contactPoint);

        if (stringCellValueContactPoint != null && !stringCellValueContactPoint.isBlank()) {
            Person person = new Person();
            allRow.add(person);
            person.setFamilyName("");
            List s = List.of(stringCellValueContactPoint.split(" "));
            for (int i = 0; i < s.size(); i++) {
                String elem = s.get(i);
                if (elem.contains("<") && elem.contains(">")) {
                    String email = elem.replace("<", "").replace(">", "");
                    person.setEmail(List.of(email));
                    contactPoint.setEmail(List.of(email));
                    person.setUid(email);
                    contactPoint.setUid(email);
                } else if (i > 0) {
                    person.setFamilyName(person.getFamilyName() + " " + elem);
                }
            }
            if(contactPoint.getUid() != null){
                contactPoint.setUid(UUID.randomUUID().toString());
            }
            person.setGivenName(s.get(0));
            contactPoint.setPerson(new LinkedEntity().uid(person.getUid()));
            return contactPoint;
        } else { return null; }
    }

    private static String getStringCellValue(Row row, int i) {
        try{
            return row.getCell(i).getStringCellValue();
        } catch (IllegalStateException ignored){
            return String.valueOf(row.getCell(i).getBooleanCellValue());
        }
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy