/* * Copyright (c) 2011-2014 Jeppetto and Jonathan Thompson * * 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.iternine.jeppetto.dao; import java.util.Collections; import java.util.Iterator; import java.util.Map; public class ComparingQueryModelDAO implements QueryModelDAO<Sample, String> { //------------------------------------------------------------- // Variables - Private //------------------------------------------------------------- private QueryModel storedQueryModel; //------------------------------------------------------------- // Constructors //------------------------------------------------------------- protected ComparingQueryModelDAO(Class<Sample> entityClass, Map<String, Object> daoProperties) { // ignore } //------------------------------------------------------------- // Implementation - GenericDAO //------------------------------------------------------------- @Override public Sample findById(String id) throws NoSuchItemException, JeppettoException { throw new UnsupportedOperationException(); } @Override public Iterable<Sample> findByIds(String... ids) throws JeppettoException { throw new UnsupportedOperationException(); } @Override public Iterable<Sample> findAll() throws JeppettoException { throw new UnsupportedOperationException(); } @Override public void save(Sample entity) throws OptimisticLockException, JeppettoException { throw new UnsupportedOperationException(); } @Override public void delete(Sample entity) throws JeppettoException { throw new UnsupportedOperationException(); } @Override public void deleteById(String id) throws JeppettoException { throw new UnsupportedOperationException(); } @Override public void deleteByIds(String... ids) throws JeppettoException { throw new UnsupportedOperationException(); } @Override public <U extends Sample> U getUpdateObject() { throw new UnsupportedOperationException(); } @Override public <U extends Sample> Sample updateById(U updateObject, String s) throws JeppettoException { throw new UnsupportedOperationException(); } @Override public <U extends Sample> Iterable<Sample> updateByIds(U updateObject, String... strings) throws FailedBatchException, JeppettoException { throw new UnsupportedOperationException(); } @Override public void flush() throws JeppettoException { throw new UnsupportedOperationException(); } //------------------------------------------------------------- // Implementation - QueryModelDAO //------------------------------------------------------------- @Override public Sample findUniqueUsingQueryModel(QueryModel queryModel) throws NoSuchItemException, TooManyItemsException, JeppettoException { compare(queryModel); return null; } @Override public Iterable<Sample> findUsingQueryModel(QueryModel queryModel) throws JeppettoException { compare(queryModel); return Collections.emptyList(); } @Override public Object projectUsingQueryModel(QueryModel queryModel) throws JeppettoException { compare(queryModel); return 1; } @Override public void deleteUsingQueryModel(QueryModel queryModel) throws JeppettoException { compare(queryModel); } @Override public <U extends Sample> Sample updateUniqueUsingQueryModel(U updateObject, QueryModel queryModel) throws JeppettoException { compare(queryModel); return null; } @Override public <U extends Sample> Iterable<Sample> updateUsingQueryModel(U updateObject, QueryModel queryModel) throws JeppettoException { compare(queryModel); return Collections.emptyList(); } @Override public Condition buildCondition(String conditionField, ConditionType conditionType, Iterator argsIterator) { Condition condition = new Condition(); condition.setField(conditionField); switch (conditionType) { case Equal: case NotEqual: case GreaterThan: case GreaterThanEqual: case LessThan: case LessThanEqual: case Within: case NotWithin: condition.setConstraint(conditionType + " " + argsIterator.next()); break; case Between: condition.setConstraint(conditionType + " " + argsIterator.next() + " and " + argsIterator.next()); break; case IsNull: case IsNotNull: condition.setConstraint(conditionType); break; default: throw new IllegalArgumentException("Unexpected enumeration: " + conditionType); } return condition; } @Override public Projection buildProjection(String projectionField, ProjectionType projectionType, Iterator argsIterator) { return new Projection(projectionField, projectionType.toString()); } //------------------------------------------------------------- // Methods - Private //------------------------------------------------------------- private void compare(QueryModel queryModel) { if (storedQueryModel == null) { storedQueryModel = queryModel; } else { try { if (!storedQueryModel.equals(queryModel)) { throw new RuntimeException(String.format("QueryModels are not equal:\n%s\n%s", storedQueryModel, queryModel)); } } finally { storedQueryModel = null; } } } }