mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUACAMOLE-374: Allow multiple PropertyValue annotations to be associated with each enum value for EnumGuacamoleProperty.
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
package org.apache.guacamole.properties;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Repeatable;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
@@ -45,8 +46,10 @@ public abstract class EnumGuacamoleProperty<T extends Enum<T>> implements Guacam
|
||||
|
||||
/**
|
||||
* Defines the string value which should be accepted and parsed into the
|
||||
* annotated enum constant.
|
||||
* annotated enum constant. This annotation is repeatable, and each enum
|
||||
* constant may be associated with any any number of string values.
|
||||
*/
|
||||
@Repeatable(PropertyValues.class)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public static @interface PropertyValue {
|
||||
@@ -63,6 +66,29 @@ public abstract class EnumGuacamoleProperty<T extends Enum<T>> implements Guacam
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the string values which should be accepted and parsed into the
|
||||
* annotated enum constant. Each enum constant may be associated with any
|
||||
* any number of string values.
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public static @interface PropertyValues {
|
||||
|
||||
/**
|
||||
* Returns the {@link PropertyValue} annotations that represent the
|
||||
* String values that should produce the annotated enum constant when
|
||||
* parsed.
|
||||
*
|
||||
* @return
|
||||
* The {@link PropertyValue} annotations that represent the String
|
||||
* values that should produce the annotated enum constant when
|
||||
* parsed.
|
||||
*/
|
||||
PropertyValue[] value();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Mapping of valid property values to the corresponding enum constants
|
||||
* that those values parse to.
|
||||
@@ -103,7 +129,17 @@ public abstract class EnumGuacamoleProperty<T extends Enum<T>> implements Guacam
|
||||
+ "match declared values.", e);
|
||||
}
|
||||
|
||||
// Map enum constant only if PropertyValue annotation is present
|
||||
// Map enum constant only if one or more PropertyValue annotations
|
||||
// are present
|
||||
PropertyValues valuesAnnotation = field.getAnnotation(PropertyValues.class);
|
||||
if (valuesAnnotation != null) {
|
||||
for (PropertyValue valueAnnotation : valuesAnnotation.value())
|
||||
valueMapping.put(valueAnnotation.value(), value);
|
||||
}
|
||||
|
||||
// The PropertyValue annotation may appear as a separate, single
|
||||
// annotation, or as a multi-valued annotation via PropertyValues
|
||||
// (see above)
|
||||
PropertyValue valueAnnotation = field.getAnnotation(PropertyValue.class);
|
||||
if (valueAnnotation != null)
|
||||
valueMapping.put(valueAnnotation.value(), value);
|
||||
|
@@ -70,6 +70,7 @@ public class EnumGuacamolePropertyTest {
|
||||
* @see <a href="https://en.wikipedia.org/wiki/Tuna">Tuna (Wikipedia)</a>
|
||||
*/
|
||||
@PropertyValue("tuna")
|
||||
@PropertyValue("yellowfin")
|
||||
TUNA,
|
||||
|
||||
/**
|
||||
@@ -135,6 +136,7 @@ public class EnumGuacamolePropertyTest {
|
||||
assertEquals(Fish.TROUT, FAVORITE_FISH.parseValue("trout"));
|
||||
assertEquals(Fish.MACKEREL, FAVORITE_FISH.parseValue("mackerel"));
|
||||
assertEquals(Fish.TUNA, FAVORITE_FISH.parseValue("tuna"));
|
||||
assertEquals(Fish.TUNA, FAVORITE_FISH.parseValue("yellowfin"));
|
||||
assertEquals(Fish.SARDINE, FAVORITE_FISH.parseValue("sardine"));
|
||||
}
|
||||
|
||||
@@ -164,7 +166,7 @@ public class EnumGuacamolePropertyTest {
|
||||
}
|
||||
catch (GuacamoleException e) {
|
||||
String message = e.getMessage();
|
||||
assertTrue(message.contains("\"mackerel\", \"salmon\", \"sardine\", \"trout\", \"tuna\""));
|
||||
assertTrue(message.contains("\"mackerel\", \"salmon\", \"sardine\", \"trout\", \"tuna\", \"yellowfin\""));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user