Gridarta Editor
PluginParameterCodec.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.plugin.parameter;
21 
26 import nu.xom.Element;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29 
35 public class PluginParameterCodec<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> {
36 
40  @NotNull
42 
48  @NotNull
49  private Element toXML(@NotNull final PluginParameter<G, A, R, ?> parameter) {
50  final Element e = new Element("parameter");
51  final Element n = new Element("name");
52  final Element d = new Element("description");
53  final Element t = new Element("type");
54  n.appendChild(parameter.getName());
55  d.appendChild(parameter.getDescription());
56  t.appendChild(parameter.getParameterType());
57  e.appendChild(n);
58  e.appendChild(d);
59  e.appendChild(t);
60  return e;
61  }
62 
63  @NotNull
64  @Override
65  public Element visit(@NotNull final ArchetypeParameter<G, A, R> parameter) {
66  final Element e = toXML(parameter);
67  final Element v = new Element("value");
68  v.appendChild(parameter.getStringValue());
69  e.appendChild(v);
70  return e;
71  }
72 
73  @NotNull
74  @Override
75  public Element visit(@NotNull final BooleanParameter<G, A, R> parameter) {
76  final Element e = toXML(parameter);
77  final Element v = new Element("value");
78  v.appendChild(parameter.getStringValue());
79  e.appendChild(v);
80  final Element yes = new Element("trueText");
81  yes.appendChild(parameter.getTrueText());
82  final Element no = new Element("falseText");
83  no.appendChild(parameter.getFalseText());
84  e.appendChild(yes);
85  e.appendChild(no);
86  return e;
87  }
88 
89  @NotNull
90  @Override
91  public Element visit(@NotNull final DoubleParameter<G, A, R> parameter) {
92  final Element e = toXML(parameter);
93  final Element v = new Element("value");
94  v.appendChild(parameter.getStringValue());
95  e.appendChild(v);
96  final Element min = new Element("minimum");
97  final Element max = new Element("maximum");
98  min.appendChild(Double.toString(parameter.getMin()));
99  max.appendChild(Double.toString(parameter.getMax()));
100  e.appendChild(min);
101  e.appendChild(max);
102  return e;
103  }
104 
105  @NotNull
106  @Override
107  public Element visit(@NotNull final IntegerParameter<G, A, R> parameter) {
108  final Element e = toXML(parameter);
109  final Element v = new Element("value");
110  v.appendChild(parameter.getStringValue());
111  e.appendChild(v);
112  final Element min = new Element("minimum");
113  final Element max = new Element("maximum");
114  min.appendChild(Integer.toString(parameter.getMin()));
115  max.appendChild(Integer.toString(parameter.getMax()));
116  e.appendChild(min);
117  e.appendChild(max);
118  return e;
119  }
120 
121  @NotNull
122  @Override
123  public Element visit(@NotNull final MapParameter<G, A, R> parameter) {
124  final Element e = toXML(parameter);
125  final Element v = new Element("value");
126  v.appendChild(parameter.isCurrentMap() ? "" : parameter.getStringValue());
127  e.appendChild(v);
128  return e;
129  }
130 
131  @NotNull
132  @Override
133  public Element visit(@NotNull final MapPathParameter<G, A, R> parameter) {
134  final Element e = toXML(parameter);
135  final Element s = new Element("value");
136  s.appendChild(parameter.getStringValue());
137  e.appendChild(s);
138  return e;
139  }
140 
141  @NotNull
142  @Override
143  public Element visit(@NotNull final StringParameter<G, A, R> parameter) {
144  final Element e = toXML(parameter);
145  final Element s = new Element("value");
146  s.appendChild(parameter.getStringValue());
147  e.appendChild(s);
148  return e;
149  }
150 
151  };
152 
157  @NotNull
159 
164  private void fromXML(@NotNull final PluginParameter<G, A, R, ?> parameter) {
165  parameter.setName(getChildText("name", "undefined"));
166  parameter.setDescription(getChildText("description", ""));
167  }
168 
169  @NotNull
170  @Override
171  public PluginParameter<G, A, R, ?> visit(@NotNull final ArchetypeParameter<G, A, R> parameter) {
172  fromXML(parameter);
173  parameter.setStringValue(getChildText("value", ""));
174  return parameter;
175  }
176 
177  @NotNull
178  @Override
179  public PluginParameter<G, A, R, ?> visit(@NotNull final BooleanParameter<G, A, R> parameter) {
180  fromXML(parameter);
181  parameter.setStringValue(getChildText("value", ""));
182  parameter.setTrueText(getChildText("trueText", "Yes"));
183  parameter.setFalseText(getChildText("falseText", "No"));
184  return parameter;
185  }
186 
187  @NotNull
188  @Override
189  public PluginParameter<G, A, R, ?> visit(@NotNull final DoubleParameter<G, A, R> parameter) {
190  fromXML(parameter);
191  try {
192  parameter.setMin(Double.parseDouble(getChildText("minimum", "0.0")));
193  } catch (final NumberFormatException ignored) {
194  }
195  try {
196  parameter.setMax(Double.parseDouble(getChildText("maximum", "1.0")));
197  } catch (final NumberFormatException ignored) {
198  }
199  parameter.setStringValue(getChildText("value", ""));
200  return parameter;
201  }
202 
203  @NotNull
204  @Override
205  public PluginParameter<G, A, R, ?> visit(@NotNull final IntegerParameter<G, A, R> parameter) {
206  fromXML(parameter);
207  try {
208  parameter.setMin(Integer.parseInt(getChildText("minimum", Integer.toString(Integer.MIN_VALUE))));
209  } catch (final NumberFormatException ignored) {
210  }
211  try {
212  parameter.setMax(Integer.parseInt(getChildText("maximum", Integer.toString(Integer.MAX_VALUE))));
213  } catch (final NumberFormatException ignored) {
214  }
215  parameter.setStringValue(XmlUtils.getChild(e, "value").getValue().trim());
216  return parameter;
217  }
218 
219  @NotNull
220  @Override
221  public PluginParameter<G, A, R, ?> visit(@NotNull final MapParameter<G, A, R> parameter) {
222  fromXML(parameter);
223  parameter.setStringValue(getChildText("value", ""));
224  return parameter;
225  }
226 
227  @NotNull
228  @Override
229  public PluginParameter<G, A, R, ?> visit(@NotNull final MapPathParameter<G, A, R> parameter) {
230  fromXML(parameter);
231  parameter.setStringValue(getChildText("value", ""));
232  return parameter;
233  }
234 
235  @NotNull
236  @Override
237  public PluginParameter<G, A, R, ?> visit(@NotNull final StringParameter<G, A, R> parameter) {
238  fromXML(parameter);
239  parameter.setStringValue(getChildText("value", ""));
240  return parameter;
241  }
242 
243  };
244 
248  @Nullable
249  private Element e;
250 
256  @NotNull
257  public Element toXML(@NotNull final PluginParameter<G, A, R, ?> parameter) {
258  return parameter.visit(toXML);
259  }
260 
266  public void fromXML(@NotNull final PluginParameter<G, A, R, ?> parameter, @NotNull final Element e) {
267  this.e = e;
268  parameter.visit(fromXML);
269  this.e = null;
270  }
271 
278  @NotNull
279  private String getChildText(@NotNull final String key, @NotNull final String defaultValue) {
280  assert e != null;
281  final String value = XmlUtils.getChild(e, key).getValue().trim();
282  return value == null ? defaultValue : value;
283  }
284 
285 }
net.sf.gridarta.plugin.parameter.PluginParameterCodec
Converts PluginParameters from or to XML encoding.
Definition: PluginParameterCodec.java:35
net.sf.gridarta.plugin.parameter.BooleanParameter
A PluginParameter that holds a boolean value.
Definition: BooleanParameter.java:30
net.sf.gridarta.plugin.parameter.PluginParameter
Parameter for a Plugin.
Definition: PluginParameter.java:33
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.plugin.parameter.IntegerParameter< G, A, R >
net.sf.gridarta.plugin.parameter.MapParameter
A PluginParameter that holds a MapControl value.
Definition: MapParameter.java:37
net.sf
net.sf.gridarta.plugin.parameter.PluginParameterCodec.e
Element e
Holds the XML representation being decoded.
Definition: PluginParameterCodec.java:249
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Reflects a game object (object on a map).
Definition: GameObject.java:36
net.sf.gridarta.plugin.parameter.PluginParameterCodec.fromXML
void fromXML(@NotNull final PluginParameter< G, A, R, ?> parameter, @NotNull final Element e)
Restores a PluginParameter from XML representation.
Definition: PluginParameterCodec.java:266
net.sf.gridarta.plugin.parameter.PluginParameterCodec.fromXML
final PluginParameterVisitor< G, A, R, PluginParameter< G, A, R, ?> > fromXML
A PluginParameterVisitor that restores a PluginParameter from XML representation.
Definition: PluginParameterCodec.java:158
net.sf.gridarta.utils.XmlUtils.getChild
static Element getChild(@NotNull final Element parentElement, @NotNull final String childName)
Returns a child Element of a parent element.
Definition: XmlUtils.java:46
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.plugin.parameter.PluginParameterCodec.getChildText
String getChildText(@NotNull final String key, @NotNull final String defaultValue)
Returns the value of a field of e.
Definition: PluginParameterCodec.java:279
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.plugin.parameter.PluginParameterCodec.toXML
Element toXML(@NotNull final PluginParameter< G, A, R, ?> parameter)
Returns the XML representation of a PluginParameter.
Definition: PluginParameterCodec.java:257
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.plugin.parameter.DoubleParameter< G, A, R >
net.sf.gridarta.plugin.parameter.PluginParameterCodec.toXML
final PluginParameterVisitor< G, A, R, Element > toXML
A PluginParameterVisitor that returns XML representation.
Definition: PluginParameterCodec.java:41
net.sf.gridarta.plugin.parameter.MapPathParameter
A PluginParameter that holds a path with in the maps directory.
Definition: MapPathParameter.java:35
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.plugin.parameter.PluginParameterVisitor< G, A, R, Element >
net.sf.gridarta.plugin.parameter.StringParameter
A PluginParameter that holds a string value.
Definition: StringParameter.java:30
net.sf.gridarta.plugin.parameter.ArchetypeParameter
A PluginParameter that holds an Archetype value.
Definition: ArchetypeParameter.java:33
net.sf.gridarta.utils.XmlUtils
XML related utility functions.
Definition: XmlUtils.java:30
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20