package org.prevayler.demos.demo1;
import org.prevayler.Prevayler;
/**
* This is client code to the prevalent system. It does not need to be persisted.
*/
class PrimeCalculator {
private final Prevayler _prevayler;
private final NumberKeeper _numberKeeper;
PrimeCalculator( Prevayler prevayler){
_prevayler=prevayler;
_numberKeeper=(NumberKeeper)prevayler.prevalentSystem();
}
void start() throws Exception {
int largestPrime=0;
int primesFound=0;
int primeCandidate=_numberKeeper.lastNumber() == 0 ? 2 : _numberKeeper.lastNumber() + 1;
while (primeCandidate <= Integer.MAX_VALUE) {
if (isPrime(primeCandidate)) {
_prevayler.execute(new NumberStorageTransaction(primeCandidate));
largestPrime=primeCandidate;
primesFound=_numberKeeper.numbers().size();
System.out.println("Primes found: " + primesFound + ". Largest: "+ largestPrime);
}
primeCandidate++;
}
}
private boolean isPrime( int candidate){
if (candidate < 2) {
return false;
}
if (candidate == 2) {
return true;
}
if (candidate % 2 == 0) {
return false;
}
int factor=3;
double square=Math.ceil(Math.sqrt(candidate));
while (factor <= square) {
if (candidate % factor == 0) return false;
factor+=2;
}
return true;
}
}