package com.turtleplayer.persistance.framework.executor;
import com.turtleplayer.persistance.framework.db.Database;
import com.turtleplayer.persistance.framework.query.OperationDelete;
import com.turtleplayer.persistance.framework.query.OperationRead;
import com.turtleplayer.persistance.framework.query.OperationInsert;
/**
* TURTLE PLAYER
* <p/>
* Licensed under MIT & GPL
* <p/>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
* <p/>
* More Information @ www.turtle-player.co.uk
*
* @author Simon Honegger (Hoene84)
*/
public abstract class OperationExecutor
{
public static <I, Q, C> I execute(Database<Q, C, ?> db, final OperationRead<Q, C, I> operation){
return db.read(operation.get(), new Database.DbReadOp<I, C>(){
public I read(C c)
{
return operation.map(c);
}
});
}
public static <I, C, D, Q> int execute(Database<?, ?, D> db, final OperationInsert<D, I> operation, final I instance){
return db.write(new Database.DbWriteOp<D, I>()
{
public int write(D target,
I instance)
{
return operation.insert(target, instance);
}
}, instance);
}
public static <D, T> void execute(Database<?, ?, D> db, final OperationDelete<D, T> operation, T target){
db.write(new Database.DbWriteOp<D, T>()
{
public int write(D target,
T instance)
{
return operation.delete(target, instance);
}
}, target);
}
}