Mercurial > hg > openmind
view src/main/java/org/mpi/openmind/scripts/recovery/SaxXmlRecovery.java @ 112:933d17f95016
new script MigratePrimeAliases to migrate is_prime_alias_X_of.
author | Robert Casties <casties@mpiwg-berlin.mpg.de> |
---|---|
date | Wed, 14 Aug 2019 20:48:02 +0200 |
parents | 615d27dce9b3 |
children |
line wrap: on
line source
package org.mpi.openmind.scripts.recovery; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; 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 org.mpi.openmind.repository.utils.OMUtils; public class SaxXmlRecovery { private static Logger logger = Logger.getLogger(SaxXmlRecovery.class); private static String user = "recovery_"; static { Date dNow = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); user = user + dateFormat.format(dNow); ConsoleAppender console = new ConsoleAppender(); // create appender // configure the appender String PATTERN = "%d [%p|%c{1}:%L] %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); /* FileAppender fa = new FileAppender(); fa.setName("FileLogger"); fa.setFile("/Users/jurzua/test.log"); fa.setLayout(new PatternLayout(PATTERN)); fa.setThreshold(Level.INFO); fa.setAppend(true); fa.activateOptions(); Logger.getRootLogger().addAppender(fa); */ } public static void executeEnts(String file) { long start = System.currentTimeMillis(); try { EntitySAXReader reader = new EntitySAXReader(); RecoveryCache xmlCache = reader.execute(file); ServiceRegistry services = new ServiceRegistry(); WrapperService ws = services.getWrapper(); Map<Long, Long> idMap = new HashMap<Long, Long>(); idMap = saveEnts(ws, xmlCache, idMap); saveRels(ws, xmlCache, idMap); logger.info("\n" + "**************************\n" + "Summary:\n" + "timeExecution=\t" + (System.currentTimeMillis() - start)); } catch (Exception e) { e.printStackTrace(); } } public static void executeDefs(String file) { long start = System.currentTimeMillis(); try { EntitySAXReader reader = new EntitySAXReader(); RecoveryCache xmlCache = reader.execute(file); ServiceRegistry services = new ServiceRegistry(); WrapperService ws = services.getWrapper(); Map<Long, Long> idMap = new HashMap<Long, Long>(); saveDefs(ws, xmlCache, idMap); saveDefRels(ws, xmlCache, idMap); System.out.println(idMap.size()); logger.info("\n" + "**************************\n" + "Summary:\n" + "timeExecution=\t" + (System.currentTimeMillis() - start)); } catch (Exception e) { e.printStackTrace(); } } private static void saveDefs(WrapperService ws, RecoveryCache xmlCache, Map<Long, Long> idMap) throws Exception { int i = 0; int size = xmlCache.getEnts().size(); for(Entity xmlEnt : xmlCache.getEnts()){ Long oldId = xmlEnt.getId(); xmlEnt.resetId(); xmlEnt.resetRowId(); //xmlEnt = ws.saveEntity(xmlEnt, user); ws.saveLWDefinition(xmlEnt, user); for(Attribute att : xmlEnt.getAttributes()){ att.loadEntValue(xmlEnt); ws.saveDefAttribute(att, user); } idMap.put(oldId, xmlEnt.getId()); if (i % 100 == 0) { logger.info(i + " entities loaded. " + OMUtils.percentage(i, size) + "%."); } i++; } } private static Map<Long, Long> saveEnts(WrapperService ws, RecoveryCache xmlCache, Map<Long, Long> idMap) throws Exception { //ws.getPS().setImportModus(true); no alternative method to generate the ownvalue idMap = ws.saveEntityListAsNew(new ArrayList<Entity>(xmlCache.getEnts()), user, false); return idMap; } private static void saveDefRels(WrapperService ws, RecoveryCache xmlCache, Map<Long, Long> idMap) throws Exception { int i = 0; int size = xmlCache.getRels().size(); for(Relation xmlRel : xmlCache.getRels()){ xmlRel.setSourceId(idMap.get(xmlRel.getSourceId())); xmlRel.setTargetId(idMap.get(xmlRel.getTargetId())); Relation rel = Relation.defRelation(xmlRel, ws); rel.setId(null); rel.setRowId(null); ws.saveDefRelation(rel, user); if (i % 100 == 0) { logger.info(i + " relations loaded. " + OMUtils.percentage(i, size) + "%."); } i++; } } private static void saveRels(WrapperService ws, RecoveryCache xmlCache, Map<Long, Long> idMap) throws Exception { List<Node> relList = new ArrayList<Node>(); for(Relation xmlRel : xmlCache.getRels()){ xmlRel.setSourceId(idMap.get(xmlRel.getSourceId())); xmlRel.setTargetId(idMap.get(xmlRel.getTargetId())); Relation rel = Relation.entRelation(xmlRel, ws); rel.setId(null); rel.setRowId(null); relList.add(rel); } ws.saveNodeListOnlyForScripts(relList, user); } /* private static int removingEntsFromDB(WrapperService ws, RecoveryCache xmlCache) throws Exception { logger.info("1)################# Removing ################"); int counter = 0; for (Entity def : ws.getConcepts()) { logger.info(def.getOwnValue()); for (Entity dbEnt : ws.getEntitiesByDef(def.getOwnValue())) { if (!xmlCache.existEnt(dbEnt.getId())) { logger.info("\nthis must be removed from DB=" + dbEnt); ws.removeCurrentVersionEntity(dbEnt); counter++; } } } return counter; } private static int createNewEnts(WrapperService ws, RecoveryCache xmlCache) throws Exception { logger.info("2)################# Creating ################"); int i = 0; Collection<Entity> xmlEnts = xmlCache.getEnts(); int size = xmlEnts.size(); int entsCreated = 0; List<Entity> tmpEnts = new ArrayList<Entity>(); for (Entity xmlEnt : xmlEnts) { if (!ws.existEntity(xmlEnt.getId())) { logger.info("\nThis entity must be created " + xmlEnt); // xmlEnt.setSourceRelations(xmlCache.getRelBySrc(xmlEnt.getId())); // xmlEnt.setTargetRelations(xmlCache.getRelByTar(xmlEnt.getId())); //ws.saveEntity(xmlEnt, user); tmpEnts.add(xmlEnt); entsCreated++; } if (i % 100 == 0) { logger.info(i + " entities loaded. " + percentage(i, size) + "%."); } i++; } ws.saveEntityList(tmpEnts, user); return entsCreated; } private static int refreshEnts(WrapperService ws, RecoveryCache xmlCache) throws Exception { logger.info("3)################# Refresing ################"); int counter = 0; List<Entity> tmpEnts = new ArrayList<Entity>(); for (Entity xmlEnt : xmlCache.getEnts()) { if(xmlEnt.getId().equals(Long.parseLong("423011"))){ System.out.println(); } if(xmlEnt.getId().equals(Long.parseLong("449780"))){ System.out.println(); } xmlEnt.setSourceRelations(xmlCache.getRelBySrc(xmlEnt.getId())); xmlEnt.setTargetRelations(xmlCache.getRelByTar(xmlEnt.getId())); xmlEnt.setLightweight(false); Entity dbEnt = ws.getEntityByIdWithContent(xmlEnt.getId()); if (!dbEnt.equalsContent(xmlEnt)) { logger.info("\nRefreshing " + dbEnt); dbEnt.refreshEnt(xmlEnt, ws); //ws.saveEntity(dbEnt, user); tmpEnts.add(dbEnt); counter++; } } ws.saveEntityList(tmpEnts, user); return counter; } */ public static void main(String[] args) { String s = args[0]; if(StringUtils.equals(s, "ents")){ executeEnts("/Users/jurzua/Projects/max-planck/db_backup/xml_backup/2013.07.12-ENT.xml"); }else if(StringUtils.equals(s, "rels")){ executeDefs("/Users/jurzua/Projects/max-planck/db_backup/xml_backup/2013.07.12-DEF.xml"); } System.exit(0); } }