org.sdmlib.modelspace.ModelCloudApp Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SDMLib Show documentation
Show all versions of SDMLib Show documentation
SDMLib is a light weight modeling library. SDMLib intentionally comes without any tool or editor.
package org.sdmlib.modelspace;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.InetAddress;
import java.util.List;
import org.sdmlib.javafx.FX;
import org.sdmlib.modelspace.ModelSpace.ApplicationType;
import org.sdmlib.modelspace.util.ModelCloudCreator;
import org.sdmlib.modelspace.util.TaskBoardCreator;
import de.uniks.networkparser.IdMap;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
public class ModelCloudApp extends Application
{
public static void main(String... args)
{
launch(args);
}
private String location;
private VBox root;
private String userName;
private String sessionId;
private IdMap idMap;
private ModelCloud modelCloud;
private ModelSpace space;
private TextField acceptPortField;
private HBox addServerBox;
private TextField hostNameField;
private TextField portNoField;
private VBox modelSpaceProxiesVbox;
private TaskBoard taskBoard;
private ModelSpace taskSpace;
private TaskLane myTaskLane;
@Override
public void start(Stage stage) throws Exception
{
if (location == null)
{
Parameters params = this.getParameters();
List parameters = params.getRaw();
if (parameters.size() > 0)
{
location = parameters.get(0);
}
else
{
location = "modeldata";
}
}
userName = "cloudServer";
sessionId = userName + System.currentTimeMillis();
idMap = ModelCloudCreator.createIdMap(sessionId);
modelCloud = new ModelCloud();
idMap.put(location, modelCloud);
space = new ModelSpace(idMap, userName, ApplicationType.JavaFX).open(location + "/.cloudData");
modelCloud.setLocation(location);
InetAddress ip = InetAddress.getLocalHost();
String hostname = ip.getHostName();
System.out.println("Your current IP address : " + ip);
System.out.println("Your current Hostname : " + hostname);
modelCloud.setHostName(hostname);
Label hostNameLabel = new Label("Host name: " + hostname);
Label label = new Label("accept port:");
acceptPortField = new TextField();
FX.bindTextFieldIntegerProperty(idMap, acceptPortField, modelCloud, ModelCloud.PROPERTY_ACCEPTPORT);
HBox hBox = new HBox(8);
hBox.setPadding(new Insets(0, 0, 0, 24));
hBox.getChildren().addAll(label, acceptPortField);
Label otherServersLabel = new Label ("Other cloud servers:");
VBox otherServersVBox = new VBox(8);
otherServersVBox.setPadding(new Insets(0, 0, 0, 24));
FX.bindListProperty(idMap, otherServersVBox, modelCloud, ModelCloud.PROPERTY_SERVERS, ModelCloudProxyController.class);
hostNameField = new TextField("hostName?");
portNoField = new TextField("portNo?");
Button button = new Button("Add");
button.setOnAction(new EventHandler()
{
@Override
public void handle(ActionEvent arg0)
{
// create ModelCloudProxy and add to servers
ModelCloudProxy modelCloudProxy = new ModelCloudProxy()
.withHostName(hostNameField.getText());
int portNo = Integer.parseInt(portNoField.getText());
modelCloudProxy.setPortNo(portNo);
modelCloud.withServers(modelCloudProxy);
}
});
addServerBox = new HBox(8);
addServerBox.setPadding(new Insets(0, 0, 0, 24));
addServerBox.getChildren().addAll(hostNameField, portNoField, button);
// add listener for model space proxies
modelSpaceProxiesVbox = new VBox(8);
modelCloud.getPropertyChangeSupport().addPropertyChangeListener(ModelCloud.PROPERTY_MODELSPACES,
new ModelSpaceProxyListener(modelCloud, modelSpaceProxiesVbox));
// open task board
String laneName = modelCloud.getHostName() + modelCloud.getAcceptPort();
String taskSessionId = laneName + "_" + System.currentTimeMillis();
IdMap taskIdMap = TaskBoardCreator.createIdMap(taskSessionId);
taskBoard = new TaskBoard(modelCloud, taskIdMap);
modelCloud.setTaskBoard(taskBoard);
taskIdMap.put("taskBoard", taskBoard);
taskSpace = new ModelSpace(taskIdMap, laneName, ApplicationType.JavaFX)
.open(location + "/.cloudTasks");
myTaskLane = taskBoard.getOrCreateLane(modelCloud.getHostName(), modelCloud.getAcceptPort());
modelCloud.setMyTaskLane(myTaskLane);
VBox tasksVBox = new VBox(8);
TaskLaneListener taskLaneListener = new TaskLaneListener(modelCloud, myTaskLane, tasksVBox);
myTaskLane.getPropertyChangeSupport().addPropertyChangeListener(
taskLaneListener);
taskLaneListener.propertyChange(null);
root = new VBox(8);
root.setPadding(new Insets(24));
root.getChildren().addAll(hostNameLabel, hBox, otherServersLabel, otherServersVBox, addServerBox, modelSpaceProxiesVbox, tasksVBox);
ScrollPane scrollPane = new ScrollPane(root);
scrollPane.setStyle("-fx-background: white;");
Scene scene = new Scene(scrollPane, 450, 600);
stage.setScene(scene);
stage.setTitle("Model Cloud " + location);
stage.setOnCloseRequest(new EventHandler()
{
@Override
public void handle(WindowEvent arg0)
{
Platform.exit();
System.exit(0);
}
});
stage.show();
// open server socket
PropertyChangeListener listener = new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
if (modelCloud.getAcceptPort() > 0)
{
ServerSocketHandler serverSocketHandler = new ServerSocketHandler(modelCloud);
serverSocketHandler.start();
}
}
};
modelCloud.getPropertyChangeSupport().addPropertyChangeListener(ModelCloud.PROPERTY_ACCEPTPORT, listener);
listener.propertyChange(null);
// connect to other servers
modelCloud.getPropertyChangeSupport().addPropertyChangeListener(ModelCloud.PROPERTY_SERVERS, new OtherServersListener(modelCloud));
// open listener for root directory
ModelDirListener modelDirListener = new ModelDirListener(null, modelCloud, location, "");
modelDirListener.start();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy