package org.peerbox.app.activity;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.util.Callback;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.RandomUtils;
import org.peerbox.guice.IFxmlLoaderProvider;
import com.google.inject.Injector;
/**
* Starter class for the activity view.
* Initializes and shows the activity stage.
*
* @author albrecht
*
*/
public class ActivityStageStarter extends Application {
private ActivityLogger activityLogger;
private ActivityStage stage;
private ActivityController controller;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
try {
new ActivityStageStarter().run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void run() throws InterruptedException {
activityLogger = new ActivityLogger();
controller = new ActivityController(activityLogger);
stage = new ActivityStage();
stage.setFxmlLoaderProvider(new IFxmlLoaderProvider() {
@Override
public FXMLLoader create(String fxmlFile) {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(fxmlFile));
loader.setControllerFactory( new Callback<Class<?>, Object>() {
@Override
public Object call(Class<?> param) {
return controller;
}
});
return loader;
}
@Override
public FXMLLoader create(String fxmlFile, Injector injector) throws IOException {
return create(fxmlFile);
}
});
stage.show();
publishRandomActivityItems();
}
private void publishRandomActivityItems() {
new Thread(new ActivitySimulator()).start();
}
/**
* Creates random activity items and adds them to the logger.
*
* @author albrecht
*
*/
private class ActivitySimulator implements Runnable{
public void run() {
int i = 1;
while(true) {
try {
String rndTitle = RandomStringUtils.randomAlphanumeric(10);
String rndDesc = RandomStringUtils.randomAlphanumeric(20);
ActivityItem item = ActivityItem.create();
item.setTitle("Title " + i + rndTitle);
item.setDescription("Description " + i + rndDesc);
if(RandomUtils.nextInt(0, 2) == 1) {
item.setType(ActivityType.WARNING);
}
activityLogger.addActivityItem(item);
Thread.sleep(2000);
++i;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}