view src/main/java/org/mpi/openmind/scripts/DivaImport.java @ 76:f04bd29d284d

renamed replaceSourceRelation() to replaceUniqueSourceRelation() to make intent clearer.
author casties
date Fri, 24 Feb 2017 20:22:23 +0100
parents 615d27dce9b3
children
line wrap: on
line source

package org.mpi.openmind.scripts;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.hibernate.mapping.Array;
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.bo.Node;
import org.mpi.openmind.repository.bo.Relation;
import org.mpi.openmind.repository.services.ServiceRegistry;

import cl.maps.utils.AttKey;


public class DivaImport {
	
	static{
		ConsoleAppender console = new ConsoleAppender(); //create appender
		  //configure the appender
		  String PATTERN = "%d [%p|%c|%C{1}] %m%n";
		  console.setLayout(new PatternLayout(PATTERN)); 
		  console.setThreshold(Level.INFO);
		  console.activateOptions();
		  //add appender to any Logger (here is root)
		  Logger.getRootLogger().addAppender(console);
	}

	public static String DIGITALIZATION = "DIGITALIZATION";
	public static String userName = "diva-import";
	
	public static void execute(){
		ServiceRegistry services = new ServiceRegistry();
		createDataModel(services.getWrapper());
		importData(services.getWrapper());
	}
	
	private static void createDataModel(WrapperService ontology){
		
		try {
			
			Entity digi = new Entity(Node.TYPE_TBOX, Node.TYPE_TBOX, false);
			digi.setOwnValue(DIGITALIZATION);
			
			digi = ontology.saveLWDefinition(digi, userName);
			
			Attribute attName = new Attribute(Node.TYPE_TBOX, "text", "name");
			attName.setSourceId(digi.getId());
			attName.setSourceObjectClass(Node.TYPE_TBOX);
			attName.setSourceModif(digi.getModificationTime());
			attName.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
			
			ontology.saveDefAttribute(attName, userName);
			
			Attribute num_files = new Attribute(Node.TYPE_TBOX, "text", "num_files");
			num_files.setSourceId(digi.getId());
			num_files.setSourceObjectClass(Node.TYPE_TBOX);
			num_files.setSourceModif(digi.getModificationTime());
			num_files.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
			
			ontology.saveDefAttribute(num_files, userName);
			
			
			//DIGI is_digitalization_of CODEX
			Entity codex = ontology.getDefinition("CODEX");
			Relation rel = new Relation(digi, codex, "is_digitalization_of");
			
			ontology.saveDefRelation(rel, userName);
			
			//-----------
			Entity witness = ontology.getDefinition("WITNESS");
			
			Attribute end_page = new Attribute(Node.TYPE_TBOX, "text", "end_page");
			end_page.setSourceId(witness.getId());
			end_page.setSourceObjectClass(Node.TYPE_TBOX);
			end_page.setSourceModif(witness.getModificationTime());
			end_page.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
			
			ontology.saveDefAttribute(end_page, userName);
			
			Attribute start_page = new Attribute(Node.TYPE_TBOX, "text", "start_page");
			start_page.setSourceId(witness.getId());
			start_page.setSourceObjectClass(Node.TYPE_TBOX);
			start_page.setSourceModif(witness.getModificationTime());
			start_page.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
			
			ontology.saveDefAttribute(start_page, userName);
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}
	
	private static void importData(WrapperService ontology){
		try {
			
			Class.forName("org.postgresql.Driver");
			Connection conn = null;
			conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/diva","jurzua", "221082");
			
			String sql = "SELECT * FROM imageserve_manuscript";
			
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			int countNoCodex = 0;
			int countYesCodex = 0;
			int countIdCodex = 0;
			List<String> noCodexList = new ArrayList<String>();
			
			List<Entity> list = new ArrayList<Entity>();
			while(rs.next()){
				String directory  = rs.getString("directory"); 
				Long ismi_id = rs.getLong("ismi_id");
				Integer numFiles = rs.getInt("num_files");
				Boolean hasFolioNums = rs.getBoolean("has_folio_nums");
				String folioPgs = rs.getString("folio_pgs");
				
				String ov = directory.replace("/data7/srv/images/", "");
				
				Entity digi = new Entity(Node.TYPE_ABOX, DIGITALIZATION, false);
				digi.setOwnValue(ov);
				
				digi.addAttribute(new Attribute("name", "text", ov));
				digi.addAttribute(new Attribute("num_files", "text", numFiles + ""));
				
				
				if(ismi_id != null && ismi_id != 0){
					Entity codex = ontology.getEntityByIdWithContent(ismi_id);
					digi.replaceUniqueSourceRelation(codex, "CODEX", "is_digitalization_of");
					countYesCodex++;
				}else{
					List<Entity> list0 = ontology.getEntityByDefAndOW("CODEX", ov, 1);
					if(list0.size() > 0){
						Entity codex = ontology.getEntityByIdWithContent(list0.get(0).getId());
						digi.replaceUniqueSourceRelation(codex, "CODEX", "is_digitalization_of");
						countIdCodex++;
					}else{
						noCodexList.add(ov);
						countNoCodex++;
					}
				}
				
				list.add(digi);
			}
			
			
			conn.close();
		
			ontology.saveEntityList(list, userName);
			
			System.out.println("countNoCodex: " + countNoCodex);
			System.out.println("countYesCodex: " + countYesCodex);
			System.out.println("countIdCodex: " + countIdCodex);
			System.out.println("list.size(): " + list.size());
			System.out.println("END");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public static void main(String[] args){
		execute();
		System.exit(0);
	}
}