/* * LoadAFriend.java * * Created on December 19, 2006, 10:22 PM * * Description: Loads a Friend instance. * * Copyright (C) 2006 Stephen L. Reed. * * This program is free software; you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; * if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.texai.kb.persistence.sample; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import net.sf.ehcache.CacheManager; import org.apache.log4j.Logger; import org.openrdf.model.URI; import org.openrdf.model.Value; import org.openrdf.model.impl.LiteralImpl; import org.openrdf.model.impl.URIImpl; import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; import org.texai.kb.CacheInitializer; import org.texai.kb.persistence.DistributedRepositoryManager; import org.texai.kb.persistence.RDFEntityManager; import org.texai.util.TexaiException; /** Sample that loads a Friend instance. * * @author reed */ public final class LoadAFriend { /** the log4j logger */ private static final Logger LOGGER = Logger.getLogger(PersistANewFriend.class.getName()); /** the RDF entity manager */ private final RDFEntityManager rdfEntityManager; /** the repository connection */ private RepositoryConnection repositoryConnection; /** the friend entity id */ private URI friendId; /** * Creates a new instance of LoadAFriend. */ public LoadAFriend() { super(); rdfEntityManager = new RDFEntityManager(); } /** Initializes this application. */ public void initialize() { CacheInitializer.initializeCaches(); getClass().getClassLoader().setDefaultAssertionStatus(true); // optional repositoryConnection = DistributedRepositoryManager.getInstance().getRepositoryConnectionForRepositoryName("Test"); LOGGER.info("clearing the Sesame2 repository " + repositoryConnection.getRepository().getDataDir()); try { repositoryConnection.clear(); } catch (final RepositoryException ex) { throw new TexaiException(ex); } } /** Creates and persists a Friend instance. */ public void createAndPersistAFriend() { try { repositoryConnection.setAutoCommit(false); } catch (final RepositoryException ex) { throw new TexaiException(ex); } // populate the Friend final String name = "Stephen Reed"; final String birthday = "09-20"; final String gender = "male"; final Set<Object> thingsMade = new HashSet<>(); thingsMade.add(new URIImpl("http://texai.org")); final String firstName = "Stephen"; final String familyName = "Reed"; final Date dateOfBirth = (new GregorianCalendar(1951, 9, 20, 0, 0, 0)).getTime(); final Friend friend = new Friend( name, birthday, gender, thingsMade, firstName, familyName, dateOfBirth); // persist the RDF entity and commit the transaction rdfEntityManager.persist(friend); friendId = friend.getId(); try { repositoryConnection.commit(); } catch (final RepositoryException ex) { throw new TexaiException(ex); } } /** Loads a persisted Friend instance. */ public void loadAPersistedFriend() { // load via an iterator final Iterator<Friend> friend_iter = rdfEntityManager.rdfEntityIterator( Friend.class, null); // overrideContext final Friend friend1 = friend_iter.next(); LOGGER.info("loaded via iterator: " + friend1); // load via friend id final Friend friend2 = rdfEntityManager.find( Friend.class, friendId); LOGGER.info("loaded via URI: " + friendId + " --> " + friend2); // load via identifying property value final URI predicate = new URIImpl("http://xmlns.com/foaf/0.1/name"); final Value value = new LiteralImpl("Stephen Reed"); final List<Friend> friends = rdfEntityManager.find( predicate, value, Friend.class); assert friends.size() == 1 : "friends must have size 1"; final Friend friend3 = friends.get(0); LOGGER.info("loaded via an identifying property: " + value.toString() + " --> " + friend3); } /** Finalizes this application. */ public void finalization() { CacheManager.getInstance().shutdown(); rdfEntityManager.close(); try { repositoryConnection.close(); DistributedRepositoryManager.shutDown(); } catch (final RepositoryException ex) { throw new TexaiException(ex); } LOGGER.info("LoadAFriend completed"); } /** Executes this application. * * @param args the command line arguments, which are not used */ public static void main(final String[] args) { final LoadAFriend loadAFriend = new LoadAFriend(); loadAFriend.initialize(); loadAFriend.createAndPersistAFriend(); loadAFriend.loadAPersistedFriend(); loadAFriend.finalization(); } }