org.chililog.server.data.Controller.java Source code

Java tutorial

Introduction

Here is the source code for org.chililog.server.data.Controller.java

Source

//
// Copyright 2010 Cinch Logic Pty Ltd.
//
// http://www.chililog.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

package org.chililog.server.data;

import org.apache.commons.lang.NullArgumentException;
import org.chililog.server.common.ChiliLogException;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;

/**
 * Base controller class for accessing data in mongoDB
 * 
 * @author vibul
 * 
 */
public abstract class Controller {

    /**
     * Basic constructor
     */
    public Controller() {
        return;
    }

    /**
     * Returns the name of the mongoDB collection for this business object
     */
    protected abstract String getDBCollectionName();

    /**
     * Returns the mongoDB write strategy used in saving. By default, it is set to <code>SAFE</code>. This means
     * exceptions are raised for network issues, and server errors; waits on a server for the write operation. However,
     * it can be overridden.
     */
    protected WriteConcern getDBWriteConern() {
        return WriteConcern.SAFE;
    }

    /**
     * Saves the user into mongoDB
     * 
     * @param db
     *            MongoDb connection
     * @param businessObject
     *            Business object to save
     * @throws ChiliLogException
     *             if there is an error during saving
     */
    public void save(DB db, BO businessObject) throws ChiliLogException {
        if (db == null) {
            throw new NullArgumentException("db");
        }
        if (businessObject == null) {
            throw new NullArgumentException("businessObject");
        }

        try {
            DBObject obj = businessObject.toDBObject();
            DBCollection coll = db.getCollection(this.getDBCollectionName());
            if (businessObject.isExistingRecord()) {
                long recordVersion = businessObject.getDocumentVersion();
                obj.put(BO.DOCUMENT_VERSION_FIELD_NAME, recordVersion + 1);

                BasicDBObject query = new BasicDBObject();
                query.put(BO.DOCUMENT_ID_FIELD_NAME, obj.get(BO.DOCUMENT_ID_FIELD_NAME));
                query.put(BO.DOCUMENT_VERSION_FIELD_NAME, recordVersion);

                coll.update(query, obj, false, false, this.getDBWriteConern());
            } else {
                obj.put(BO.DOCUMENT_VERSION_FIELD_NAME, (long) 1);
                coll.insert(obj);
            }
        } catch (MongoException ex) {
            throw new ChiliLogException(ex, Strings.MONGODB_SAVE_ERROR, ex.getMessage());
        }
    }

    /**
     * Removes the specified business object form mongoDB
     * 
     * @param db
     *            MongoDb connection
     * @param businessObject
     *            business object to remove from the database
     * @throws ChiliLogException
     *             if there is any error during deleting
     */
    public void remove(DB db, BO businessObject) throws ChiliLogException {
        if (db == null) {
            throw new NullArgumentException("db");
        }
        if (businessObject == null) {
            throw new NullArgumentException("businessObject");
        }

        try {
            DBCollection coll = db.getCollection(this.getDBCollectionName());
            if (businessObject.isExistingRecord()) {
                DBObject obj = new BasicDBObject();
                obj.put(BO.DOCUMENT_ID_FIELD_NAME, businessObject.getDocumentID());
                coll.remove(obj);
            }
        } catch (MongoException ex) {
            throw new ChiliLogException(ex, Strings.MONGODB_REMOVE_ERROR, ex.getMessage());
        }
    }
}