Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2002-2013 the original author or authors.
   * 
   * 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.springframework.data.gemfire.function;
 
 import java.util.List;
 
 
 import  com.gemstone.gemfire.cache.execute.ResultSender;

Sends collection results using a ResultSender in chunks determined by batchSize

Author(s):
David Turanski
Since:
1.3.0
 
 	private final int batchSize;
 	private ResultSender<ObjectresultSender;
 	
 	public BatchingResultSender(int batchSize, ResultSender<ObjectresultSender) {
 		Assert.notNull(resultSender"resultSender cannot be null");
 		Assert.isTrue(batchSize >= 0, "batchSize must be >= 0");
 		this. = batchSize;
 		this. = resultSender;
 	}
 	
  
 	public void sendResults(Iterable<?> result) {
 		if ( == 0) {
 			.lastResult(result);
 			return;
 		}	
 	
 		List<Objectchunk = new ArrayList<Object>();
 		
 		for (Iterator<?> it = result.iterator(); it.hasNext();) {
 		    if (chunk.size() < ) {
 				chunk.add(it.next());
 		    }		    
 			 
 			if (chunk.size() ==  || !it.hasNext()) {
                 if (it.hasNext()) {
                 		.sendResult(chunk);
                 } else {
                 		.lastResult(chunk);
                 }
            		chunk.clear();
 			}
 		}
 	}
 
 	
 	public void sendArrayResults(Object result) {
 		
 		if ( == 0) {
 			.lastResult(result);
 			return;
 		}
 		
 		Assert.isTrue(ObjectUtils.isArray(result));		
 		
 		int length = Array.getLength(result);
 		
 		for (int from =0; from <  lengthfrom += ) {		
 			int to = Math.min(length,from + );
 			Object chunk = copyOfRange(result,fromto);
 
 			if (to == length -1) {
 				.lastResult(chunk);
 			} else {
 				.sendResult(chunk);
 			}	
 		}
 	}


Parameters:
result
from
to
Returns:
 
 	private Object copyOfRange(Object resultint fromint to) {
		Class<?> arrayClass = result.getClass();
		int size = to - from;
		if (int[].class.isAssignableFrom(arrayClass)) {
			int[] array = new int[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getInt(resultfrom + i);
            }
			return array;
		}
		if (float[].class.isAssignableFrom(arrayClass)) {
			float[] array = new float[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getFloat(resultfrom + i);
            }
			return array;
		}
		if (double[].class.isAssignableFrom(arrayClass)) {
			double[] array = new double[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getDouble(resultfrom + i);
            }
			return array;
		}
		if (boolean[].class.isAssignableFrom(arrayClass)) {
			boolean[] array = new boolean[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getBoolean(resultfrom + i);
            }
			return array;
		}
		if (byte[].class.isAssignableFrom(arrayClass)) {
			byte[] array = new byte[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getByte(resultfrom + i);
            }
			return array;
		}
		if (short[].class.isAssignableFrom(arrayClass)) {
			short[] array = new short[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getShort(resultfrom + i);
            }
			return array;
		}
		if (long[].class.isAssignableFrom(arrayClass)) {
			long[] array = new long[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getLong(resultfrom + i);
            }
			return array;
		}
		if (char[].class.isAssignableFrom(arrayClass)) {
			char[] array = new char[size];
			for(int i = 0; i < size ; ++i){
                array[i] = Array.getChar(resultfrom + i);
            }
			return array;
		}
	    return Arrays.copyOfRange((Object[])resultfromto);
	 
	}
New to GrepCode? Check out our FAQ X