com.gemini.common.repository.impl.BaseRepositoryMongoDBImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.gemini.common.repository.impl.BaseRepositoryMongoDBImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.gemini.common.repository.impl;

import com.gemini.common.repository.BaseRepository;
import com.gemini.common.repository.Entity;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.mongodb.MongoClient;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import java.util.List;
import org.mongodb.morphia.Morphia;
import org.mongodb.morphia.dao.BasicDAO;
import org.pmw.tinylog.Logger;

/**
 *
 * @author schari
 * @param <T>
 * @param <String>
 */
public abstract class BaseRepositoryMongoDBImpl<T extends Entity, String> extends BasicDAO<T, String>
        implements BaseRepository<T, String> {

    @Inject
    MongoClient mongoClient;
    @Inject
    Morphia morphia;
    @Inject
    String dbName;

    private final Class<T> type;

    @Inject
    public BaseRepositoryMongoDBImpl(@Assisted Class<T> type, MongoClient mongoClient, Morphia morphia,
            String dbName) {
        super(type, mongoClient, morphia, (java.lang.String) dbName);
        this.type = type;

        //map the class to the database
        morphia.map(type);
    }

    public Class<T> getType() {
        return type;
    }

    @Override
    public List<T> list() {
        Logger.debug("list-find:{}",
                ToStringBuilder.reflectionToString(type.getSimpleName(), ToStringStyle.MULTI_LINE_STYLE));
        return getDatastore().createQuery(type).asList();
    }

    @Override
    public void update(String id, T transientObject) {
        Logger.debug("update: id: {} object: ",
                ToStringBuilder.reflectionToString(id, ToStringStyle.MULTI_LINE_STYLE),
                ToStringBuilder.reflectionToString(transientObject, ToStringStyle.MULTI_LINE_STYLE));
        save(transientObject);
    }

    @Override
    public T get(String id) {
        Logger.debug("get-find id: {}", ToStringBuilder.reflectionToString(id, ToStringStyle.MULTI_LINE_STYLE));
        return findOne(getDatastore().createQuery(type).filter("_id", id));
    }

    @Override
    public void add(T newInstance) {
        Logger.debug("add: {}", ToStringBuilder.reflectionToString(newInstance, ToStringStyle.MULTI_LINE_STYLE));
        save(newInstance);
    }

    @Override
    public void remove(String id) {
        Logger.debug("remove: {}", ToStringBuilder.reflectionToString(id, ToStringStyle.MULTI_LINE_STYLE));
        this.deleteById(id);
    }
}