/* * @(#)DBPopulate.java 1.0 Jul 27, 2011 * * Copyright 2000-2011 ETH Zurich. All Rights Reserved. * * This software is the proprietary information of ETH Zurich. * Use is subject to license terms. * * @(#) $Id: DBPopulate.java 2019 2011-10-14 11:28:40Z D\sleone $ */ package org.zoodb.test.jdo.sna; import java.io.IOException; import java.util.Iterator; import javax.jdo.Extent; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import org.zoodb.jdo.ZooJdoHelper; import org.zoodb.jdo.ZooJdoProperties; import org.zoodb.tools.ZooHelper; /** * Database population class. * * @author Ilija Bogunovic <ilijab@student.ethz.ch> * @author Darijan Jankovic <jdarijan@student.ethz.ch> * @version 1.0 */ public class DBPopulate { private VersantGraph graph; private final String dbName; private static PersistenceManager session; private static PersistenceManagerFactory pmf; /** * Constructs object with new session to Versant database and reads database * into graph object. */ public DBPopulate(final String dbName) { this.dbName = dbName; if (DBPopulate.session == null) { this.open(); } } public static void commit() { DBPopulate.session.currentTransaction().commit(); DBPopulate.session.currentTransaction().begin(); } public static void cleanCache() { // commit(); // DBPopulate.session.evictAll(false, VersantEdge.class); // DBPopulate.session.evictAll(false, VersantNode.class); DBPopulate.session.evictAll(); } public void open() { try { final ZooJdoProperties property = new ZooJdoProperties(this.dbName); if (DBPopulate.pmf == null) { if (ZooHelper.getDataStoreManager().dbExists(this.dbName)) { ZooHelper.getDataStoreManager().removeDb(this.dbName); } ZooHelper.getDataStoreManager().createDb(this.dbName); DBPopulate.pmf = JDOHelper.getPersistenceManagerFactory(property); DBPopulate.session = pmf.getPersistenceManager(); DBPopulate.session.currentTransaction().begin(); ZooJdoHelper.schema(session).addClass(VersantGraph.class); ZooJdoHelper.schema(session).addClass(VersantNodeEdges.class); // ZooSchema.create(session, VersantEdge.class); ZooJdoHelper.schema(session).addClass(VersantNode.class); commit(); close(); } DBPopulate.session = pmf.getPersistenceManager(); DBPopulate.session.currentTransaction().begin(); this.graph = this.getGraphFromDB(); } catch (final Exception e) { e.printStackTrace(); System.exit(1); } } public void close() { DBPopulate.session.currentTransaction().rollback(); DBPopulate.session.close(); DBPopulate.session = null; this.graph = null; } /** * Populates graph with information from pajek file. * * @param pajekFile * path to pajek file. */ public void dbPopulate(final String pajekFile) { final VersantGraph graph = new VersantGraph(this.dbName); DBPopulate.session.makePersistent(graph); final VersantBuilder builder = new VersantBuilder(graph); final PajekParser parser = new PajekParser(builder); try { parser.parse(pajekFile); } catch (final IOException e) { e.printStackTrace(); } commit(); } /** * Makes transitive closure matrix and persists to database. */ public void makeTransitiveClosure() { final VersantBuilder obj = new VersantBuilder(getGraph()); obj.addPredecessorMatrix(); commit(); } /** * Returns graph object from Versant database with default graph name. * * @return graph. */ public VersantGraph getGraphFromDB() { VersantGraph graph = null; try { Extent<VersantGraph> ext = session.getExtent(VersantGraph.class); Iterator<VersantGraph> it = ext.iterator(); if (it.hasNext()) { graph = it.next(); } else { graph = null; } ext.closeAll(); } catch (final Exception e) { // e.printStackTrace(); } return graph; } /** * Deletes all objects in Versant database. */ public void deleteAllFromDB() { // Extent extG = session.getExtent(VersantGraph.class); // session.newQuery(extG).deletePersistentAll(); // Extent extN = session.getExtent(VersantNode.class); // session.newQuery(extN).deletePersistentAll(); // Extent extE = session.getExtent(VersantEdge.class); // session.newQuery(extE).deletePersistentAll(); ZooJdoHelper.schema(session).getClass(VersantGraph.class).dropInstances(); ZooJdoHelper.schema(session).getClass(VersantNode.class).dropInstances(); // ZooSchema.locate(session, VersantEdge.class).dropInstances(); ZooJdoHelper.schema(session).getClass(VersantNodeEdges.class).dropInstances(); this.graph = null; DBPopulate.commit(); } /** * Returns graph object. * * @return graph. */ public VersantGraph getGraph() { if (this.graph == null) { this.graph = this.getGraphFromDB(); } //System.out.println("graph = " + graph); return this.graph; } }