/* * Copyright 2006-2012 Amazon Technologies, Inc. or its affiliates. * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks * of Amazon Technologies, Inc. or its affiliates. All rights reserved. * * 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.amazon.carbonado.repo.logging; import java.io.IOException; import com.amazon.carbonado.Cursor; import com.amazon.carbonado.FetchException; import com.amazon.carbonado.PersistException; import com.amazon.carbonado.Query; import com.amazon.carbonado.Storable; import com.amazon.carbonado.filter.Filter; import com.amazon.carbonado.filter.FilterValues; /** * * * @author Brian S O'Neill */ class LoggingQuery implements Query { private final LoggingStorage mStorage; private final Query mQuery; LoggingQuery(LoggingStorage storage, Query query) { mStorage = storage; mQuery = query; } @Override public Class getStorableType() { return mQuery.getStorableType(); } @Override public Filter getFilter() { return mQuery.getFilter(); } @Override public FilterValues getFilterValues() { return mQuery.getFilterValues(); } @Override public int getBlankParameterCount() { return mQuery.getBlankParameterCount(); } @Override public Query with(int value) { return newInstance(mQuery.with(value)); } @Override public Query with(long value) { return newInstance(mQuery.with(value)); } @Override public Query with(float value) { return newInstance(mQuery.with(value)); } @Override public Query with(double value) { return newInstance(mQuery.with(value)); } @Override public Query with(boolean value) { return newInstance(mQuery.with(value)); } @Override public Query with(char value) { return newInstance(mQuery.with(value)); } @Override public Query with(byte value) { return newInstance(mQuery.with(value)); } @Override public Query with(short value) { return newInstance(mQuery.with(value)); } @Override public Query with(Object value) { return newInstance(mQuery.with(value)); } @Override public Query withValues(Object... objects) { return newInstance(mQuery.withValues(objects)); } @Override public Query and(String filter) throws FetchException { return newInstance(mQuery.and(filter)); } @Override public Query and(Filter filter) throws FetchException { return newInstance(mQuery.and(filter)); } @Override public Query or(String filter) throws FetchException { return newInstance(mQuery.or(filter)); } @Override public Query or(Filter filter) throws FetchException { return newInstance(mQuery.or(filter)); } @Override public Query not() throws FetchException { return newInstance(mQuery.not()); } @Override public Query orderBy(String property) throws FetchException, UnsupportedOperationException { return newInstance(mQuery.orderBy(property)); } @Override public Query orderBy(String... strings) throws FetchException, UnsupportedOperationException { return newInstance(mQuery.orderBy(strings)); } @Override public Query after(T start) throws FetchException { return newInstance(mQuery.after(start)); } @Override public Cursor fetch() throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.fetch() on " + this); } return mQuery.fetch(); } @Override public Cursor fetch(Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.fetch(controller) on " + this + ", controller: " + controller); } return mQuery.fetch(controller); } @Override public Cursor fetchSlice(long from, Long to) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.fetchSlice(start, to) on " + this + ", from: " + from + ", to: " + to); } return mQuery.fetchSlice(from, to); } @Override public Cursor fetchSlice(long from, Long to, Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.fetchSlice(start, to, controller) on " + this + ", from: " + from + ", to: " + to + ", controller: " + controller); } return mQuery.fetchSlice(from, to, controller); } @Override public Cursor fetchAfter(T start) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.fetchAfter(start) on " + this + ", start: " + start); } return mQuery.fetchAfter(start); } @Override public Cursor fetchAfter(T start, Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.fetchAfter(start, controller) on " + this + ", start: " + start + ", controller: " + controller); } return mQuery.fetchAfter(start, controller); } @Override public S loadOne() throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.loadOne() on " + this); } return mQuery.loadOne(); } @Override public S loadOne(Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.loadOne() on " + this + ", controller: " + controller); } return mQuery.loadOne(controller); } @Override public S tryLoadOne() throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.tryLoadOne() on " + this); } return mQuery.tryLoadOne(); } @Override public S tryLoadOne(Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.tryLoadOne(controller) on " + this + ", controller: " + controller); } return mQuery.tryLoadOne(controller); } @Override public void deleteOne() throws PersistException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.deleteOne() on " + this); } mQuery.deleteOne(); } @Override public void deleteOne(Controller controller) throws PersistException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.deleteOne(controller) on " + this + ", controller: " + controller); } mQuery.deleteOne(controller); } @Override public boolean tryDeleteOne() throws PersistException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.tryDeleteOne() on " + this); } return mQuery.tryDeleteOne(); } @Override public boolean tryDeleteOne(Controller controller) throws PersistException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.tryDeleteOne(controller) on " + this + ", controller: " + controller); } return mQuery.tryDeleteOne(controller); } @Override public void deleteAll() throws PersistException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.deleteAll() on " + this); } mQuery.deleteAll(); } @Override public void deleteAll(Controller controller) throws PersistException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.deleteAll(controller) on " + this + ", controller: " + controller); } mQuery.deleteAll(controller); } @Override public long count() throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.count() on " + this); } return mQuery.count(); } @Override public long count(Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.count(controller) on " + this + ", controller: " + controller); } return mQuery.count(controller); } @Override public boolean exists() throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.exists() on " + this); } return mQuery.exists(); } @Override public boolean exists(Controller controller) throws FetchException { Log log = mStorage.mLog; if (log.isEnabled()) { log.write("Query.exists(controller) on " + this + ", controller: " + controller); } return mQuery.exists(controller); } @Override public boolean printNative() { return mQuery.printNative(); } @Override public boolean printNative(Appendable app) throws IOException { return mQuery.printNative(app); } @Override public boolean printNative(Appendable app, int indentLevel) throws IOException { return mQuery.printNative(app, indentLevel); } @Override public boolean printPlan() { return mQuery.printPlan(); } @Override public boolean printPlan(Appendable app) throws IOException { return mQuery.printPlan(app); } @Override public boolean printPlan(Appendable app, int indentLevel) throws IOException { return mQuery.printPlan(app, indentLevel); } @Override public String toString() { return mQuery.toString(); } @Override public int hashCode() { return mQuery.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof LoggingQuery) { LoggingQuery other = (LoggingQuery) obj; return mQuery.equals(other.mQuery); } return false; } private LoggingQuery newInstance(Query query) { return new LoggingQuery(mStorage, query); } }