Browse Source

remove rel node

Martin Kunz 3 years ago
parent
commit
db931a6a5e

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

@@ -10,6 +10,7 @@ import com.ur.urcap.api.contribution.DaemonService;
 import uraxis.programnodes.AbsFestoNodeService;
 import uraxis.programnodes.NodeType;
 import uraxis.programnodes.RelFestoNodeService;
+import uraxis.programnodes.init.FestoInitNodeService;
 import uraxis.toolbar.MyToolbarService;
 
 /**
@@ -28,7 +29,8 @@ public class Activator implements BundleActivator {
 		context.registerService(DaemonService.class, daemonService, null);
 		context.registerService(SwingToolbarService.class, new MyToolbarService(), null);
 		context.registerService(SwingProgramNodeService.class, new AbsFestoNodeService(), null);
-		context.registerService(SwingProgramNodeService.class, new RelFestoNodeService(), null);
+		// context.registerService(SwingProgramNodeService.class, new RelFestoNodeService(), null);
+		context.registerService(SwingProgramNodeService.class, new FestoInitNodeService(), null);
 	}
 
 	@Override

+ 6 - 6
src/main/java/uraxis/MyDaemonInterface.java

@@ -87,13 +87,13 @@ public class MyDaemonInterface {
 		return cf;
 	}
 
-	public CompletableFuture<Boolean> rel(int pos, int speed) {
-		CompletableFuture<Boolean> cf = new CompletableFuture();
+	public CompletableFuture<String> rel(int pos, int speed) {
+		CompletableFuture<String> cf = new CompletableFuture();
 		try {
 			client.executeAsync("rel", new Object[]{pos, speed}, new AsyncCallback() {
 				@Override
 				public void handleResult(XmlRpcRequest xmlRpcRequest, Object o) {
-					cf.complete((Boolean) o);
+					cf.complete((String) o);
 				}
 
 				@Override
@@ -107,14 +107,14 @@ public class MyDaemonInterface {
 		return cf;
 	}
 
-	public CompletableFuture<Boolean> abs(int pos, int speed) {
-		CompletableFuture<Boolean> cf = new CompletableFuture();
+	public CompletableFuture<String> abs(int pos, int speed) {
+		CompletableFuture<String> cf = new CompletableFuture();
 
 		try {
 			client.executeAsync("abs", new Object[]{pos, speed}, new AsyncCallback() {
 				@Override
 				public void handleResult(XmlRpcRequest xmlRpcRequest, Object o) {
-					cf.complete((Boolean) o);
+					cf.complete((String) o);
 				}
 
 				@Override

+ 57 - 0
src/main/java/uraxis/programnodes/init/FestoInitNodeContribution.java

@@ -0,0 +1,57 @@
+package uraxis.programnodes.init;
+
+import com.ur.urcap.api.contribution.ProgramNodeContribution;
+import com.ur.urcap.api.contribution.program.ProgramAPIProvider;
+import com.ur.urcap.api.domain.ProgramAPI;
+import com.ur.urcap.api.domain.data.DataModel;
+import com.ur.urcap.api.domain.script.ScriptWriter;
+import com.ur.urcap.api.domain.undoredo.UndoRedoManager;
+import com.ur.urcap.api.domain.userinteraction.keyboard.KeyboardInputCallback;
+import com.ur.urcap.api.domain.userinteraction.keyboard.KeyboardInputFactory;
+import com.ur.urcap.api.domain.userinteraction.keyboard.KeyboardNumberInput;
+import uraxis.MyDaemonInstallationNodeContribution;
+
+public class FestoInitNodeContribution implements ProgramNodeContribution {
+    private final ProgramAPI programAPI;
+    private final FestoInitNodeView view;
+    private final DataModel model;
+
+    public FestoInitNodeContribution(ProgramAPIProvider apiProvider, FestoInitNodeView view, DataModel model) {
+        this.programAPI = apiProvider.getProgramAPI();
+        this.view = view;
+        this.model = model;
+    }
+
+    @Override
+    public void openView() {
+
+    }
+
+    @Override
+    public void closeView() {
+
+    }
+
+    @Override
+    public String getTitle() {
+        return "FestoInit";
+    }
+
+    @Override
+    public void generateScript(ScriptWriter writer) {
+        writer.appendLine(String.format("ret = %s.ready()", getInstallation().getXMLRPCVariable()));
+        writer.appendLine("if (ret != \"OK\"):");
+        writer.appendLine(String.format("popup(ret)"));
+        writer.appendLine("end");
+        writer.writeChildren();
+    }
+
+    private MyDaemonInstallationNodeContribution getInstallation() {
+        return programAPI.getInstallationNode(MyDaemonInstallationNodeContribution.class);
+    }
+
+    @Override
+    public boolean isDefined() {
+        return true;
+    }
+}

+ 44 - 0
src/main/java/uraxis/programnodes/init/FestoInitNodeService.java

@@ -0,0 +1,44 @@
+package uraxis.programnodes.init;
+
+import com.ur.urcap.api.contribution.ViewAPIProvider;
+import com.ur.urcap.api.contribution.program.ContributionConfiguration;
+import com.ur.urcap.api.contribution.program.CreationContext;
+import com.ur.urcap.api.contribution.program.ProgramAPIProvider;
+import com.ur.urcap.api.contribution.program.swing.SwingProgramNodeService;
+import com.ur.urcap.api.domain.SystemAPI;
+import com.ur.urcap.api.domain.data.DataModel;
+import uraxis.programnodes.Style;
+import uraxis.programnodes.V5Style;
+
+import java.util.Locale;
+
+public class FestoInitNodeService implements SwingProgramNodeService<FestoInitNodeContribution, FestoInitNodeView> {
+
+
+    @Override
+    public String getId() {
+        return "FestoInit";
+    }
+
+    @Override
+    public void configureContribution(ContributionConfiguration configuration) {
+        configuration.setChildrenAllowed(false);
+    }
+
+    @Override
+    public String getTitle(Locale locale) {
+        return "FestoInit";
+    }
+
+    @Override
+    public FestoInitNodeView createView(ViewAPIProvider apiProvider) {
+        SystemAPI systemAPI = apiProvider.getSystemAPI();
+        Style style =  new V5Style();
+        return new FestoInitNodeView(style);
+    }
+
+    @Override
+    public FestoInitNodeContribution createNode(ProgramAPIProvider apiProvider, FestoInitNodeView view, DataModel model, CreationContext context) {
+        return new FestoInitNodeContribution(apiProvider, view, model);
+    }
+}

+ 37 - 0
src/main/java/uraxis/programnodes/init/FestoInitNodeView.java

@@ -0,0 +1,37 @@
+package uraxis.programnodes.init;
+
+import com.ur.urcap.api.contribution.ContributionProvider;
+import com.ur.urcap.api.contribution.program.swing.SwingProgramNodeView;
+import uraxis.programnodes.Style;
+import uraxis.programnodes.init.FestoInitNodeContribution;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class FestoInitNodeView implements SwingProgramNodeView<FestoInitNodeContribution>{
+
+    private final Style style;
+
+    public FestoInitNodeView(Style style) {
+        this.style = style;
+    }
+
+    @Override
+    public void buildUI(JPanel jPanel, final ContributionProvider<FestoInitNodeContribution> provider) {
+        jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));
+        jPanel.add(createInfo());
+        jPanel.add(createVerticalSpacing(style.getVerticalSpacing()));
+        jPanel.add(createVerticalSpacing(style.getExtraLargeVerticalSpacing()));
+    }
+
+    private Component createVerticalSpacing(int height) {
+        return Box.createRigidArea(new Dimension(0, height));
+    }
+
+    private Box createInfo () {
+        Box infoBox = Box.createHorizontalBox () ;
+        infoBox.setAlignmentX( Component.LEFT_ALIGNMENT );
+        infoBox.add(new JLabel ("Set Festo Axis ready."));
+        return infoBox ;
+    }
+}

+ 130 - 0
src/main/java/uraxis/toolbar/IOHandler.java

@@ -0,0 +1,130 @@
+package uraxis.toolbar;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.ur.urcap.api.domain.io.*;
+
+public class IOHandler {
+
+    private final IOModel ioModel;
+
+    public IOHandler(IOModel ioModel) {
+        this.ioModel = ioModel;
+    }
+
+
+    /*Returns a DigitalIO object found by its default name
+     * Default names are:
+     * 	digital_in[0]
+     *  digital_in[1]
+     *  ...
+     *  digital_in[7]
+     *  digital_out[0]
+     *  digital_out[1]
+     *  ...
+     *  digital_out[7]
+     *  tool_in[0]
+     *  tool_in[1]
+     *  tool_out[0]
+     *  tool_out[1]
+     *  config_in[0]
+     *  config_in[1]
+     *  ...
+     *  config_in[7]
+     *  config_out[0]
+     *  config_out[1]
+     *  ...
+     *  config_out[7]
+     *
+     */
+    public DigitalIO getDigitalIO(String defaultName){
+        Collection<DigitalIO> IOcollection = ioModel.getIOs(DigitalIO.class);
+        int IO_count = IOcollection.size();
+        if(IO_count > 0){
+            Iterator<DigitalIO> IO_itr = IOcollection.iterator();
+            while(IO_itr.hasNext()){
+                DigitalIO thisIO = IO_itr.next();
+                String thisDefaultName = thisIO.getDefaultName();
+//				System.out.println("Found an IO named "+thisDefaultName);
+                if(thisDefaultName.equals(defaultName)){
+                    return thisIO;
+                }
+            }
+        }
+        return null;
+    }
+
+    public Register getRegisterIO(String defaultName){
+        Collection<Register> IOcollection = ioModel.getIOs(Register.class);
+        int IO_count = IOcollection.size();
+        if(IO_count > 0){
+            Iterator<Register> IO_itr = IOcollection.iterator();
+            while(IO_itr.hasNext()){
+                Register thisIO = IO_itr.next();
+                String thisDefaultName = thisIO.getDefaultName();
+                if(thisDefaultName.equals(defaultName)){
+                    return thisIO;
+                }
+            }
+        }
+        return null;
+    }
+
+    public Register getRegisterIOCustom(String customName){
+        Collection<Register> IOcollection = ioModel.getIOs(Register.class);
+        int IO_count = IOcollection.size();
+        if(IO_count > 0){
+            Iterator<Register> IO_itr = IOcollection.iterator();
+            while(IO_itr.hasNext()){
+                Register thisIO = IO_itr.next();
+                String thisCustomName = thisIO.getName();
+                if(thisCustomName.equals(customName)){
+                    return thisIO;
+                }
+            }
+        }
+        return null;
+    }
+
+    private final static Pattern ioPattern = Pattern.compile("\\[(.*?)\\]");
+
+    public static int getIOIndex(IO io) {
+        Matcher m = ioPattern.matcher(io.getDefaultName());
+        if(m.find()) {
+            return Integer.parseInt(m.group(1));
+        }
+        return -1;
+    }
+
+    /*Returns an AnalogIO object found by its default name
+     * Default names are:
+     *  analog_in[0]
+     *  analog_in[1]
+     *  analog_in[2] 	(Tool analog in 0)
+     *  analog_in[3]	(Tool analog in 1)
+     *  analog_out[0]
+     *  analog_out[1]
+     *
+     */
+    public AnalogIO getAnalogIO(String defaultName){
+        Collection<AnalogIO> IOcollection = ioModel.getIOs(AnalogIO.class);
+        int IO_count = IOcollection.size();
+        if(IO_count > 0){
+            Iterator<AnalogIO> IO_itr = IOcollection.iterator();
+            while(IO_itr.hasNext()){
+                AnalogIO thisIO = IO_itr.next();
+                String thisDefaultName = thisIO.getDefaultName();
+//				System.out.println("Found an IO named "+thisDefaultName);
+                if(thisDefaultName.equals(defaultName)){
+                    return thisIO;
+                }
+            }
+        }
+        return null;
+    }
+
+
+}

+ 11 - 6
src/main/java/uraxis/toolbar/MyToolbarContribution.java

@@ -2,6 +2,8 @@ package uraxis.toolbar;
 
 import com.ur.urcap.api.contribution.toolbar.ToolbarContext;
 import com.ur.urcap.api.contribution.toolbar.swing.SwingToolbarContribution;
+import com.ur.urcap.api.domain.io.DigitalIO;
+import com.ur.urcap.api.domain.io.Register;
 import uraxis.Activator;
 
 import javax.swing.*;
@@ -17,17 +19,22 @@ class MyToolbarContribution implements SwingToolbarContribution {
     private static final int HEADER_FONT_SIZE = 24;
 
     private final ToolbarContext context;
+    private final IOHandler ioModel;
+    private Register positionRegister;
+    private int positionIndex=-1;
     private JLabel demoToolStatus;
     private Timer uiTimer;
     HashMap<String, JCheckBox> boxes=new HashMap<>();
 
-
     MyToolbarContribution(ToolbarContext context) {
         this.context = context;
+        this.ioModel = new IOHandler(context.getAPIProvider().getApplicationAPI().getIOModel());
     }
 
     @Override
     public void openView() {
+        this.positionRegister = this.ioModel.getRegisterIOCustom("position");
+        this.positionIndex=IOHandler.getIOIndex(this.positionRegister);
         //UI updates from non-GUI threads must use EventQueue.invokeLater (or SwingUtilities.invokeLater)
         uiTimer = new Timer(true);
         uiTimer.schedule(new TimerTask() {
@@ -48,10 +55,9 @@ class MyToolbarContribution implements SwingToolbarContribution {
                                     if(val instanceof  Boolean) {
                                         cb.setSelected((Boolean) val);
                                     }
-
                                 }
                                 //updateText(String.format("Position: %d, read at %tF %tT.<br/>%s", fPos.get(), now, now, fStatus.get()));
-                                updateText(String.format("Position: %d, read at %tF %tT.<br/>", fPos.get(), now, now));
+                                updateText(String.format("Position: %d, read at %tF %tT.<br/>Reg: ", fPos.get(), now, now, positionRegister.getDefaultName()));
                             } catch (InterruptedException|ExecutionException e) {
                                 e.printStackTrace();
                             }
@@ -60,8 +66,6 @@ class MyToolbarContribution implements SwingToolbarContribution {
                 });
             }
         }, 0, 1000);
-
-
     }
 
     @Override
@@ -84,7 +88,8 @@ class MyToolbarContribution implements SwingToolbarContribution {
         {
             Box vbox = Box.createVerticalBox();
             vbox.setAlignmentY(Component.TOP_ALIGNMENT);
-            vbox.add(newCheckbox("opm"));
+            vbox.add(newCheckbox("opm1"));
+            vbox.add(newCheckbox("opm2"));
             vbox.add(newCheckbox("fct"));
             vbox.add(newCheckbox("rdyen"));
             vbox.add(newCheckbox("fault"));