From 14dd9ff73b7c53a5f5c696a6ff02748e23b824b8 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 7 Feb 2014 17:54:48 +0100 Subject: [PATCH] [New] added a ParameterVisitor interface with SetParameterValueVisitor --- .../java/li/strolch/model/OrderVisitor.java | 2 + .../li/strolch/model/ResourceVisitor.java | 2 + .../model/parameter/AbstractParameter.java | 10 +- .../model/parameter/BooleanParameter.java | 6 ++ .../model/parameter/DateParameter.java | 6 ++ .../model/parameter/FloatParameter.java | 8 +- .../model/parameter/IntegerParameter.java | 6 ++ .../model/parameter/LongParameter.java | 6 ++ .../li/strolch/model/parameter/Parameter.java | 3 + .../model/parameter/StringListParameter.java | 6 ++ .../model/parameter/StringParameter.java | 6 ++ .../model/visitor/ParameterVisitor.java | 50 ++++++++++ .../visitor/SetParameterValueVisitor.java | 96 +++++++++++++++++++ .../{ => visitor}/StrolchElementVisitor.java | 4 +- 14 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 src/main/java/li/strolch/model/visitor/ParameterVisitor.java create mode 100644 src/main/java/li/strolch/model/visitor/SetParameterValueVisitor.java rename src/main/java/li/strolch/model/{ => visitor}/StrolchElementVisitor.java (91%) diff --git a/src/main/java/li/strolch/model/OrderVisitor.java b/src/main/java/li/strolch/model/OrderVisitor.java index c076175e3..2d3874c50 100644 --- a/src/main/java/li/strolch/model/OrderVisitor.java +++ b/src/main/java/li/strolch/model/OrderVisitor.java @@ -15,6 +15,8 @@ */ package li.strolch.model; +import li.strolch.model.visitor.StrolchElementVisitor; + /** * @author Robert von Burg */ diff --git a/src/main/java/li/strolch/model/ResourceVisitor.java b/src/main/java/li/strolch/model/ResourceVisitor.java index db8c78ba2..e96909b97 100644 --- a/src/main/java/li/strolch/model/ResourceVisitor.java +++ b/src/main/java/li/strolch/model/ResourceVisitor.java @@ -15,6 +15,8 @@ */ package li.strolch.model; +import li.strolch.model.visitor.StrolchElementVisitor; + /** * @author Robert von Burg */ diff --git a/src/main/java/li/strolch/model/parameter/AbstractParameter.java b/src/main/java/li/strolch/model/parameter/AbstractParameter.java index 9875dff0b..bec460d3c 100644 --- a/src/main/java/li/strolch/model/parameter/AbstractParameter.java +++ b/src/main/java/li/strolch/model/parameter/AbstractParameter.java @@ -21,6 +21,7 @@ import li.strolch.exception.StrolchException; import li.strolch.model.AbstractStrolchElement; import li.strolch.model.Locator; import li.strolch.model.Locator.LocatorBuilder; +import li.strolch.model.visitor.ParameterVisitor; import li.strolch.model.ParameterizedElement; import li.strolch.model.Tags; @@ -163,12 +164,12 @@ public abstract class AbstractParameter extends AbstractStrolchElement implem setInterpretation(interpretation); setUom(uom); - if(StringHelper.isEmpty(index)) { + if (StringHelper.isEmpty(index)) { this.index = 0; } else { this.index = Integer.valueOf(index); } - + if (StringHelper.isEmpty(hidden)) { setHidden(false); } else { @@ -228,6 +229,11 @@ public abstract class AbstractParameter extends AbstractStrolchElement implem clone.setIndex(this.index); } + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitParam(this); + } + @SuppressWarnings("nls") @Override public String toString() { diff --git a/src/main/java/li/strolch/model/parameter/BooleanParameter.java b/src/main/java/li/strolch/model/parameter/BooleanParameter.java index 57b56117c..ea380dc5e 100644 --- a/src/main/java/li/strolch/model/parameter/BooleanParameter.java +++ b/src/main/java/li/strolch/model/parameter/BooleanParameter.java @@ -19,6 +19,7 @@ import java.text.MessageFormat; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -102,6 +103,11 @@ public class BooleanParameter extends AbstractParameter { return clone; } + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitBooleanParam(this); + } + public static Boolean parseFromString(String valueS) { return Boolean.valueOf(valueS); } diff --git a/src/main/java/li/strolch/model/parameter/DateParameter.java b/src/main/java/li/strolch/model/parameter/DateParameter.java index dcf3da983..86f19f2ad 100644 --- a/src/main/java/li/strolch/model/parameter/DateParameter.java +++ b/src/main/java/li/strolch/model/parameter/DateParameter.java @@ -20,6 +20,7 @@ import java.util.Date; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -104,6 +105,11 @@ public class DateParameter extends AbstractParameter { return clone; } + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitDateParam(this); + } + public static Date parseFromString(String valueS) { return ISO8601FormatFactory.getInstance().getDateFormat().parse(valueS); } diff --git a/src/main/java/li/strolch/model/parameter/FloatParameter.java b/src/main/java/li/strolch/model/parameter/FloatParameter.java index f6dd5071f..7d322dc56 100644 --- a/src/main/java/li/strolch/model/parameter/FloatParameter.java +++ b/src/main/java/li/strolch/model/parameter/FloatParameter.java @@ -19,6 +19,7 @@ import java.text.MessageFormat; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -103,7 +104,12 @@ public class FloatParameter extends AbstractParameter { return clone; } - + + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitFloatParam(this); + } + public static Double parseFromString(String valueS) { return Double.valueOf(valueS); } diff --git a/src/main/java/li/strolch/model/parameter/IntegerParameter.java b/src/main/java/li/strolch/model/parameter/IntegerParameter.java index 428e96dcb..a1db56027 100644 --- a/src/main/java/li/strolch/model/parameter/IntegerParameter.java +++ b/src/main/java/li/strolch/model/parameter/IntegerParameter.java @@ -19,6 +19,7 @@ import java.text.MessageFormat; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -103,6 +104,11 @@ public class IntegerParameter extends AbstractParameter { return clone; } + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitIntegerParam(this); + } + public static Integer parseFromString(String valueS) { return Integer.valueOf(valueS); } diff --git a/src/main/java/li/strolch/model/parameter/LongParameter.java b/src/main/java/li/strolch/model/parameter/LongParameter.java index 9c445ccb1..42573a443 100644 --- a/src/main/java/li/strolch/model/parameter/LongParameter.java +++ b/src/main/java/li/strolch/model/parameter/LongParameter.java @@ -19,6 +19,7 @@ import java.text.MessageFormat; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -103,6 +104,11 @@ public class LongParameter extends AbstractParameter { return clone; } + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitLongParam(this); + } + public static Long parseFromString(String valueS) { return Long.valueOf(valueS); } diff --git a/src/main/java/li/strolch/model/parameter/Parameter.java b/src/main/java/li/strolch/model/parameter/Parameter.java index 2b8c37014..71bb27f4e 100644 --- a/src/main/java/li/strolch/model/parameter/Parameter.java +++ b/src/main/java/li/strolch/model/parameter/Parameter.java @@ -19,6 +19,7 @@ import li.strolch.model.Order; import li.strolch.model.ParameterizedElement; import li.strolch.model.Resource; import li.strolch.model.StrolchElement; +import li.strolch.model.visitor.ParameterVisitor; /** * @author Robert von Burg @@ -158,4 +159,6 @@ public interface Parameter extends StrolchElement { @Override public Parameter getClone(); + + public U accept(ParameterVisitor visitor); } diff --git a/src/main/java/li/strolch/model/parameter/StringListParameter.java b/src/main/java/li/strolch/model/parameter/StringListParameter.java index 65fc6556e..0f7722076 100644 --- a/src/main/java/li/strolch/model/parameter/StringListParameter.java +++ b/src/main/java/li/strolch/model/parameter/StringListParameter.java @@ -24,6 +24,7 @@ import java.util.List; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -134,6 +135,11 @@ public class StringListParameter extends AbstractParameter> impleme return clone; } + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitStringListParam(this); + } + public static List parseFromString(String value) { if (value.isEmpty()) return Collections.emptyList(); diff --git a/src/main/java/li/strolch/model/parameter/StringParameter.java b/src/main/java/li/strolch/model/parameter/StringParameter.java index 5a0db74fa..262a57a09 100644 --- a/src/main/java/li/strolch/model/parameter/StringParameter.java +++ b/src/main/java/li/strolch/model/parameter/StringParameter.java @@ -19,6 +19,7 @@ import java.text.MessageFormat; import li.strolch.exception.StrolchException; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Element; @@ -104,4 +105,9 @@ public class StringParameter extends AbstractParameter { return clone; } + + @Override + public U accept(ParameterVisitor visitor) { + return visitor.visitStringParam(this); + } } diff --git a/src/main/java/li/strolch/model/visitor/ParameterVisitor.java b/src/main/java/li/strolch/model/visitor/ParameterVisitor.java new file mode 100644 index 000000000..a4a914849 --- /dev/null +++ b/src/main/java/li/strolch/model/visitor/ParameterVisitor.java @@ -0,0 +1,50 @@ +/* + * Copyright 2013 Robert von Burg + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package li.strolch.model.visitor; + +import li.strolch.model.parameter.BooleanParameter; +import li.strolch.model.parameter.DateParameter; +import li.strolch.model.parameter.FloatParameter; +import li.strolch.model.parameter.IntegerParameter; +import li.strolch.model.parameter.ListParameter; +import li.strolch.model.parameter.LongParameter; +import li.strolch.model.parameter.Parameter; +import li.strolch.model.parameter.StringListParameter; +import li.strolch.model.parameter.StringParameter; + +/** + * @author Robert von Burg + */ +public interface ParameterVisitor { + + public T visitParam(Parameter param); + + public T visitBooleanParam(BooleanParameter param); + + public T visitDateParam(DateParameter param); + + public T visitFloatParam(FloatParameter param); + + public T visitIntegerParam(IntegerParameter param); + + public T visitLongParam(LongParameter param); + + public T visitStringParam(StringParameter param); + + public T visitListParam(ListParameter param); + + public T visitStringListParam(StringListParameter param); +} diff --git a/src/main/java/li/strolch/model/visitor/SetParameterValueVisitor.java b/src/main/java/li/strolch/model/visitor/SetParameterValueVisitor.java new file mode 100644 index 000000000..c31bd6718 --- /dev/null +++ b/src/main/java/li/strolch/model/visitor/SetParameterValueVisitor.java @@ -0,0 +1,96 @@ +/* + * Copyright 2013 Robert von Burg + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package li.strolch.model.visitor; + +import li.strolch.model.parameter.BooleanParameter; +import li.strolch.model.parameter.DateParameter; +import li.strolch.model.parameter.FloatParameter; +import li.strolch.model.parameter.IntegerParameter; +import li.strolch.model.parameter.ListParameter; +import li.strolch.model.parameter.LongParameter; +import li.strolch.model.parameter.Parameter; +import li.strolch.model.parameter.StringListParameter; +import li.strolch.model.parameter.StringParameter; + +/** + * @author Robert von Burg + */ +public class SetParameterValueVisitor implements ParameterVisitor { + + private String value; + + public void setValue(Parameter parameter, String value) { + this.value = value; + try { + parameter.accept(this); + } finally { + this.value = null; + } + } + + @Override + public T visitParam(Parameter param) { + throw new UnsupportedOperationException("Not implemented on " + param.getClass()); + } + + @Override + public T visitListParam(ListParameter param) { + throw new UnsupportedOperationException("Not implemented on " + param.getClass()); + } + + @Override + public T visitBooleanParam(BooleanParameter param) { + param.setValue(BooleanParameter.parseFromString(this.value)); + return null; + } + + @Override + public T visitDateParam(DateParameter param) { + param.setValue(DateParameter.parseFromString(this.value)); + return null; + } + + @Override + public T visitFloatParam(FloatParameter param) { + param.setValue(FloatParameter.parseFromString(this.value)); + return null; + } + + @Override + public T visitIntegerParam(IntegerParameter param) { + param.setValue(IntegerParameter.parseFromString(this.value)); + return null; + } + + @Override + public T visitLongParam(LongParameter param) { + param.setValue(LongParameter.parseFromString(this.value)); + return null; + } + + @Override + public T visitStringParam(StringParameter param) { + param.setValue(this.value); + return null; + } + + @Override + public T visitStringListParam(StringListParameter param) { + param.setValue(StringListParameter.parseFromString(this.value)); + return null; + } + +} diff --git a/src/main/java/li/strolch/model/StrolchElementVisitor.java b/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java similarity index 91% rename from src/main/java/li/strolch/model/StrolchElementVisitor.java rename to src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java index 605f3014f..93a9c5014 100644 --- a/src/main/java/li/strolch/model/StrolchElementVisitor.java +++ b/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java @@ -13,7 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package li.strolch.model; +package li.strolch.model.visitor; + +import li.strolch.model.StrolchElement; /** * @author Robert von Burg