/* * Copyright 2011 Marek Pilecky * * 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 com.github.mefi.jkuuza.model; import java.util.List; import org.ektorp.CouchDbConnector; import org.ektorp.ViewQuery; import org.ektorp.ViewResult; import org.ektorp.support.CouchDbRepositorySupport; import org.ektorp.support.GenerateView; import org.ektorp.support.View; /** * * @author Marek Pilecky */ public class ProductRepository extends CouchDbRepositorySupport<Product>{ public ProductRepository(CouchDbConnector db) { super(Product.class, db); initStandardDesignDocument(); } @View(name = "by_url", map = "function(doc) { if(doc && doc.docType == \"product\") { emit(doc.url, doc) }}") public Product findByUrl(String url) { ViewQuery query = new ViewQuery() .designDocId("_design/Product") .viewName("by_url") .key(url); if (db.queryView(query, Product.class).size() > 0) { return db.queryView(query, Product.class).get(0); } return null; } @View(name = "by_name", map = "function(doc) { if(doc && doc.docType == \"product\") { emit(doc.name, doc) }}") public Product findByName(String name) { ViewQuery query = new ViewQuery() .designDocId("_design/Product") .viewName("by_name") .key(name); if (db.queryView(query, Product.class).size() > 0) { return db.queryView(query, Product.class).get(0); } return null; } @View(name = "by_producer", map = "function(doc) { if(doc && doc.docType == \"product\") { emit(doc.producer, doc) }}") public Product findByProducer(String producer) { ViewQuery query = new ViewQuery() .designDocId("_design/Product") .viewName("by_producer") .key(producer); if (db.queryView(query, Product.class).size() > 0) { return db.queryView(query, Product.class).get(0); } return null; } @View(name = "by_extended_parameter_value", map = "function(doc) { if(doc && doc.docType == \"product\" && doc.params) { for (param in doc.params) { emit(doc.params[param], doc.name) }}}") public Product findByExtendedParameterValue(String value) { ViewQuery query = new ViewQuery() .designDocId("_design/Product") .viewName("by_extended_parameter_value") .key(value); if (db.queryView(query, Product.class).size() > 0) { return db.queryView(query, Product.class).get(0); } return null; } @View(name = "get_total_count", map = "function(doc) { if(doc.docType == \"product\") { emit(doc.id, null) }}") public int getTotalCount() { ViewQuery query = new ViewQuery() .designDocId("_design/Product") .viewName("get_total_count") .group(true); ViewResult r = db.queryView(query); return r.getTotalRows(); } }