package org.openntf.domino.tests.obusse; import java.util.UUID; import org.openntf.domino.Database; import org.openntf.domino.Document; import org.openntf.domino.DocumentCollection; import org.openntf.domino.Session; import org.openntf.domino.graph2.impl.DConfiguration; import org.openntf.domino.graph2.impl.DElementStore; import org.openntf.domino.graph2.impl.DFramedGraphFactory; import org.openntf.domino.graph2.impl.DFramedTransactionalGraph; import org.openntf.domino.graph2.impl.DGraph; import org.openntf.domino.junit.TestRunnerUtil; import org.openntf.domino.utils.Factory; import org.openntf.domino.utils.Factory.SessionType; public class SutolGraphDemo implements Runnable { public static final String SESSIONS_PATH = "SUTOL/sessions.nsf"; public static final String PRESENTER_PATH = "SUTOL/presenter.nsf"; public static final String ATTENDEES_PATH = "SUTOL/attendees.nsf"; public static void main(final String[] args) { TestRunnerUtil.runAsDominoThread(new SutolGraphDemo(), TestRunnerUtil.NATIVE_SESSION); } /** * thread runner */ @Override public void run() { initDbs(); buildGraph(); testGraph(); } /** * aux method to reset all data in the graph store */ private void initDbs() { try { Session session = Factory.getSession(SessionType.CURRENT); Database sessionDb = session.getDatabase(SESSIONS_PATH); Database presenterDb = session.getDatabase(PRESENTER_PATH); Database attendeeDb = session.getDatabase(ATTENDEES_PATH); if (sessionDb != null) { System.out.println("Cleaning sessions..."); removeDocs(sessionDb.getAllDocuments()); } if (presenterDb != null) { System.out.println("Cleaning presenter..."); removeDocs(presenterDb.getAllDocuments()); } if (attendeeDb != null) { System.out.println("Cleaning attendees..."); removeDocs(attendeeDb.getAllDocuments()); } session.recycle(); System.gc(); } catch (Exception e) { e.printStackTrace(); } } private void removeDocs(final DocumentCollection col) { for (Document doc : col) { doc.remove(true); } } private void testGraph() { try { DFramedTransactionalGraph<DGraph> framedGraph = setupGraph(); Iterable<ConferenceSession> sessions = framedGraph.getVertices(null, null, ConferenceSession.class); for (ConferenceSession sess : sessions) { System.out.println("FOUND SESSION: " + sess.getTitle()); for (Attendee att : sess.getAttendees()) { System.out.println("ATTENDEE: " + att.getName()); } } } catch (Exception e) { e.printStackTrace(); } } private String createId() { return UUID.randomUUID().toString(); } private void buildGraph() { try { DFramedTransactionalGraph<DGraph> framedGraph = setupGraph(); ConferenceSession session1 = framedGraph.addVertex(createId(), ConferenceSession.class); session1.setTitle("DDM, Letting Admins Sleep later and stay at Pubs longer since 2005"); Presenter keith = framedGraph.addVertex("Keith Brooks", Presenter.class); keith.setName("Keith Brooks"); session1.addPresenter(keith); ConferenceSession session2 = framedGraph.addVertex(createId(), ConferenceSession.class); session2.setTitle("Look mum, no passwords!"); Presenter martin = framedGraph.addVertex("Martin Leyrer", Presenter.class); martin.setName("Martin Leyrer"); session2.addPresenter(martin); ConferenceSession session3 = framedGraph.addVertex(createId(), ConferenceSession.class); session3.setTitle("Utilizing the OpenNTF Domino API in Domino Applications"); Presenter oliver = framedGraph.addVertex("Oliver Busse", Presenter.class); oliver.setName("Oliver Busse"); session3.addPresenter(oliver); // attendees Attendee attOliver = framedGraph.addVertex("OB", Attendee.class); attOliver.setName("Oliver Busse"); Attendee attPeterParker = framedGraph.addVertex("PP", Attendee.class); attPeterParker.setName("Peter Parker"); session1.addAttendee(attOliver); session1.addAttendee(attPeterParker); framedGraph.commit(); } catch (Exception e) { e.printStackTrace(); } } /** * init the graph data store(s) * * @return */ private DFramedTransactionalGraph<DGraph> setupGraph() { DElementStore sessionStore = new DElementStore(); sessionStore.setStoreKey(SESSIONS_PATH); sessionStore.addType(ConferenceSession.class); DElementStore attendeeStore = new DElementStore(); attendeeStore.setStoreKey(ATTENDEES_PATH); attendeeStore.addType(Attendee.class); DElementStore presenterStore = new DElementStore(); presenterStore.setStoreKey(PRESENTER_PATH); presenterStore.addType(Presenter.class); DConfiguration config = new DConfiguration(); DGraph graph = new DGraph(config); config.addElementStore(sessionStore); config.addElementStore(attendeeStore); config.addElementStore(presenterStore); config.setDefaultElementStore(sessionStore.getStoreKey()); DFramedGraphFactory factory = new DFramedGraphFactory(config); DFramedTransactionalGraph<DGraph> fg = (DFramedTransactionalGraph<DGraph>) factory.create(graph); return fg; } }