From: <aki...@us...> - 2010-05-24 15:40:52
|
Revision: 7977 http://gridarta.svn.sourceforge.net/gridarta/?rev=7977&view=rev Author: akirschbaum Date: 2010-05-24 15:40:45 +0000 (Mon, 24 May 2010) Log Message: ----------- Cleanup parser for/document <lists> elements within types.xml. Modified Paths: -------------- trunk/resource/system/dtd/types.dtd trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeList.java trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeSetParser.java Modified: trunk/resource/system/dtd/types.dtd =================================================================== --- trunk/resource/system/dtd/types.dtd 2010-05-24 14:33:17 UTC (rev 7976) +++ trunk/resource/system/dtd/types.dtd 2010-05-24 15:40:45 UTC (rev 7977) @@ -49,6 +49,8 @@ name CDATA #REQUIRED > +<!-- value: must be unique within the surrounding <list> --> +<!-- name: must be non-empty --> <!ELEMENT listentry EMPTY> <!ATTLIST listentry value CDATA #REQUIRED Modified: trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeList.java =================================================================== --- trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeList.java 2010-05-24 14:33:17 UTC (rev 7976) +++ trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeList.java 2010-05-24 15:40:45 UTC (rev 7977) @@ -57,10 +57,20 @@ /** * Adds an entry. - * @param pair the entry to add + * @param value the entry's value + * @param name the entry's name + * @throws IllegalArgumentException if the values are not acceptable */ - public void add(@NotNull final Pair<Integer, String> pair) { - list.add(pair); + public void add(final int value, @NotNull final String name) { + if (name.isEmpty()) { + throw new IllegalArgumentException("empty name"); + } + for (final Pair<Integer, String> pair : list) { + if (pair.getFirst() == value) { + throw new IllegalArgumentException("duplicate value '" + value + "' for '" + pair.getSecond() + "' and '" + name +"'"); + } + } + list.add(new Pair<Integer, String>(value, name)); } /** Modified: trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeSetParser.java =================================================================== --- trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeSetParser.java 2010-05-24 14:33:17 UTC (rev 7976) +++ trunk/src/app/net/sf/gridarta/model/archetypetype/ArchetypeTypeSetParser.java 2010-05-24 15:40:45 UTC (rev 7977) @@ -33,7 +33,6 @@ import net.sf.gridarta.model.errorview.ErrorViewCollector; import net.sf.gridarta.model.gameobject.GameObject; import net.sf.gridarta.model.map.maparchobject.MapArchObject; -import net.sf.gridarta.utils.Pair; import net.sf.japi.xml.NodeListIterator; import org.apache.log4j.Category; import org.apache.log4j.Logger; @@ -273,19 +272,16 @@ final Iterator<Element> it = new NodeListIterator<Element>(xpath, element, "lists/list"); while (it.hasNext()) { final Element elem = it.next(); - if (elem.getAttribute("name") == null) { - errorViewCollector.addWarning(ErrorViewCategory.TYPES_ENTRY_INVALID, "cannot load list element without 'name'."); - } else { - final ArchetypeTypeList list = parseList(errorViewCollector, elem); - if (list.size() > 0) { - archetypeTypeSet.addList(elem.getAttribute("name"), list); - } + final ArchetypeTypeList list = parseList(errorViewCollector, elem); + if (list.size() > 0) { + final String name = elem.getAttribute("name"); + archetypeTypeSet.addList(name, list); } } } /** - * Parses a "lists/list" section of a types.xml file. + * Parses a "list" section of a types.xml file. * @param errorViewCollector the error view collector for reporting errors * @param element the element to parse * @return the parsed archetype type list @@ -298,14 +294,19 @@ while (it.hasNext()) { final Element elem = it.next(); final String name = elem.getAttribute("name"); + final String valueString = elem.getAttribute("value"); final int value; try { - value = Integer.valueOf(elem.getAttribute("value")); + value = Integer.valueOf(valueString); } catch (final NumberFormatException ignore) { - errorViewCollector.addWarning(ErrorViewCategory.TYPES_ENTRY_INVALID, name + ": value '" + elem.getAttribute("value") + "' is not an integer."); + errorViewCollector.addWarning(ErrorViewCategory.TYPES_ENTRY_INVALID, name + ": value '" + valueString + "' is not an integer."); continue; } - list.add(new Pair<Integer, String>(value, name)); + try { + list.add(value, name); + } catch (final IllegalArgumentException ex) { + errorViewCollector.addWarning(ErrorViewCategory.TYPES_ENTRY_INVALID, ex.getMessage() + "."); + } } return list; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |