From 8273f27eed0a1fb3940c17975c2f0af8d343510b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Fri, 15 Sep 2023 13:42:40 +0200
Subject: [PATCH] minor changes on servo blocks

---
 .../block/output/ServoDefaultAttachBlock.java | 18 ++++++++++++++---
 .../block/output/ServoDefaultBlock.java       | 20 ++++++++++++++++---
 .../block/output/ServoDefaultDetachBlock.java | 18 ++++++++++++++---
 3 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java b/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java
index 50cbeed..b8ca45b 100644
--- a/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java
+++ b/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java
@@ -6,7 +6,10 @@ import com.ardublock.translator.block.TranslatorBlock;
 import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.ConstantNumberBlock;
+import com.ardublock.translator.block.numbers.LocalVariableNumberBlock;
 import com.ardublock.translator.block.numbers.NumberBlock;
+import com.ardublock.translator.block.numbers.VariableNumberBlock;
 
 public class ServoDefaultAttachBlock extends TranslatorBlock {
 
@@ -22,13 +25,22 @@ public class ServoDefaultAttachBlock extends TranslatorBlock {
 
 		String servoSpecs = "";
 
-		if (!( tb instanceof NumberBlock ) )
+		if (!( tb instanceof NumberBlock ) && !(tb instanceof VariableNumberBlock) && !(tb  instanceof LocalVariableNumberBlock) && !(tb instanceof ConstantNumberBlock)  )
 		{
-			throw new BlockException(this.blockId, "the Pin# of Servo must be a number");
+			throw new BlockException(this.blockId, "the Pin# of Servo must contain a number");
 		}
 		
 		String pinNumber = tb.toCode().replaceAll("\\s*_.new\\b\\s*", "");
-		String servoName = "servo_pin_" + pinNumber;
+		
+		int servoCounter = 1;
+		while(translator.containsServo("servo"+servoCounter)) {
+			servoCounter++;
+		}
+		
+		String servoName = 	"servo"+servoCounter;
+		translator.addServo("servo_"+pinNumber, servoName);
+		
+		//String servoName = "servo_pin_" + pinNumber;
 
 	//	tb = this.getRequiredTranslatorBlockAtSocket(1);
 
diff --git a/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java b/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java
index 09c8913..6256cf3 100644
--- a/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java
+++ b/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java
@@ -7,6 +7,10 @@ import com.ardublock.translator.block.TranslatorBlock;
 import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.ConstantNumberBlock;
+import com.ardublock.translator.block.numbers.LocalVariableNumberBlock;
+import com.ardublock.translator.block.numbers.NumberBlock;
+import com.ardublock.translator.block.numbers.VariableNumberBlock;
 
 public class ServoDefaultBlock extends TranslatorBlock {
 	
@@ -21,19 +25,29 @@ public class ServoDefaultBlock extends TranslatorBlock {
 	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
 	{
 		TranslatorBlock tb = this.getRequiredTranslatorBlockAtSocket(0);
+		
+		if (!( tb instanceof NumberBlock ) && !(tb instanceof VariableNumberBlock) && !(tb  instanceof LocalVariableNumberBlock) && !(tb instanceof ConstantNumberBlock) )
+		{
+			throw new BlockException(this.blockId, "the Pin# of Servo must contain a number");
+		}
 
 		String servoSpecs = "";
 
 		String pinNumber = tb.toCode().replaceAll("\\s*_.new\\b\\s*", "");
 		
 		//****** Bit long w but easy to see what's happening. Any other invalid pins? *********
-		if ( ! ("2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32/"
+		/*if ( ! ("2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32/"
 				+ " 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53").contains(pinNumber.trim()) )
 		{
 			throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.Digital_pin_slot"));
-		}
+		}*/
 		
-		String servoName = "servo_pin_" + pinNumber;
+
+		String servoName = translator.getServo("servo_"+pinNumber);
+		if(servoName == null) {
+			throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.servo.none"));
+		}
+		//String servoName = "servo_pin_" + pinNumber;
 
 		tb = this.getRequiredTranslatorBlockAtSocket(1);
 
diff --git a/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java b/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java
index c4842d0..fb29093 100644
--- a/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java
+++ b/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java
@@ -1,14 +1,21 @@
 
 package com.ardublock.translator.block.output;
 
+import java.util.ResourceBundle;
+
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.TranslatorBlock;
 import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.ConstantNumberBlock;
+import com.ardublock.translator.block.numbers.LocalVariableNumberBlock;
 import com.ardublock.translator.block.numbers.NumberBlock;
+import com.ardublock.translator.block.numbers.VariableNumberBlock;
 
 public class ServoDefaultDetachBlock extends TranslatorBlock {
+	
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
 
 	public ServoDefaultDetachBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
 	{
@@ -22,13 +29,18 @@ public class ServoDefaultDetachBlock extends TranslatorBlock {
 
 		//String servoSpecs = "";
 
-		if (!( tb instanceof NumberBlock ) )
+		if (!( tb instanceof NumberBlock ) && !(tb instanceof VariableNumberBlock) && !(tb  instanceof LocalVariableNumberBlock) && !(tb instanceof ConstantNumberBlock) )
 		{
-			throw new BlockException(this.blockId, "the Pin# of Servo must be a number");
+			throw new BlockException(this.blockId, "the Pin# of Servo must contain a number");
 		}
 		
 		String pinNumber = tb.toCode().replaceAll("\\s*_.new\\b\\s*", "");
-		String servoName = "servo_pin_" + pinNumber;
+		
+		String servoName = translator.getServo("servo_"+pinNumber);
+		if(servoName == null) {
+			throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.servo.none"));
+		}
+		//String servoName = "servo_pin_" + pinNumber;
 
 	//	tb = this.getRequiredTranslatorBlockAtSocket(1);
 
-- 
GitLab