Browse Source

display status message
fields for ip, port (unused

Martin Kunz 4 years ago
parent
commit
6fda69fd68

+ 37 - 8
pom.xml

@@ -47,7 +47,7 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
-				<version>3.6.0</version>
+				<version>3.8.1</version>
 				<configuration>
 					<source>1.7</source>
 					<target>1.7</target>
@@ -69,7 +69,7 @@
 			</plugin>
 			<plugin>
 				<artifactId>maven-jar-plugin</artifactId>
-				<version>3.0.2</version>
+				<version>3.1.2</version>
 				<configuration>
 					<archive>
 						<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
@@ -78,12 +78,12 @@
 			</plugin>
 			<plugin>
 				<artifactId>maven-resources-plugin</artifactId>
-				<version>3.0.2</version>
+				<version>3.1.0</version>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.felix</groupId>
 				<artifactId>maven-bundle-plugin</artifactId>
-				<version>2.4.0</version>
+				<version>4.2.1</version>
 				<extensions>true</extensions>
 				<executions>
 					<execution>
@@ -98,7 +98,7 @@
 					<instructions>
 						<!--********** DO NOT MODIFY THE ENTRIES OF THIS SECTION **********-->
 						<Bundle-Category>URCap</Bundle-Category>
-						<Bundle-Activator>uraxis.impl.Activator</Bundle-Activator>
+						<Bundle-Activator>uraxis.Activator</Bundle-Activator>
 						<Bundle-Vendor>${urcap.vendor}</Bundle-Vendor>
 						<Bundle-ContactAddress>${urcap.contactAddress}</Bundle-ContactAddress>
 						<Bundle-Copyright>${urcap.copyright}</Bundle-Copyright>
@@ -126,7 +126,7 @@
 						</goals>
 						<configuration>
 							<executable>copy</executable>
-								<commandlineArgs>target/${project.build.finalName}.jar target/${project.build.finalName}.urcap</commandlineArgs>
+								<commandlineArgs>target\\${project.build.finalName}.jar target\\${project.build.finalName}.urcap</commandlineArgs>
 							<workingDirectory>.</workingDirectory>
 						</configuration>
 					</execution>
@@ -148,7 +148,37 @@
 			<version>1.7.0</version>
 			<scope>provided</scope>
 		</dependency>
-
+		<dependency>
+			<groupId>org.apache.xmlrpc</groupId>
+			<artifactId>xmlrpc-client</artifactId>
+			<version>3.1.3.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xmlrpc</groupId>
+			<artifactId>xmlrpc-common</artifactId>
+			<version>3.1.3.0</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.antlr</groupId>
+					<artifactId>stringtemplate</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.antlr</groupId>
+					<artifactId>antlr-runtime</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.ws.commons.util</groupId>
+			<artifactId>ws-commons-util</artifactId>
+			<version>1.0.2.0</version>
+			<exclusions>
+				<exclusion>
+					<artifactId>xml-apis</artifactId>
+					<groupId>xml-apis</groupId>
+				</exclusion>
+			</exclusions>
+		</dependency>
 		<!-- test dependencies -->
 		<dependency>
 			<groupId>junit</groupId>
@@ -157,7 +187,6 @@
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
-
 	<profiles>
 		<profile>
 			<id>remote</id>

+ 1 - 1
src/main/java/uraxis/Activator.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;

+ 5 - 7
src/main/java/uraxis/MyDaemonDaemonService.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 import com.ur.urcap.api.contribution.DaemonContribution;
 import com.ur.urcap.api.contribution.DaemonService;
@@ -8,7 +8,6 @@ import java.net.URL;
 
 
 public class MyDaemonDaemonService implements DaemonService {
-
 	private DaemonContribution daemonContribution;
 
 	public MyDaemonDaemonService() {
@@ -18,7 +17,7 @@ public class MyDaemonDaemonService implements DaemonService {
 	public void init(DaemonContribution daemonContribution) {
 		this.daemonContribution = daemonContribution;
 		try {
-			daemonContribution.installResource(new URL("file:com/ur/urcap/examples/mydaemon/impl/daemon/"));
+			daemonContribution.installResource(new URL("file:uraxis/"));
 		} catch (MalformedURLException e) {	}
 	}
 
@@ -26,15 +25,14 @@ public class MyDaemonDaemonService implements DaemonService {
 	public URL getExecutable() {
 		try {
 			// Two equivalent example daemons are available:
-			return new URL("file:com/ur/urcap/examples/mydaemon/impl/daemon/hello-world.py"); // Python executable
-			// return new URL("file:com/ur/urcap/examples/mydaemon/impl/daemon/HelloWorld"); // C++ executable
+			// return new URL("file:uraxis/hello-world.py"); // Python executable
+			return new URL("file:/bin/bash");
+			/// return new URL("file:com/ur/urcap/examples/mydaemon/impl/daemon/HelloWorld"); // C++ executable
 		} catch (MalformedURLException e) {
 			return null;
 		}
 	}
-
 	public DaemonContribution getDaemon() {
 		return daemonContribution;
 	}
-
 }

+ 83 - 45
src/main/java/uraxis/MyDaemonInstallationNodeContribution.java

@@ -1,15 +1,14 @@
-package uraxis.impl;
+package uraxis;
 
 import com.ur.urcap.api.contribution.DaemonContribution;
 import com.ur.urcap.api.contribution.InstallationNodeContribution;
 import com.ur.urcap.api.domain.data.DataModel;
 import com.ur.urcap.api.domain.script.ScriptWriter;
+import com.ur.urcap.api.ui.annotation.Div;
 import com.ur.urcap.api.ui.annotation.Input;
 import com.ur.urcap.api.ui.annotation.Label;
-import com.ur.urcap.api.ui.component.InputButton;
-import com.ur.urcap.api.ui.component.InputEvent;
-import com.ur.urcap.api.ui.component.InputTextField;
-import com.ur.urcap.api.ui.component.LabelComponent;
+import com.ur.urcap.api.ui.component.*;
+import org.apache.xmlrpc.XmlRpcException;
 
 import java.awt.EventQueue;
 import java.util.Timer;
@@ -23,17 +22,18 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 	private static final String DEFAULT_VALUE = "HelloWorld";
 
 	private DataModel model;
-	private final MyDaemonDaemonService daemonService;
-	// private XmlRpcMyDaemonInterface xmlRpcDaemonInterface;
+	// private final MyDaemonDaemonService daemonService;
 	private MyDaemonInterface daemonInterface;
 
 	private Timer uiTimer;
+	private Timer statusTimer;
+
 
 	public MyDaemonInstallationNodeContribution(MyDaemonDaemonService daemonService, DataModel model) {
-		this.daemonService = daemonService;
+		// this.daemonService = daemonService;
 		this.model = model;
-		daemonInterface = new MyDaemonInterface("127.0.0.1", 40404);
-		applyDesiredDaemonStatus();
+		daemonInterface = new MyDaemonInterface("10.0.31.42", 8082);
+		// applyDesiredDaemonStatus();
 	}
 
 	@Input(id = POPUPTITLE_KEY)
@@ -42,6 +42,18 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 	@Input(id = "btnEnableDaemon")
 	private InputButton enableDaemonButton;
 
+	@Input(id = "btnRef")
+	private InputButton refButton;
+
+	@Input(id = "textIP")
+	private InputTextField refTextIP;
+
+	@Input(id = "textPort")
+	private InputTextField refTextPort;
+
+	@Label(id = "lblStatus")
+	private LabelComponent refLblStatus;
+
 	@Input(id = "btnDisableDaemon")
 	private InputButton disableDaemonButton;
 
@@ -54,12 +66,23 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 			setPopupTitle(popupTitleField.getText());
 		}
 	}
+	@Input(id = "btnRef")
+	public void onBtnRef(InputEvent event) {
+		if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
+			try {
+				getDaemonInterface().client.execute("ref", new String[]{"foo", "bar"});
+			} catch (XmlRpcException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
 
 	@Input(id = "btnEnableDaemon")
 	public void onStartClick(InputEvent event) {
 		if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
 			setDaemonEnabled(true);
-			applyDesiredDaemonStatus();
+			// applyDesiredDaemonStatus();
 		}
 	}
 
@@ -67,7 +90,7 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 	public void onStopClick(InputEvent event) {
 		if (event.getEventType() == InputEvent.EventType.ON_CHANGE) {
 			setDaemonEnabled(false);
-			applyDesiredDaemonStatus();
+			// applyDesiredDaemonStatus();
 		}
 	}
 
@@ -90,6 +113,24 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 				});
 			}
 		}, 0, 1000);
+
+		statusTimer = new Timer(true);
+		statusTimer.schedule(new TimerTask() {
+			@Override
+			public void run() {
+				EventQueue.invokeLater(new Runnable() {
+					@Override
+					public void run() {
+						try {
+							Object res = getDaemonInterface().client.execute("status", new String[]{});
+							refLblStatus.setText(res.toString());
+							System.out.println(res);
+						} catch (XmlRpcException e) {
+							e.printStackTrace();
+						}
+					}
+				});
+		}},0,1000);
 	}
 
 	private void updateUI() {
@@ -125,13 +166,9 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 		}
 	}
 
-	public boolean isDefined() {
-		return !getPopupTitle().isEmpty() && getDaemonState() == DaemonContribution.State.RUNNING;
-	}
-
 	@Override
 	public void generateScript(ScriptWriter writer) {
-		writer.globalVariable(XMLRPC_VARIABLE, "rpc_factory(\"xmlrpc\", \"http://127.0.0.1:40404/RPC2\")");
+		writer.globalVariable(XMLRPC_VARIABLE, "rpc_factory(\"xmlrpc\", \"http://192.168.20.111:8081/\")");
 		// Apply the settings to the daemon on program start in the Installation pre-amble
 		writer.appendLine(XMLRPC_VARIABLE + ".set_title(\"" + getPopupTitle() + "\")");
 	}
@@ -168,35 +205,36 @@ public class MyDaemonInstallationNodeContribution implements InstallationNodeCon
 		}
 	}
 
-	private void applyDesiredDaemonStatus() {
-		new Thread(new Runnable() {
-			@Override
-			public void run() {
-				if (isDaemonEnabled()) {
-					// Download the daemon settings to the daemon process on initial start for real-time preview purposes
-					try {
-						awaitDaemonRunning(5000);
-						daemonInterface.setTitle(getPopupTitle());
-					} catch (Exception e) {
-						System.err.println("Could not set the title in the daemon process.");
-					}
-				} else {
-					daemonService.getDaemon().stop();
-				}
-			}
-		}).start();
-	}
-
-	private void awaitDaemonRunning(long timeOutMilliSeconds) throws InterruptedException {
-		daemonService.getDaemon().start();
-		long endTime = System.nanoTime() + timeOutMilliSeconds * 1000L * 1000L;
-		while(System.nanoTime() < endTime && (daemonService.getDaemon().getState() != DaemonContribution.State.RUNNING || !daemonInterface.isReachable())) {
-			Thread.sleep(100);
-		}
-	}
-
+//	private void applyDesiredDaemonStatus() {
+//		new Thread(new Runnable() {
+//			@Override
+//			public void run() {
+//				if (isDaemonEnabled()) {
+//					// Download the daemon settings to the daemon process on initial start for real-time preview purposes
+//					try {
+//						awaitDaemonRunning(5000);
+//						daemonInterface.setTitle(getPopupTitle());
+//					} catch (Exception e) {
+//						System.err.println("Could not set the title in the daemon process.");
+//					}
+//				} else {
+//					daemonService.getDaemon().stop();
+//				}
+//			}
+//		}).start();
+//	}
+
+//	private void awaitDaemonRunning(long timeOutMilliSeconds) throws InterruptedException {
+//		daemonService.getDaemon().start();
+//		long endTime = System.nanoTime() + timeOutMilliSeconds * 1000L * 1000L;
+//		while(System.nanoTime() < endTime && (daemonService.getDaemon().getState() != DaemonContribution.State.RUNNING || !daemonInterface.isReachable())) {
+//			Thread.sleep(100);
+//		}
+//	}
+//
 	private DaemonContribution.State getDaemonState(){
-		return daemonService.getDaemon().getState();
+		return DaemonContribution.State.RUNNING;
+		// return daemonService.getDaemon().getState();
 	}
 
 	private Boolean isDaemonEnabled() {

+ 2 - 2
src/main/java/uraxis/MyDaemonInstallationNodeService.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 import com.ur.urcap.api.contribution.InstallationNodeContribution;
 import com.ur.urcap.api.contribution.InstallationNodeService;
@@ -28,7 +28,7 @@ public class MyDaemonInstallationNodeService implements InstallationNodeService
 
 	@Override
 	public InputStream getHTML() {
-		InputStream is = this.getClass().getResourceAsStream("/com/ur/urcap/examples/mydaemon/impl/installation.html");
+		InputStream is = this.getClass().getResourceAsStream("/uraxis/installation.html");
 		return is;
 	}
 }

+ 21 - 19
src/main/java/uraxis/MyDaemonInterface.java

@@ -1,32 +1,34 @@
-package uraxis.impl;
+package uraxis;
 
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
 
 public class MyDaemonInterface {
-
+	XmlRpcClient client;
 	public MyDaemonInterface(String host, int port) {
-//		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
-//		config.setEnabledForExtensions(true);
-//		try {
-//			config.setServerURL(new URL("http://" + host + ":" + port + "/RPC2"));
-//		} catch (MalformedURLException e) {
-//			e.printStackTrace();
-//		}
-//		config.setConnectionTimeout(1000); //1s
-//		client = new XmlRpcClient();
-//		client.setConfig(config);
+		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
+		config.setEnabledForExtensions(true);
+		try {
+			config.setServerURL(new URL("http://" + host + ":" + port + "/RPC2"));
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+		config.setConnectionTimeout(1000); //1s
+		client = new XmlRpcClient();
+		client.setConfig(config);
 	}
 
 	public boolean isReachable() {
-//		try {
-//			client.execute("get_title", new ArrayList<String>());
-//			return true;
-//		} catch (XmlRpcException e) {
-//			return false;
-//		}
-		return true;
+		try {
+			client.execute("get_title", new ArrayList<String>());
+			return true;
+		} catch (XmlRpcException e) {
+			return false;
+		}
 	}
 
 	public void setTitle(String title) {

+ 5 - 3
src/main/java/uraxis/MyDaemonProgramNodeContribution.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 import com.ur.urcap.api.contribution.ProgramNodeContribution;
 import com.ur.urcap.api.domain.URCapAPI;
@@ -74,8 +74,10 @@ public class MyDaemonProgramNodeContribution implements ProgramNodeContribution
 
 	@Override
 	public boolean isDefined() {
-		return getInstallation().isDefined() && !getName().isEmpty();
-	}
+		// return getInstallation().isDefined() && !getName().isEmpty();
+        return !getName().isEmpty();
+
+    }
 
 	@Override
 	public void generateScript(ScriptWriter writer) {

+ 2 - 2
src/main/java/uraxis/MyDaemonProgramNodeService.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 import com.ur.urcap.api.contribution.ProgramNodeContribution;
 import com.ur.urcap.api.contribution.ProgramNodeService;
@@ -24,7 +24,7 @@ public class MyDaemonProgramNodeService implements ProgramNodeService {
 
 	@Override
 	public InputStream getHTML() {
-		InputStream is = this.getClass().getResourceAsStream("/com/ur/urcap/examples/mydaemon/impl/programnode.html");
+		InputStream is = this.getClass().getResourceAsStream("/uraxis/programnode.html");
 		return is;
 	}
 

+ 1 - 1
src/main/java/uraxis/UnknownResponseException.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 public class UnknownResponseException extends Exception {
 }

+ 12 - 5
src/main/resources/uraxis/installation.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
 	<head>
-		<title>My Daemon</title>
+		<title>Fexto Axis</title>
 		<style>
 			label {
 				display: inline-block;
@@ -17,16 +17,23 @@
 		</style>
 	</head>
 	<body>
-		<h1>My Daemon</h1>
+		<h1>Festo Axis</h1>
 		<form>
-			<p>The popup title below is shared between all MyDaemon program nodes through the driver.<br />Cannot be empty.</p>
+			<p>Bla bla blarg<br />Cannot be empty.</p>
 			<br />
 			<label>Popup title:</label><input id="popuptitle" type="text"/>
 			<div class="spacer">&nbsp;</div>		
 			<input id="btnEnableDaemon" type="button" style="font-size: 18px;" />
 			<input id="btnDisableDaemon" type="button" style="font-size: 18px;" />
-			<div>&nbsp;</div>
-			<label id="lblDaemonStatus" style="width: 200px;">Status of daemon</label>
+			<br>
+			<input id="btnRef" type="button" style="font-size: 18px;" />
+			<br>
+			<input id="textIP" type="text" style="font-size: 18px;" />
+			<input id="textPort" type="text" style="font-size: 18px;" />
+			<br>
+			<label  id="lblStatus" style="width: 400px;height: 200px;vertical-align: top"></label>
+			<br>
+			<label id="lblDaemonStatus" style="width: 200px">Status of daemon</label>
 		</form>
 	</body>
 </html>

+ 1 - 1
src/main/resources/uraxis/programnode.html

@@ -27,7 +27,7 @@
 	</head>
 	<body>
 		<form>
-			<p>This program node will open a popup on execution.</p><br \>
+			<p>THIS program node will open a popup on execution.</p><br \>
 			<label>Enter your name:</label> <input id="yourname" type="text"/>
 			<br/>
 			<div id="preview">

+ 1 - 1
src/test/java/uraxis/AppTest.java

@@ -1,4 +1,4 @@
-package uraxis.impl;
+package uraxis;
 
 import junit.framework.Test;
 import junit.framework.TestCase;

File diff suppressed because it is too large
+ 5 - 2
uraxis.iml