view src/main/java/org/mpi/openmind/scripts/UpdateMpiwgDigitalizations.java @ 127:3e772f7f43e0 default tip

ismi-date with long month names in xml dump.
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Thu, 11 May 2023 18:15:45 +0200
parents 452d02798054
children
line wrap: on
line source

package org.mpi.openmind.scripts;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.mpi.openmind.cache.WrapperService;
import org.mpi.openmind.repository.bo.Attribute;
import org.mpi.openmind.repository.bo.Entity;
import org.mpi.openmind.repository.services.ServiceRegistry;
import org.mpi.openmind.repository.services.utils.AttributeFilter;

/**
 * Reads a CSV file with McGill scan directory names (DIGITALIZATION name),
 * MPIWG library directory names and access information ("free", or other)
 * and updates DIGITALIZATION objects with matching public_manifest_url 
 * Attribute.
 * 
 * CSV file name: mcgill-mpiwg-mapping.csv
 * CSV columns: "mcgilldir, mpiwgdir, access"
 *  
 * @author casties
 *
 */
public class UpdateMpiwgDigitalizations {

	public static String file = "mcgill-mpiwg-mapping.csv";
	
	public static final String PUB_URL_ATT_NAME = "public_manifest_url";
	
	public static void execute(WrapperService ws) throws Exception {
		
		System.out.println("Update MPIWG information in DIGITALIZATIONs");
		
		for (String line : getLinesFromFile()) {
		    String[] fields = line.split(",");
		    if (fields.length < 3) {
		        System.out.println("ERROR: empty line: " +  line);
		        continue;
		    }
		    String mcgillDir = fields[0];
		    String mpiwgDir = fields[1];
		    String access = fields[2];
		    // find DIGITALIZATION
			List<AttributeFilter> filterList = new ArrayList<AttributeFilter>();
			filterList.add(new AttributeFilter("name", mcgillDir, "DIGITALIZATION"));
			Map<Entity, Attribute> resultMap = ws.searchEntityByAttributeFilter(filterList, 1);
			if (resultMap.isEmpty()) {
				System.out.println("WARNING: DIGITALIZATION not found for " + mcgillDir);
				continue;
			}
			Entity digi = resultMap.keySet().iterator().next();
			/*
			// find CODEX
			List<Entity> tmp = ws.getTargetsForSourceRelation(digi, "is_digitalization_of", "CODEX", 1);
			Entity codex = tmp.get(0);
			//System.out.println(codex.getId() + "\t" +  digi.getId());
			//System.out.println("codexIdList.add(new Long("+ codex.getId() +"));");
			System.out.print(codex.getId() + ",");
			*/
            // update DIGITALIZATION
            if (digi != null) {
                ws.getEntityContent(digi);
                String pubUrl = null;
                //String privUrl = null;
                // set public url
                if (access.equalsIgnoreCase("free")) {
                    pubUrl = "https://digilib.mpiwg-berlin.mpg.de/digitallibrary/Manifester/IIIF/permanent!library!"
                            + mpiwgDir + "!pageimg";
                    System.out.println("INFO: set " + PUB_URL_ATT_NAME + " of " + mcgillDir + " to " + pubUrl);
                    Attribute pubUrlAtt = digi.getAttributeByName(PUB_URL_ATT_NAME);
                    if (pubUrlAtt == null) {
                        pubUrlAtt = new Attribute(PUB_URL_ATT_NAME, "text", pubUrl);
                        digi.addAttribute(pubUrlAtt);
                    } else {
                    	String oldUrl = pubUrlAtt.getValue();
                    	if (!pubUrl.equals(oldUrl)) {
                    		System.out.println("WARNING: URL changed! old="+oldUrl+" new="+pubUrl);
                            pubUrlAtt.setValue(pubUrl);                    		
                    	}
                    }
                }
                // save
                ws.saveEntity(digi, "update-mpiwg-digitalizations", null);

            } else {
                System.out.println("WARNING: entity not found: " + mcgillDir);
            }
        }
		
	}
	
	public static List<String> getLinesFromFile(){
		List<String> rs = new ArrayList<String>();
		
		try (FileReader a = new FileReader(file);
		        BufferedReader br = new BufferedReader(a);) {
	        String line;
	        line = br.readLine();

	        while((line = br.readLine()) != null) {
	        	rs.add(line);
	        }			
	        
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return rs;
	}
	
	
	public static void main(String[] args) throws Exception {
	    if (args.length > 0) {
	        file = args[0];
	    }
		ServiceRegistry sr = new ServiceRegistry();
		execute(sr.getWrapper());
		
		System.exit(0);
	}

}