import gov.nasa.jpf.annotation.Conditional;
import org.prevayler.Prevayler;
import org.prevayler.PrevaylerFactory;
import org.prevayler.demos.demo1.NumberKeeper;
import org.prevayler.demos.demo1.PrimeCalculator;
import org.prevayler.foundation.monitor.Log4jMonitor;
import org.prevayler.foundation.monitor.NullMonitor;
import org.prevayler.foundation.monitor.SimpleMonitor;
import org.prevayler.foundation.serialization.JavaSerializer;
import org.prevayler.foundation.serialization.XStreamSerializer;
import org.prevayler.implementation.clock.BrokenClock;
import org.prevayler.implementation.clock.MachineClock;
import org.prevayler.implementation.clock.PausableClock;
import java.io.File;
public class RunNumberKeeper {
// @Conditional
public static boolean USE_LOG4J_MONITOR = false;
@Conditional
public static boolean USE_NULL_MONITOR = false;
// @Conditional
public static boolean USE_BROKEN_CLOCK = false;
// @Conditional
public static boolean USE_PAUSABLE_CLOCK = false;
// @Conditional // TODO not working for tutorialTest()
public static boolean USE_XSTREAM = false;
// @Conditional
public static boolean USE_TRANSIENT_MODE = false;
// @Conditional
public static boolean USE_JOURNAL_DISK_SYNC = false;
// @Conditional
public static boolean FILE_AGE_THREASHOLD = false;
// @Conditional // TODO not working
static boolean FILE_SIZE_THREASHOLD = false;
// @Conditional // TODO not working
static boolean USE_XSTREAM_JOURNAL = false;
// @Conditional // TODO not working
static boolean USE_FILTERING = false;
private static String NUMBER_KEEPER = "NumberKeeper";
public static void main(String[] args) {
RunNumberKeeper run = new RunNumberKeeper();
try {
run.runNumberKeeper();
} catch (Exception e) {
e.printStackTrace();
}
}
public void runNumberKeeper() throws Exception {
// clean up
deleteDirectory("NumberKeeper");
// delete old counts
String folderName = clearTempFolder(NUMBER_KEEPER);
final NumberKeeper numberKeeper = new NumberKeeper();
// final Prevayler prevayler =
// PrevaylerFactory.createPrevayler(numberKeeper, folderName);
PrevaylerFactory factory = new PrevaylerFactory();
factory.configurePrevalentSystem(numberKeeper);
factory.configurePrevalenceDirectory(folderName);
configureFactory(factory);
Prevayler prevayler = factory.create();
final PrimeCalculator primeCalculator = new PrimeCalculator(
prevayler);
System.out.println("Run the first time");
primeCalculator.start();
System.out.println(prevayler.clock().time());
System.out.println();
System.out.println("Run the second time");
primeCalculator.start();
System.out.println(prevayler.clock().time());
}
private String clearTempFolder(String folderName) {
File tempFolder = new File(folderName);
boolean cleared = true;
if (tempFolder.exists()) {
for (final File file : tempFolder.listFiles()) {
if (!file.delete()) {
cleared = false;
break;
}
}
if (!cleared) {
tempFolder = new File(folderName + "_MAP");// some reader/writer
// seems not to be
// closed
if (tempFolder.exists()) {
for (final File file2 : tempFolder.listFiles()) {
if (!file2.delete()) {
throw new RuntimeException("cannot delete file:"
+ file2);
}
}
}
}
}
return tempFolder.getName();
}
protected String getClassPath() {
return "lib/Prevayler.jar;lib/prevayler-factory-2.5.jar;lib/prevayler-core-2.5.jar;lib/commons-jxpath-1.3.jar;lib/prevayler-log4j-2.7-SNAPSHOT.jar;lib/prevayler-xstream-2.7-SNAPSHOT.jar;lib/log4j-1.2.15.jar;lib/xstream-1.4.7.jar;lib/kxml2-2.3.0.jar";
}
protected String getModelFile() {
return "";
}
public void configureFactory(PrevaylerFactory factory) {
if (USE_LOG4J_MONITOR) {
factory.configureMonitor(new Log4jMonitor());
} else if (USE_NULL_MONITOR) {
factory.configureMonitor(new NullMonitor());
} else {
factory.configureMonitor(new SimpleMonitor());
}
if (USE_BROKEN_CLOCK) {
factory.configureClock(new BrokenClock());
} else if (USE_PAUSABLE_CLOCK) {
factory.configureClock(new PausableClock(new MachineClock()));
} else {
factory.configureClock(new MachineClock());
}
if (USE_XSTREAM) {
factory.configureSnapshotSerializer(new XStreamSerializer());
} else {
factory.configureSnapshotSerializer(new JavaSerializer());
}
factory.configureTransactionFiltering(USE_FILTERING);
factory.configureTransientMode(USE_TRANSIENT_MODE);
factory.configureJournalDiskSync(USE_JOURNAL_DISK_SYNC);
if (FILE_AGE_THREASHOLD) {
factory.configureJournalFileAgeThreshold(100);
}
if (FILE_SIZE_THREASHOLD) {
factory.configureJournalFileSizeThreshold(100);
}
if (USE_XSTREAM_JOURNAL) {
factory.configureJournalSerializer(new XStreamSerializer());
} else {
factory.configureJournalSerializer(new JavaSerializer());
}
}
void deleteDirectory(String name) {
File dir = new File(name);
if (dir.exists() && dir.isDirectory()) {
File[] list = dir.listFiles();
assert list != null;
for (File file : list) {
if (file.isDirectory()) {
deleteDirectory(file.getAbsolutePath());
} else {
file.delete();
}
}
}
}
}