diff --git a/build/src/main/scala/org/codeoverflow/chatoverflow/build/api/RequirementsFile.scala b/build/src/main/scala/org/codeoverflow/chatoverflow/build/api/RequirementsFile.scala index 1540fa5a..aac78c50 100644 --- a/build/src/main/scala/org/codeoverflow/chatoverflow/build/api/RequirementsFile.scala +++ b/build/src/main/scala/org/codeoverflow/chatoverflow/build/api/RequirementsFile.scala @@ -65,8 +65,7 @@ class RequirementsFile(requirementsDirectory: File, requirementType: String, fil requirement.file.getAbsolutePath.lastIndexOf(File.separator) + 1).replace(".java", "") val requiresValue = if (requirement.requires != "") requirement.requires else className - - val generatedName = className.replace(requirementType, "") + val generatedName = if(requirementType.equalsIgnoreCase("parameter")) className else className.replace(requirementType, "") val methodNameValue = if (requirement.methodName != "") { requirement.methodName.replace(" ", "") diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/BooleanParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/BooleanParameterImpl.scala new file mode 100644 index 00000000..4b1d3c6f --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/BooleanParameterImpl.scala @@ -0,0 +1,24 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import org.codeoverflow.chatoverflow.api.io.parameter.BooleanParameter +import org.codeoverflow.chatoverflow.registry.Impl +import java.lang.Boolean + +/** + * A parameter holding a boolean value. + */ +@Impl(impl = classOf[BooleanParameter]) +class BooleanParameterImpl extends BooleanParameter { + private var value: Boolean = null + + override def getType: Class[Boolean] = classOf[Boolean] + + override def serialize(): String = get().toString + + override def get(): Boolean = value + + override def deserialize(value: String): Unit = set(Boolean.parseBoolean(value)) + + override def set(value: Boolean): Unit = this.value = value + +} diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/ColorParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/ColorParameterImpl.scala new file mode 100644 index 00000000..2c5550cf --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/ColorParameterImpl.scala @@ -0,0 +1,50 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import org.codeoverflow.chatoverflow.api.io.parameter.ColorParameter +import org.codeoverflow.chatoverflow.registry.Impl +import java.awt.Color + +/** + * A parameter holding a Color value. + */ +@Impl(impl = classOf[ColorParameter]) +class ColorParameterImpl extends ColorParameter { + private var value: Color = null + + override def getType: Class[Color] = classOf[Color] + + override def serialize(): String = s"${value.getRed},${value.getGreen},${value.getBlue},${value.getAlpha}" + + override def get(): Color = value + + override def deserialize(value: String): Unit = { + val hex3 = "^#([a-fA-F0-9]{6})$".r // Test if the value contains # and then 6 hexadecimal numbers + val hex4 = "^#([a-fA-F0-9]{8})$".r // Test if the value contains # and then 8 hexadecimal numbers + val int3 = "^(\\d+),(\\d+),(\\d+)$".r //Test if the value contains 3 ints + val int4 = "^(\\d+),(\\d+),(\\d+),(\\d+)$".r //Test if the value contains 4 ints + val float3 = "^(\\d+(?:\\.\\d+)?),(\\d+(?:\\.\\d+)?),(\\d+(?:\\.\\d+)?)$".r //Test if the value contains 3 floats + val float4 = "^(\\d+(?:\\.\\d+)?),(\\d+(?:\\.\\d+)?),(\\d+(?:\\.\\d+)?),(\\d+(?:\\.\\d+)?)$".r //Test if the value contains 4 floats + + value match { + case hex3(hex) => { + set(new Color(Integer.valueOf(hex.substring(0, 2), 16), + Integer.valueOf(hex.substring(2, 4), 16), + Integer.valueOf(hex.substring(4, 6), 16))) + } + case hex4(hex) => + set(new Color(Integer.valueOf(hex.substring(0, 2), 16), + Integer.valueOf(hex.substring(2, 4), 16), + Integer.valueOf(hex.substring(4, 6), 16), + Integer.valueOf(hex.substring(6, 8), 16))) + case int3(r, g, b) => set(new Color(r.toInt, g.toInt, b.toInt)) + case int4(r, g, b, a) => set(new Color(r.toInt, g.toInt, b.toInt, a.toInt)) + case float3(r, g, b) => set(new Color(r.toFloat, g.toFloat, b.toFloat)) + case float4(r, g, b, a) => set(new Color(r.toFloat, g.toFloat, b.toFloat, a.toFloat)) + case _ => throw new IllegalArgumentException("Could not convert String to color") + } + + } + + override def set(value: Color): Unit = this.value = value + +} \ No newline at end of file diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/DoubleParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/DoubleParameterImpl.scala new file mode 100644 index 00000000..a3006a74 --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/DoubleParameterImpl.scala @@ -0,0 +1,24 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import org.codeoverflow.chatoverflow.api.io.parameter.DoubleParameter +import org.codeoverflow.chatoverflow.registry.Impl +import java.lang.Double + +/** + * A parameter holding a double value. + */ +@Impl(impl = classOf[DoubleParameter]) +class DoubleParameterImpl extends DoubleParameter { + + private var value: Double = null + + override def getType: Class[Double] = classOf[Double] + + override def serialize(): String = get().toString + + override def get(): Double = value + + override def deserialize(value: String): Unit = set(Double.valueOf(value)) + + override def set(value: Double): Unit = this.value = value +} diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/IntegerParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/IntegerParameterImpl.scala new file mode 100644 index 00000000..c6501989 --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/IntegerParameterImpl.scala @@ -0,0 +1,23 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import org.codeoverflow.chatoverflow.api.io.parameter.IntegerParameter +import org.codeoverflow.chatoverflow.registry.Impl + +/** + * A parameter holding a int value. + */ +@Impl(impl = classOf[IntegerParameter]) +class IntegerParameterImpl extends IntegerParameter { + private var value: Integer = null + + override def getType: Class[Integer] = classOf[Integer] + + override def serialize(): String = get().toString + + override def get(): Integer = value + + override def deserialize(value: String): Unit = set(Integer.valueOf(value)) + + override def set(value: Integer): Unit = this.value = value + +} diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/ListParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/ListParameterImpl.scala new file mode 100644 index 00000000..64dc5c70 --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/ListParameterImpl.scala @@ -0,0 +1,23 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import collection.JavaConverters._ +import org.codeoverflow.chatoverflow.api.io.parameter.ListParameter +import org.codeoverflow.chatoverflow.registry.Impl + +/** + * A parameter holding a List value. + */ +@Impl(impl = classOf[ListParameter]) +class ListParameterImpl extends ListParameter { + private var value: List[String] = null + + override def getType: Class[java.util.List[String]] = classOf[java.util.List[String]] + + override def serialize(): String = value.mkString(",") + + override def get(): java.util.List[String] = value.asJava + + override def deserialize(value: String): Unit = set(value.split(",").toSeq.asJava) + + override def set(value: java.util.List[String]): Unit = this.value = value.asScala.toList +} diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/MapParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/MapParameterImpl.scala new file mode 100644 index 00000000..4f18e32d --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/MapParameterImpl.scala @@ -0,0 +1,31 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import org.codeoverflow.chatoverflow.registry.Impl +import org.codeoverflow.chatoverflow.api.io.parameter.MapParameter + +import collection.JavaConverters._ + +/** + * A parameter holding a Map value. + */ +@Impl(impl = classOf[MapParameter]) +class MapParameterImpl extends MapParameter { + private var value: Map[String, String] = null + + override def getType: Class[java.util.Map[String, String]] = classOf[java.util.Map[String, String]] + + override def serialize(): String = value.map({ case (key, value) => s"($key;$value)" }).mkString(",") + + override def get(): java.util.Map[String, String] = value.asJava + + override def deserialize(value: String): Unit = { + val kvpair = "\\((.+);(.+)\\)".r + val konly = "\\((.+);\\)".r + this.value = value.split(",") + .map({ case kvpair(k, v) => (k -> v); case konly(k) => (k -> ""); case _ => throw new IllegalArgumentException("Could not convert String to Map")}) + .toMap + } + + override def set(value: java.util.Map[String, String]): Unit = this.value = value.asScala.toMap + +} diff --git a/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/UriParameterImpl.scala b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/UriParameterImpl.scala new file mode 100644 index 00000000..30208f08 --- /dev/null +++ b/src/main/scala/org/codeoverflow/chatoverflow/requirement/parameter/UriParameterImpl.scala @@ -0,0 +1,20 @@ +package org.codeoverflow.chatoverflow.requirement.parameter + +import org.codeoverflow.chatoverflow.api.io.parameter.UriParameter +import org.codeoverflow.chatoverflow.registry.Impl +import java.net.URI + +@Impl(impl = classOf[UriParameter]) +class UriParameterImpl extends UriParameter { + private var value: URI = null + + override def getType: Class[URI] = classOf[URI] + + override def serialize(): String = get().toString + + override def get(): URI = value + + override def deserialize(value: String): Unit = set(new URI(value)) + + override def set(value: URI): Unit = this.value = value +}