/******************************************************************************* * Copyright 2010 Universidade do Minho, Ricardo Vila�a and Francisco Cruz * * 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.ublog.benchmark; import java.io.UnsupportedEncodingException; import org.ublog.utils.Pair; import org.ublog.benchmark.operations.CollectionOperation; public abstract class ComplexBenchMarkClient implements BenchMarkClient { private int clientID; private BenchOperation currentComplexOperation; private int peerID; public ComplexBenchMarkClient(int clientID) { this.clientID = clientID; this.currentComplexOperation = null; } @Override public boolean hasMoreOperations() { return this.hasMoreComplexOperations() || (this.currentComplexOperation != null && this.currentComplexOperation .hasMoreDBOperations()); } public abstract boolean hasMoreComplexOperations(); public abstract Pair<BenchOperation, Double> getNextComplexOperation(); public abstract void handleFinishedComplexOperation(BenchOperation op); @Override public synchronized Pair<CollectionOperation, Double> nextOperation() throws UnsupportedEncodingException { CollectionOperation res; double time = 0.0; if (this.currentComplexOperation == null) { Pair<BenchOperation, Double> next = this.getNextComplexOperation(); this.currentComplexOperation = next.getFirst(); time = next.getSecond(); } else { if (!this.currentComplexOperation.hasMoreDBOperations()) { Pair<BenchOperation, Double> next = this .getNextComplexOperation(); this.currentComplexOperation = next.getFirst(); time = next.getSecond(); } } res = this.currentComplexOperation.getNextDBOperation(); return new Pair<CollectionOperation, Double>(res, time); } @Override public int getClientID() { return this.clientID; } public void setPeerID(int peerID) { this.peerID = peerID; } public int getPeerID() { return peerID; } }