package com.bagri.client.hazelcast.impl; import com.bagri.support.idgen.IdGenerator; import com.hazelcast.core.IAtomicLong; import com.hazelcast.core.IFunction; public class IdGeneratorImpl implements IdGenerator<Long> { private IAtomicLong idGen; public IdGeneratorImpl(IAtomicLong idGen) { this.idGen = idGen; } @Override public boolean adjust(Long newValue) { return newValue == idGen.alterAndGet(new MaxValue(newValue)); } @Override public Long next() { // return idGen.incrementAndGet(); } @Override public Long[] nextRange(int size) { Long[] result = new Long[size]; long current = idGen.getAndAdd(size); for (int i=1; i <= size; i++) { result[i] = current + 1; } return result; } public static class MaxValue implements IFunction<Long, Long> { /** * */ private static final long serialVersionUID = 4889277331209519782L; private long newValue; MaxValue(long value) { this.newValue = value; } @Override public Long apply(Long input) { if (input < newValue) { //input = newValue; return newValue; } return input; } } }