com.codefupanda.persistor.util.SpringMongoUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.codefupanda.persistor.util.SpringMongoUtil.java

Source

/*
 * MODIFIED DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 * Version 1, August 2012
 *               Based on WTFPL version 2
 *
 * Original WTFPL Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
 * 
 * Copyright (C) 2013 Shashank <shashank.physics at gmail.com>
 *  
 * Everyone is permitted to copy and distribute verbatim or modified
 * copies of this license document, and changing it is allowed
 *
 * MODIFIED DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 * 
 * 0. Give credit to the authors and contributors
 * 1. You are free to do whatever the fuck you want to with the source as long as you do not violate terms 0.
 */
package com.codefupanda.persistor.util;

import org.springframework.data.mongodb.core.query.Query;

import com.codefupanda.persistor.criteria.BetweenCriteria;
import com.codefupanda.persistor.criteria.Criteria;
import com.codefupanda.persistor.criteria.LogicalCriteria;
import com.codefupanda.persistor.criteria.NullCriteria;
import com.codefupanda.persistor.criteria.PropertyValueExpressionCriteria;
import com.codefupanda.persistor.criteria.SearchCriteria;

/**
 * Helper methods for working with Spring Mongo API
 * 
 * @author Shashank Kulkarni
 */
public class SpringMongoUtil {

    /**
     * Convert {@link SearchCriteria} to Spring MongoDB Query
     * @param searchCriteria
     * @return
     */
    public static Query convert(SearchCriteria searchCriteria) {
        Query query = new Query();

        for (Criteria criteria : searchCriteria.getCriterias()) {
            query.addCriteria(convert(criteria));
        }

        return query;
    }

    /**
     * @param criteria
     * @return
     */
    private static org.springframework.data.mongodb.core.query.Criteria convert(Criteria criteria) {
        if (criteria instanceof PropertyValueExpressionCriteria) {
            return convert((PropertyValueExpressionCriteria) criteria);
        } else if (criteria instanceof LogicalCriteria) {
            return convert((LogicalCriteria) criteria);
        } else if (criteria instanceof BetweenCriteria) {
            return convert((BetweenCriteria) criteria);
        } else if (criteria instanceof NullCriteria) {
            return convert((NullCriteria) criteria);
        }
        return null;
    }

    /**
     * @param criteria
     * @return
     */
    @SuppressWarnings("static-access")
    private static org.springframework.data.mongodb.core.query.Criteria convert(
            PropertyValueExpressionCriteria criteria) {
        org.springframework.data.mongodb.core.query.Criteria result = new org.springframework.data.mongodb.core.query.Criteria();
        if (criteria.getOp().equals("=")) {
            result = result.where(criteria.getProperty()).is(criteria.getValue());
        } else if (criteria.getOp().equals(">")) {
            result = result.where(criteria.getProperty()).gt(criteria.getValue());
        } else if (criteria.getOp().equals("<")) {
            result = result.where(criteria.getProperty()).lt(criteria.getValue());
        } else if (criteria.getOp().equals(">=")) {
            result = result.where(criteria.getProperty()).gte(criteria.getValue());
        } else if (criteria.getOp().equals("<=")) {
            result = result.where(criteria.getProperty()).lte(criteria.getValue());
        } else if (criteria.getOp().equals("in")) {
            result = result.where(criteria.getProperty()).in(criteria.getValue());
        } else if (criteria.getOp().equals("like")) {
            result = result.where(criteria.getProperty()).regex((String) criteria.getValue());
        } else if (criteria.getOp().equals("ilike")) {
            result = result.where(criteria.getProperty()).regex((String) criteria.getValue(), "i");
        }
        return result;
    }

    private static org.springframework.data.mongodb.core.query.Criteria convert(LogicalCriteria criteria) {
        org.springframework.data.mongodb.core.query.Criteria result = new org.springframework.data.mongodb.core.query.Criteria();
        org.springframework.data.mongodb.core.query.Criteria[] temp = { convert(criteria.getLhs()),
                convert(criteria.getRhs()) };

        if (criteria.getLogicalOp().equals("or")) {
            result = result.orOperator(temp);
        } else if (criteria.getLogicalOp().equals("and")) {
            result = result.andOperator(temp);
        }
        return result;
    }

    @SuppressWarnings("static-access")
    private static org.springframework.data.mongodb.core.query.Criteria convert(BetweenCriteria criteria) {
        org.springframework.data.mongodb.core.query.Criteria result = new org.springframework.data.mongodb.core.query.Criteria();
        result = result.andOperator(result.where(criteria.getProperty()).gte(criteria.getLoValue()),
                result.where(criteria.getProperty()).lte(criteria.getLoValue()));
        return result;
    }

    @SuppressWarnings("static-access")
    private static org.springframework.data.mongodb.core.query.Criteria convert(NullCriteria criteria) {
        org.springframework.data.mongodb.core.query.Criteria result = new org.springframework.data.mongodb.core.query.Criteria();
        if (criteria.isNull()) {
            result = result.where(criteria.getProperty()).is(null);
        } else {
            result = result.where(criteria.getProperty()).ne(null);
        }
        return result;
    }
}