001    package com.khubla.pragmatach.plugin.mongodb;
002    
003    import com.khubla.pragmatach.framework.api.PragmatachException;
004    import com.khubla.pragmatach.plugin.mongodb.db.DBCollectionFactory;
005    import com.khubla.pragmatach.plugin.mongodb.serializer.BasicObjectSerializer;
006    import com.khubla.pragmatach.plugin.mongodb.serializer.ObjectSerializer;
007    import com.mongodb.BasicDBObject;
008    import com.mongodb.DBCollection;
009    import com.mongodb.DBCursor;
010    import com.mongodb.DBObject;
011    
012    /**
013     * @author tom
014     */
015    public class MongoDBObjectPersister {
016       /**
017        * DBCollection
018        */
019       private final DBCollection dbCollection;
020       /**
021        * serializer
022        */
023       private final ObjectSerializer objectSerializer;
024    
025       public MongoDBObjectPersister(Class<?> typeClazz) {
026          objectSerializer = new BasicObjectSerializer(typeClazz);
027          dbCollection = DBCollectionFactory.getInstance().getDBCollection(typeClazz);
028       }
029    
030       /**
031        * find an instance by an id
032        * 
033        * @return
034        */
035       public DBObject find(String id) throws PragmatachException {
036          final BasicDBObject basicDBObject = new BasicDBObject();
037          basicDBObject.append(MongoDBDAO.ID, id);
038          final DBCursor dbCursor = dbCollection.find(basicDBObject);
039          if (dbCursor.hasNext()) {
040             return dbCursor.next();
041          } else {
042             return null;
043          }
044       }
045    
046       public Object load(DBObject dbObject) throws PragmatachException {
047          try {
048             return objectSerializer.deserialize(dbObject);
049          } catch (final Exception e) {
050             throw new PragmatachException("Exception in load", e);
051          }
052       }
053    
054       public void save(Object object) throws PragmatachException {
055          try {
056             /*
057              * save
058              */
059             final BasicDBObject basicDBOBject = objectSerializer.serialize(object);
060             dbCollection.save(basicDBOBject);
061          } catch (final Exception e) {
062             throw new PragmatachException("Exception in save", e);
063          }
064       }
065    }