summaryrefslogtreecommitdiff
path: root/pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java
diff options
context:
space:
mode:
authortkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7>2013-04-10 18:50:35 +0000
committertkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7>2013-04-10 18:50:35 +0000
commit5793f0dc194ae3519de7a12808d99aa2a555cd73 (patch)
treea89f97189ad1fded8728a681a18de202c7b7895e /pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java
parent3ee25188b65d9b5f4cb78419a50ebde0387005d6 (diff)
downloadmocca-5793f0dc194ae3519de7a12808d99aa2a555cd73.tar.gz
mocca-5793f0dc194ae3519de7a12808d99aa2a555cd73.tar.bz2
mocca-5793f0dc194ae3519de7a12808d99aa2a555cd73.zip
StateMachine Proposal
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-over/trunk@10 174cde9d-5d70-4d2a-aa98-46368bc2aaf7
Diffstat (limited to 'pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java')
-rw-r--r--pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java150
1 files changed, 150 insertions, 0 deletions
diff --git a/pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java b/pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java
new file mode 100644
index 00000000..14dbbcae
--- /dev/null
+++ b/pdf-over/pdf-gui/src/main/java/at/asit/pdfover/gui/workflow/Workflow.java
@@ -0,0 +1,150 @@
+package at.asit.pdfover.gui.workflow;
+
+import java.util.Properties;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public class Workflow {
+ /**
+ * @uml.property name="state"
+ * @uml.associationEnd multiplicity="(1 1)" aggregation="shared"
+ * inverse="workflow1:at.asit.pdfover.gui.workflow.WorkflowState"
+ */
+ private WorkflowState state = new at.asit.pdfover.gui.workflow.states.PrepareConfigurationState();
+
+ /**
+ * Getter of the property <tt>state</tt>
+ *
+ * @return Returns the state.
+ * @uml.property name="state"
+ */
+ public WorkflowState getState() {
+ return state;
+ }
+
+ private String[] CmdArgs = new String[] {};
+
+ /**
+ * Sets the Cmd Arguments
+ *
+ * @param args
+ */
+ public void SetCmdArgs(String[] args) {
+ this.CmdArgs = args;
+ }
+
+ /**
+ * Gets the Cmd Arguments
+ *
+ * @return
+ */
+ public String[] GetCmdArgs() {
+ return this.CmdArgs;
+ }
+
+ private Properties persistent_state = new Properties();
+
+ /**
+ * Gets the Persistent State
+ *
+ * @return
+ */
+ public Properties GetPersistentState() {
+ return this.persistent_state;
+ }
+
+ /**
+ * Update Workflow logic and let state machine do its job...
+ */
+ public void Update() {
+ WorkflowState next = null;
+ do {
+ this.state.Update(this);
+ next = this.state.NextState();
+ } while (next != null);
+ }
+
+ private Display display = null;
+
+ private Shell shell = null;
+
+ private Composite container = null;
+
+ private void CreateMainWindow() {
+ //TODO: Instanciate Main Window Class
+ this.display = Display.getDefault();
+ shell = new Shell();
+ shell.setSize(608, 340);
+ shell.setText("PDFOver 4.0!! :)");
+
+ container = new Composite(shell, SWT.NONE);
+ container.setBounds(20, 44, 572, 257);
+
+ shell.open();
+ shell.layout();
+ }
+
+ /**
+ * Gets the Shell for drawing the ui
+ *
+ * @return
+ */
+ public Composite GetComposite() {
+ // TODO: implement
+ // Main window will be build on first call
+ // returns SWT Composite container for states to draw their GUI
+
+ if(this.container == null) {
+ this.CreateMainWindow();
+ }
+
+ if(this.container == null) {
+ // TODO throw Exception...
+ }
+
+ return this.container;
+ }
+
+ /**
+ * Only returns a shell if one was already created ...
+ *
+ * @return
+ */
+ private Shell NonCreatingGetShell() {
+ return this.shell;
+ }
+
+ /**
+ * Only returns a shell if one was already created ...
+ *
+ * @return
+ */
+ private Display NonCreatingGetDisplay() {
+ return this.display;
+ }
+
+ /**
+ * Workflow main entrance point
+ */
+ public void Start() {
+ // Call update to start processing ...
+ this.Update();
+
+ // if a user interaction is required we have a shell ...
+ Shell shell = this.NonCreatingGetShell();
+ Display display = this.NonCreatingGetDisplay();
+
+ if (shell != null && display != null) {
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+ display.dispose();
+ }
+ }
+
+}