/* * Copyright (C) 2014 Divide.io * * 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 io.divide.server.dao; import io.divide.dao.ServerDAO; import io.divide.shared.event.Event; import io.divide.shared.event.EventManager; import io.divide.shared.transitory.TransientObject; import io.divide.shared.transitory.query.Query; import io.divide.shared.util.ObjectUtils; import java.security.KeyPair; import java.util.Collection; import java.util.List; public final class DAOManager implements ServerDAO { public static final String ACTION_QUERY = "action_query"; public static final String ACTION_GET = "action_get"; public static final String ACTION_SAVE = "action_save"; public static final String ACTION_DELETE = "action_delete"; public static final String ACTION_EXISTS = "action_exists"; private EventManager eventManager = EventManager.get(); private ServerDAO serverDao; public DAOManager(ServerDAO serverDao){ this.serverDao = serverDao; } // @Override // public List<TransientObject> query(Query query) throws DAOException { // List<TransientObject> results = serverDao.query(query); // eventManager.fire(new QUERY_EVENT(results)); // return results; // } @Override public <O extends TransientObject> Collection<O> get(String objectType, String... keys) throws DAOException { Collection<O> results = serverDao.get(objectType,keys); eventManager.fire(new GET_EVENT<O>(results)); return results; } @Override public <O extends TransientObject> List<O> query(Query query) throws DAOException { List<O> results = serverDao.query(query); eventManager.fire(new QUERY_EVENT<O>(results)); return results; } @Override public void save(TransientObject... objects) throws DAOException { serverDao.save(objects); eventManager.fire(new SAVE_EVENT(objects)); } @Override public void delete(TransientObject... objects) throws DAOException { serverDao.delete(objects); eventManager.fire(new DELETE_EVENT(objects)); } @Override public boolean exists(TransientObject... objects) { boolean exists = serverDao.exists(objects); eventManager.fire(new EXISTS_EVENT(objects)); return exists; } @Override public int count(String objectType) { return serverDao.count(objectType); } @Override public KeyPair keys(KeyPair keys) { return serverDao.keys(keys); } public static final class QUERY_EVENT<T extends TransientObject> extends Event { Collection<T> transientObjects; protected QUERY_EVENT(Collection<T> transientObjects) { super(DAOManager.class); this.transientObjects = transientObjects; } } public static final class GET_EVENT<T extends TransientObject> extends Event { Collection<T> transientObjects; protected GET_EVENT(Collection<T> transientObjects) { super(DAOManager.class); this.transientObjects = transientObjects; } } public static final class SAVE_EVENT extends Event { Collection<TransientObject> transientObjects; protected SAVE_EVENT(TransientObject... object) { super(DAOManager.class); this.transientObjects = ObjectUtils.v2c(object); } } public static final class DELETE_EVENT extends Event { Collection<TransientObject> transientObjects; protected DELETE_EVENT(TransientObject... object) { super(DAOManager.class); this.transientObjects = ObjectUtils.v2c(object); } } public static final class EXISTS_EVENT extends Event { Collection<TransientObject> transientObjects; protected EXISTS_EVENT(TransientObject... object) { super(DAOManager.class); this.transientObjects = ObjectUtils.v2c(object); } } }