From: <jde...@us...> - 2011-02-28 22:42:34
|
Revision: 14655 http://pcgen.svn.sourceforge.net/pcgen/?rev=14655&view=rev Author: jdempsey Date: 2011-02-28 22:42:23 +0000 (Mon, 28 Feb 2011) Log Message: ----------- Merging CDOM branch with a new branch off trunk * Migrate gmgen name generator to core. * Import RandomNameDialog and associated changes from cdomui branch Issue#: CODE-525 Modified Paths: -------------- sandbox/uisync/code/src/java/plugin/doomsdaybook/RandomNamePlugin.java Added Paths: ----------- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/CRRule.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DDList.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElement.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElementComperator.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataSubValue.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataValue.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/HyphenRule.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Operation.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Rule.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/RuleSet.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/SpaceRule.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/VariableHashMap.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/WeightedDataValue.java sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/variableException.java sandbox/uisync/code/src/java/pcgen/gui2/dialog/RandomNameDialog.java sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/Main.java sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameButton.java sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameGenPanel.java sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/XMLFilter.java Removed Paths: ------------- sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/Main.java sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/NameButton.java sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/XMLFilter.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/CRRule.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DDList.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataElement.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataSubValue.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataValue.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/HyphenRule.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/Operation.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/Rule.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/RuleSet.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/SpaceRule.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/VariableHashMap.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/WeightedDataValue.java sandbox/uisync/code/src/java/plugin/doomsdaybook/util/variableException.java Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/CRRule.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/CRRule.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/CRRule.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/CRRule.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,58 @@ +/* + * SpaceRule.java + * + * Created on April 25, 2003, 2:20 PM + */ +package pcgen.core.doomsdaybook; + +import java.util.ArrayList; + +/** + * + * @author devon + */ +public class CRRule implements DataElement +{ + ArrayList<DataValue> retList = new ArrayList<DataValue>(); + + /** Creates a new instance of SpaceRule */ + public CRRule() + { + retList.add(new DataValue(" ")); + } + + public ArrayList<DataValue> getData() + { + return retList; + } + + public ArrayList<DataValue> getData(int choice) + { + return retList; + } + + public String getId() + { + return "\n"; + } + + public ArrayList<DataValue> getLastData() + { + return retList; + } + + public String getTitle() + { + return null; + } + + public int getWeight() + { + return 1; + } + + public void trimToSize() + { + // TODO: Method doesn't do anything? + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DDList.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DDList.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DDList.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DDList.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,199 @@ +/* + * List.java + * + * Created on April 24, 2003, 4:30 PM + */ +package pcgen.core.doomsdaybook; + +import gmgen.plugin.Dice; + +import java.util.ArrayList; + +/** + * + * @author devon + */ +public class DDList extends ArrayList<WeightedDataValue> implements DataElement +{ + ArrayList<DataValue> retList = new ArrayList<DataValue>(); + String id; + String title; + VariableHashMap allVars; + int weight; + + /** Creates a new instance of List + * @param allVars + */ + public DDList(VariableHashMap allVars) + { + this(allVars, "", "", 1); + } + + /** + * Constructor + * @param allVars + * @param title + * @param id + */ + public DDList(VariableHashMap allVars, String title, String id) + { + this(allVars, title, id, 1); + } + + /** + * Constructor + * @param allVars + * @param title + * @param id + * @param weight + */ + public DDList(VariableHashMap allVars, String title, String id, int weight) + { + this.allVars = allVars; + this.title = title; + this.id = id; + this.weight = weight; + } + + public ArrayList<DataValue> getData() + { + retList.clear(); + + int rangeTop = getRange(); + int modifier; + + try + { + modifier = Integer.parseInt(allVars.getVal(getId() + "modifier")); + } + catch (Exception e) + { + modifier = 0; + } + + // Determine which entry to choose + Dice die = new Dice(1, rangeTop, 0); + int choice = die.roll(); + choice += modifier; + choice = (choice < 0) ? rangeTop : choice; + + //select the detail to return + int aWeight = 0; + + //Iterate through the list of choices until the weights (from each DataValue) are greater the the num chosen as the 'choice' + for (WeightedDataValue chkValue : this) + { + int valueWeight = chkValue.getWeight(); + + if (valueWeight > 0) + { + aWeight += valueWeight; + + if (aWeight >= choice) + { + retList.add(chkValue); + + break; + } + } + } + + return retList; + } + + public ArrayList<DataValue> getData(int choice) + { + retList.clear(); + + //select the detail to return + int aWeight = 0; + + //Iterate through the list of choices until the weights (from each DataValue) are greater the the num chosen as the 'choice' + for (WeightedDataValue chkValue : this) + { + int valueWeight = chkValue.getWeight(); + + if (valueWeight > 0) + { + aWeight += valueWeight; + + if (aWeight >= choice) + { + retList.add(chkValue); + + break; + } + } + } + + return retList; + } + + /** + * Set the id of the list + * @param id + */ + public void setId(String id) + { + this.id = id; + } + + public String getId() + { + return id; + } + + public ArrayList<DataValue> getLastData() + { + return retList; + } + + /** + * Get the range + * @return the range + */ + public int getRange() + { + int rangeTop = 0; + + for (WeightedDataValue value : this) + { + rangeTop += value.getWeight(); + } + + if (rangeTop <= 0) + { //the die will nullpointer if it is not at least 1 + rangeTop = 1; + } + + return rangeTop; + } + + /** + * Set the title of the list + * @param title + */ + public void setTitle(String title) + { + this.title = title; + } + + public String getTitle() + { + return title; + } + + /** + * Set the weight + * @param weight + */ + public void setWeight(int weight) + { + this.weight = weight; + } + + public int getWeight() + { + return weight; + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElement.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataElement.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElement.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElement.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,60 @@ +/* + * DataElement.java + * + * Created on April 24, 2003, 4:14 PM + */ +package pcgen.core.doomsdaybook; + +import java.util.ArrayList; + +/** + * + * @author devon + */ +public interface DataElement +{ + /** + * Get Data + * @return ArrayList + * @throws Exception + */ + public ArrayList<DataValue> getData() throws Exception; + + /** + * Get data + * @param choice + * @return ArrayList + * @throws Exception + */ + public ArrayList<DataValue> getData(int choice) throws Exception; + + /** + * Get id + * @return id + */ + public String getId(); + + /** + * Get last data + * @return last data + * @throws Exception + */ + public ArrayList<DataValue> getLastData() throws Exception; + + /** + * Get title + * @return title + */ + public String getTitle(); + + /** + * Get weight + * @return weight + */ + public int getWeight(); + + /** + * trim to size + */ + public void trimToSize(); +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElementComperator.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataElementComperator.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElementComperator.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataElementComperator.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,19 @@ +/* DataElementComperator - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ +package pcgen.core.doomsdaybook; + +import java.io.Serializable; +import java.util.Comparator; + +/** + * DataElementComperator + */ +public class DataElementComperator implements Comparator<DataElement>, + Serializable +{ + public int compare(DataElement o1, DataElement o2) + { + return o1.getTitle().compareTo(o2.getTitle()); + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataSubValue.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataSubValue.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataSubValue.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataSubValue.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,61 @@ +/* DataSubValue - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ +package pcgen.core.doomsdaybook; + +/** + * DataSubValue + */ +public class DataSubValue +{ + private DataSubValue next; + private String key; + private String value; + + /** + * Constructor + * @param key + * @param value + */ + public DataSubValue(String key, String value) + { + this.key = key; + this.value = value; + } + + /** + * Get the value + * @param searchKey + * @return value + */ + public String get(String searchKey) + { + if (key.equals(searchKey)) + { + return value; + } + + if (next == null) + { + return null; + } + + return next.get(searchKey); + } + + /** + * Put the value + * @param sub + */ + public void put(DataSubValue sub) + { + if (next == null) + { + next = sub; + } + else + { + next.put(sub); + } + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataValue.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/DataValue.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataValue.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/DataValue.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,81 @@ +/* + * DataValue.java + * + * Created on April 24, 2003, 4:23 PM + */ +package pcgen.core.doomsdaybook; + +/** + * @author devon + */ +public class DataValue +{ + private DataSubValue subvalue; + private String value; + + /** + * Constructor + */ + public DataValue() + { + value = ""; + } + + /** + * Constructor + * @param value + */ + public DataValue(String value) + { + this.value = value; + } + + /** + * Get SubValue + * @param key + * @return SubValue + */ + public String getSubValue(String key) + { + if (subvalue != null) + { + return subvalue.get(key); + } + return null; + } + + /** + * Set value + * @param value + */ + public void setValue(String value) + { + this.value = value; + } + + /** + * Get value + * @return value + */ + public String getValue() + { + return value; + } + + /** + * Add sub value + * @param key + * @param subValue + */ + public void addSubValue(String key, String subValue) + { + if (subvalue != null) + { + subvalue.put(new DataSubValue(key, subValue)); + } + else + { + subvalue = new DataSubValue(key, subValue); + } + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/HyphenRule.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/HyphenRule.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/HyphenRule.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/HyphenRule.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,58 @@ +/* + * SpaceRule.java + * + * Created on April 25, 2003, 2:20 PM + */ +package pcgen.core.doomsdaybook; + +import java.util.ArrayList; + +/** + * + * @author devon + */ +public class HyphenRule implements DataElement +{ + ArrayList<DataValue> retList = new ArrayList<DataValue>(); + + /** Creates a new instance of SpaceRule */ + public HyphenRule() + { + retList.add(new DataValue("-")); + } + + public ArrayList<DataValue> getData() + { + return retList; + } + + public ArrayList<DataValue> getData(int choice) + { + return retList; + } + + public String getId() + { + return "-"; + } + + public ArrayList<DataValue> getLastData() + { + return retList; + } + + public String getTitle() + { + return null; + } + + public int getWeight() + { + return 1; + } + + public void trimToSize() + { + // TODO: Method doesn't do anything? + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Operation.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/Operation.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Operation.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Operation.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,121 @@ +/* + * RPGeneration - A role playing utility generate interesting things + * Copyright (C) 2002 Devon D Jones + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * The author of this program grants you the ability to use this code + * in conjunction with code that is covered under the Open Gaming License + * + * Class.java + * + * Created on November 1, 2002, 2:15 PM + */ +package pcgen.core.doomsdaybook; + +/** + * <code>Operation</code> encapsulates an action that can be performed + * on a variable. These are actions such as setting, adding or + * multiplying the variable's current value. + * + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @author Devon D Jones + * @version $Revision$ + */ +public class Operation implements Comparable +{ + /** The identifying key of the variable the operation is to affect. */ + private String key = ""; + /** The name of the operation. */ + private String name = ""; + /** The type of action to take on the variable. */ + private String type = ""; + /** The value to be used in the operation. */ + private String value = ""; + + /** + * Create a new Operation instance. + * + * @param type The type of action to take on the variable. + * @param key The identifying key of the variable the operation is to affect. + * @param value The value to be used in the operation. + * @param name The name of the operation. + */ + public Operation(String type, String key, String value, String name) + { + this.type = type; + this.key = key; + this.value = value; + this.name = name; + } + + /** + * Create a new unnamed Operation instance. + * + * @param type The type of action to take on the variable. + * @param key The identifying key of the variable the operation is to affect. + * @param value The value to be used in the operation. + */ + public Operation(String type, String key, String value) + { + this(type, key, value, ""); + } + + /** + * @return The current value of the key. + */ + public String getKey() + { + return key; + } + + /** + * @return The current value of the type. + */ + public String getType() + { + return type; + } + + /** + * @return The current value of the value. + */ + public String getValue() + { + return value; + } + + /** + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + public int compareTo(Object obj) + { + String title = this.toString(); + String compared = obj.toString(); + + return title.compareTo(compared); + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return name; + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Rule.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/Rule.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Rule.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/Rule.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,136 @@ +/* + * Rule.java + * + * Created on April 25, 2003, 1:51 PM + */ +package pcgen.core.doomsdaybook; + +import pcgen.util.Logging; + +import java.util.ArrayList; + +/** + * + * @author devon + */ +public class Rule extends ArrayList<String> implements DataElement +{ + ArrayList<DataValue> retList = new ArrayList<DataValue>(); + String id; + String title; + VariableHashMap allVars; + int weight; + + /** + * Creates a new instance of Rule + * @param allVars + */ + public Rule(VariableHashMap allVars) + { + this(allVars, "", "", 1); + } + + public Rule(VariableHashMap allVars, int weight) + { + this(allVars, "", "", weight); + } + + public Rule(VariableHashMap allVars, String title, String id) + { + this(allVars, title, id, 1); + } + + public Rule(VariableHashMap allVars, String title, String id, int weight) + { + this.allVars = allVars; + this.title = title; + this.id = id; + this.weight = weight; + } + + public ArrayList<DataValue> getData() throws Exception + { + retList.clear(); + + for (String key : this) + { + DataElement ele = allVars.getDataElement(key); + retList.addAll(ele.getData()); + } + + return retList; + } + + public ArrayList<DataValue> getData(int choice) throws Exception + { + return getData(); + } + + public void setId(String id) + { + this.id = id; + } + + public String getId() + { + return id; + } + + public ArrayList<DataValue> getLastData() throws Exception + { + retList.clear(); + + for (String key : this) + { + DataElement ele = allVars.getDataElement(key); + retList.addAll(ele.getLastData()); + } + + return retList; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getTitle() + { + return title; + } + + public void setWeight(int weight) + { + this.weight = weight; + } + + public int getWeight() + { + return weight; + } + + @Override + public String toString() + { + StringBuffer sb = new StringBuffer(); + + for (String key : this) + { + try + { + DataElement ele = allVars.getDataElement(key); + + if (ele.getTitle() != null) + { + sb.append("[" + ele.getTitle() + "] "); + } + } + catch (Exception e) + { + Logging.errorPrint(e.getMessage(), e); + } + } + + return sb.toString(); + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/RuleSet.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/RuleSet.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/RuleSet.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/RuleSet.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,389 @@ +package pcgen.core.doomsdaybook; + +import gmgen.plugin.Dice; + +import java.util.ArrayList; + +/** + * This class deals with RuleSets for Random name generation + * + * @author Devon Jones + */ +public class RuleSet extends ArrayList<String> implements DataElement +{ + ArrayList<DataValue> retList = new ArrayList<DataValue>(); + Rule retRule; + String id; + String title; + String usage = "private"; + VariableHashMap allVars; + int weight; + + /** + * Creates a new instance of Rule + * @param allVars + */ + public RuleSet(VariableHashMap allVars) + { + this(allVars, "", "", 1); + } + + /** + * Constructor + * + * @param allVars + * @param title + * @param id + */ + public RuleSet(VariableHashMap allVars, String title, String id) + { + this(allVars, title, id, 1); + } + + /** + * Constructor + * + * @param allVars + * @param title + * @param id + * @param weight + */ + public RuleSet(VariableHashMap allVars, String title, String id, int weight) + { + this.allVars = allVars; + this.title = title; + this.id = id; + this.weight = weight; + } + + /** + * Constructor + * + * @param allVars + * @param title + * @param id + * @param usage + */ + public RuleSet(VariableHashMap allVars, String title, String id, + String usage) + { + this(allVars, title, id, 1, usage); + } + + /** + * Constructor + * + * @param allVars + * @param title + * @param id + * @param weight + * @param usage + */ + public RuleSet(VariableHashMap allVars, String title, String id, + int weight, String usage) + { + this.allVars = allVars; + this.title = title; + this.id = id; + this.weight = weight; + this.usage = usage; + } + + /** + * Get the data + * + * @return A list of data + * @throws Exception + */ + public ArrayList<DataValue> getData() throws Exception + { + retList.clear(); + + int rangeTop = getRange(); + int modifier; + + try + { + modifier = Integer.parseInt(allVars.getVal(getId() + "modifier")); + } + catch (Exception e) + { + modifier = 0; + } + + // Determine which entry to choose + Dice die = new Dice(1, rangeTop, 0); + int choice = die.roll(); + choice = choice + modifier; + choice = (choice < 0) ? rangeTop : choice; + + //select the detail to return + int aWeight = 0; + + //Iterate through the list of choices until the weights (from each DataValue) are greater the the num chosen as the 'choice' + for (String key : this) + { + Rule chkValue = (Rule) allVars.getDataElement(key); + int valueWeight = chkValue.getWeight(); + + if (valueWeight > 0) + { + aWeight = aWeight + valueWeight; + + if (aWeight >= choice) + { + retList.addAll(chkValue.getData()); + + break; + } + } + } + + return retList; + } + + /** + * Get the data given a choice + * + * @param choice + * @return List of data + * @throws Exception + */ + public ArrayList<DataValue> getData(int choice) throws Exception + { + retList.clear(); + + //select the detail to return + int aWeight = 0; + + //Iterate through the list of choices until the weights (from each DataValue) are greater the the num chosen as the 'choice' + for (String key : this) + { + Rule chkValue = (Rule) allVars.getDataElement(key); + int valueWeight = chkValue.getWeight(); + + if (valueWeight > 0) + { + aWeight = aWeight + valueWeight; + + if (aWeight >= choice) + { + retList.addAll(chkValue.getData()); + + break; + } + } + } + + return retList; + } + + /** + * Set the id + * @param id + */ + public void setId(String id) + { + this.id = id; + } + + /** + * Get the id + * @return id + */ + public String getId() + { + return id; + } + + /** + * Get the last data + * @return the last list of data + */ + public ArrayList<DataValue> getLastData() + { + return retList; + } + + /** + * Get the last rule + * @return last rule + */ + public Rule getLastRule() + { + return retRule; + } + + /** + * Get the range + * + * @return range + * @throws Exception + */ + public int getRange() throws Exception + { + int rangeTop = 0; + + for (String key : this) + { + Rule value = (Rule) allVars.getDataElement(key); + rangeTop = rangeTop + value.getWeight(); + } + + if (rangeTop <= 0) + { //the die will nullpointer if it is not at least 1 + rangeTop = 1; + } + + return rangeTop; + } + + /** + * Get the rule + * + * @return rule + * @throws Exception + */ + public Rule getRule() throws Exception + { + int rangeTop = getRange(); + int modifier; + + try + { + modifier = Integer.parseInt(allVars.getVal(getId() + "modifier")); + } + catch (Exception e) + { + modifier = 0; + } + + // Determine which entry to choose + Dice die = new Dice(1, rangeTop, 0); + int choice = die.roll(); + choice = choice + modifier; + + choice = (choice < 0) ? rangeTop : choice; + + //select the detail to return + int aWeight = 0; + + //Iterate through the list of choices until the weights (from each DataValue) are greater the the num chosen as the 'choice' + for (String key : this) + { + Rule chkValue = (Rule) allVars.getDataElement(key); + int valueWeight = chkValue.getWeight(); + + if (valueWeight > 0) + { + aWeight = aWeight + valueWeight; + + if (aWeight >= choice) + { + retRule = chkValue; + + return chkValue; + } + } + } + + return retRule; + } + + /** + * Get the rule given a choice + * + * @param choice + * @return Rule + * @throws Exception + */ + public Rule getRule(int choice) throws Exception + { + //select the detail to return + int aWeight = 0; + + //Iterate through the list of choices until the weights (from each DataValue) are greater the the num chosen as the 'choice' + for (String key : this) + { + Rule chkValue = (Rule) allVars.getDataElement(key); + int valueWeight = chkValue.getWeight(); + + if (valueWeight > 0) + { + aWeight = aWeight + valueWeight; + + if (aWeight >= choice) + { + retRule = chkValue; + + break; + } + } + } + + return retRule; + } + + /** + * Set the title + * @param title + */ + public void setTitle(String title) + { + this.title = title; + } + + /** + * Get the title + * @return title + */ + public String getTitle() + { + return title; + } + + /** + * Set the usage + * @param usage + */ + public void setUsage(String usage) + { + this.usage = usage; + } + + /** + * Get the usage + * @return usage + */ + public String getUsage() + { + return usage; + } + + /** + * Set the weight + * @param weight + */ + public void setWeight(int weight) + { + this.weight = weight; + } + + /** + * Get the weight + * @return weight + */ + public int getWeight() + { + return weight; + } + + /** + * @see java.util.AbstractCollection#toString() + */ + @Override + public String toString() + { + return getTitle(); + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/SpaceRule.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/SpaceRule.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/SpaceRule.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/SpaceRule.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,58 @@ +/* + * SpaceRule.java + * + * Created on April 25, 2003, 2:20 PM + */ +package pcgen.core.doomsdaybook; + +import java.util.ArrayList; + +/** + * + * @author devon + */ +public class SpaceRule implements DataElement +{ + ArrayList<DataValue> retList = new ArrayList<DataValue>(); + + /** Creates a new instance of SpaceRule */ + public SpaceRule() + { + retList.add(new DataValue(" ")); + } + + public ArrayList<DataValue> getData() + { + return retList; + } + + public ArrayList<DataValue> getData(int choice) + { + return retList; + } + + public String getId() + { + return " "; + } + + public ArrayList<DataValue> getLastData() + { + return retList; + } + + public String getTitle() + { + return null; + } + + public int getWeight() + { + return 1; + } + + public void trimToSize() + { + // TODO: Method doesn't do anything? + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/VariableHashMap.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/VariableHashMap.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/VariableHashMap.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/VariableHashMap.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,378 @@ +/* + * RPGeneration - A role playing utility generate interesting things + * Copyright (C) 2002 Devon D Jones + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * The author of this program grants you the ability to use this code + * in conjunction with code that is covered under the Open Gaming License + * + * VariableHashMap.java + * + * Created on November 1, 2002, 1:15 PM + */ +package pcgen.core.doomsdaybook; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * <code>VariableHashMap</code> is a collection of variables (key/value + * pairs) and DataElements optimised for quick lookup and updating. Note + * there are three structures here, the principle map of variables, a + * secondary map of DataElement objects and a list of Operation objects. + * + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @author devon + * @version $Revision$ + */ +public class VariableHashMap extends HashMap<String, String> +{ + private List<Operation> initialize = new ArrayList<Operation>(); + private Map<String, DataElement> dataElements; + + /** Creates a new instance of VariableHashMap */ + public VariableHashMap() + { + this.dataElements = new HashMap<String, DataElement>(); + } + + /** + * Create a new instance of VariableHashMap using a pre generated + * map of DataElement objects. NB: The passed in map will be + * retained by the new VariableHashMap. + * @param dataElements + */ + public VariableHashMap(HashMap<String, DataElement> dataElements) + { + this.dataElements = dataElements; + } + + /** + * Retrieve the data element for the given key. If no entry is + * present for the key an exception will be thrown. + * + * @param key The key of the element to be retrieved. + * @return The data element. + * @throws Exception When no entry exists for the supplied key. + */ + public DataElement getDataElement(String key) throws Exception + { + DataElement de = dataElements.get(key); + + if (de == null) + { + throw new Exception("Data Set " + key + " Does Not Exist"); + } + + return de; + } + + /** + * Retrieve the variable value for the given key. If no entry is + * present for the key an exception will be thrown. + * + * @param key The key of the variable to be retrieved. + * @return The value fo the variable. + * @throws variableException When no entry exists for the supplied key. + */ + public String getVal(String key) throws variableException + { + String value = get(key); + + if (value == null) + { + throw new variableException("Variable " + key + + " does not exist, cannot get value"); + } + + return value; + } + + /** + * Set the value for an existing variable. If no entry is + * present for the key, an exception will be thrown. + * + * @param key The key of the variable to be set. + * @param value The new value for the variable + * @throws variableException When no entry exists for the supplied key. + */ + public void setVar(String key, String value) throws variableException + { + if (get(key) == null) + { + throw new variableException("Variable " + key + + " does not exist, cannot set value"); + } + + put(key, value); + } + + /** + * Add a new DataElement to the map of DataElement objects. + * The dataElement's Id will be used as the key for the map. + * + * @param dataElement The DataElement object to be added. + */ + public void addDataElement(DataElement dataElement) + { + String key = dataElement.getId(); + dataElement.trimToSize(); + dataElements.put(key, dataElement); + } + + /** + * Add an Operation to the initialize list + * + * @param op The Operation to be added. + */ + public void addInitialOperations(Operation op) + { + initialize.add(op); + } + + /** + * Add an amount to an existing variable. If no entry is + * present for the key, an exception will be thrown. + * + * @param key The key of the variable to be updated. + * @param add The amount to add to the variable. + * @return The new value of the variable. + * @throws variableException When no entry exists for the supplied key. + */ + public String addVar(String key, int add) throws variableException + { + String value = get(key); + + if (value == null) + { + throw new variableException("Variable " + key + + " does not exist, cannot add to value"); + } + + int val; + + if ("".equals(value)) + { + val = 0; + } + else + { + val = Integer.parseInt(get(key)); + } + + return put(key, Integer.toString(val + add)); + } + + /** + * Divide the value of an existing variable by an amount. If no entry is + * present for the key, an exception will be thrown. NB: Integer divison + * is used. + * + * @param key The key of the variable to be updated. + * @param divide The amount to divide the variable's value by. + * @return The new value of the variable. + * @throws variableException When no entry exists for the supplied key. + */ + public String divideVar(String key, int divide) throws variableException + { + String value = get(key); + + if (value == null) + { + throw new variableException("Variable " + key + + " does not exist, cannot divide by value"); + } + + int val; + + if ("".equals(value)) + { + val = 0; + } + else + { + val = Integer.parseInt(get(key)); + } + + return put(key, Integer.toString(val / divide)); + } + + /** + * Perform the supplied Operations in sequence. + * + * @param ops The Operations to be performed. + * @throws variableException When no entry exists for an Operation's key. + */ + public void doOperation(List<Operation> ops) throws variableException + { + for (Operation op : ops) + { + doOperation(op); + } + } + + /** + * Perform the Operation. The Operation defines, the action, the variable + * to be affected and the value to be used in the operation. If no entry is + * present for the key expected by the Operation, an exception will be + * thrown. + * + * @param op The Operation to be performed. + * @throws variableException When no entry exists for the Operation's key. + */ + public void doOperation(Operation op) throws variableException + { + String type = op.getType(); + String key = op.getKey(); + String value = op.getValue(); + + if (type.equals("Set")) + { + value = parse(value); + setVar(key, value); + } + else if (type.equals("Add")) + { + int val = Integer.parseInt(parse(value)); + addVar(key, val); + } + else if (type.equals("Subtract")) + { + int val = Integer.parseInt(parse(value)); + subtractVar(key, val); + } + else if (type.equals("Multiply")) + { + int val = Integer.parseInt(parse(value)); + multiplyVar(key, val); + } + else if (type.equals("Divide")) + { + int val = Integer.parseInt(parse(value)); + divideVar(key, val); + } + } + + /** + * Perform the initialization Operations in sequence. + * + * @throws variableException When no entry exists for an Operation's key. + */ + public void initialize() throws variableException + { + doOperation(initialize); + } + + /** + * Multiply the value of an existing variable by an amount. If no entry is + * present for the key, an exception will be thrown. NB: Integer divison + * is used. + * + * @param key The key of the variable to be updated. + * @param multiply The amount to multiply the variable's value by. + * @return The new value of the variable. + * @throws variableException When no entry exists for the supplied key. + */ + public String multiplyVar(String key, int multiply) + throws variableException + { + String value = get(key); + + if (value == null) + { + throw new variableException("Variable " + key + + " does not exist, cannot multiply by value"); + } + + int val; + + if ("".equals(value)) + { + val = 0; + } + else + { + val = Integer.parseInt(get(key)); + } + + return put(key, Integer.toString(val * multiply)); + } + + /** + * Parse a value substituting the first variable referred to as + * ${varname} with the variable's value. + * + * @param val The value to be parsed + * @return The parsed value. + */ + public String parse(String val) + { + String retString = val; + + if (val.matches("\\$\\{.*?\\}.*")) + { + String var = val.substring(val.indexOf("${") + 2, val.indexOf("}")); + String value = get(var); + + if (value == null) + { + value = ""; + } + + retString = val.replaceFirst("\\$\\{.*?\\}", value); + } + + return retString; + } + + /** + * Subtract an amount to an existing variable. If no entry is + * present for the key, an exception will be thrown. + * + * @param key The key of the variable to be updated. + * @param subtract The amount to subtract from the variable. + * @return The new value of the variable. + * @throws variableException When no entry exists for the supplied key. + */ + public String subtractVar(String key, int subtract) + throws variableException + { + String value = get(key); + + if (value == null) + { + throw new variableException("Variable " + key + + " does not exist, cannot subtract from value"); + } + + int val; + + if ("".equals(value)) + { + val = 0; + } + else + { + val = Integer.parseInt(get(key)); + } + + return put(key, Integer.toString(val - subtract)); + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/WeightedDataValue.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/WeightedDataValue.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/WeightedDataValue.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/WeightedDataValue.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,54 @@ +/* + * WeightedDataValue.java + * + * Created on April 24, 2003, 4:35 PM + */ +package pcgen.core.doomsdaybook; + +/** + * <code>WeightedDataValue</code>. + * + * @author devon + * @version $Revision$ + */ +public class WeightedDataValue extends DataValue +{ + private int weight; + + /** Creates a new instance of WeightedDataValue */ + public WeightedDataValue() + { + super(); + weight = 1; + } + + /** + * Constructor + * + * @param value + * @param weight + */ + public WeightedDataValue(String value, int weight) + { + super(value); + this.weight = weight; + } + + /** + * Set weight. + * @param weight + */ + public void setWeight(int weight) + { + this.weight = weight; + } + + /** + * Get weight. + * @return weight + */ + public int getWeight() + { + return weight; + } +} Copied: sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/variableException.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/util/variableException.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/variableException.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/core/doomsdaybook/variableException.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,56 @@ +/* + * RPGeneration - A role playing utility generate interesting things + * Copyright (C) 2002 Devon D Jones + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * The author of this program grants you the ability to use this code + * in conjunction with code that is covered under the Open Gaming License + * + * variableException.java + * + * Created on November 1, 2002, 1:22 PM + */ +package pcgen.core.doomsdaybook; + +/** + * <code>variableException</code> is an exception raised when a problem + * occurs when processing a variable. + * + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @author Devon D Jones + * @version $Revision$ + */ +public class variableException extends Exception +{ + /** + * Creates a new instance of <code>variableException</code> without detail message. + */ + public variableException() + { + // Empty Constructor + } + + /** + * Constructs an instance of <code>variableException</code> with the specified detail message. + * @param msg the detail message. + */ + public variableException(String msg) + { + super(msg); + } +} Added: sandbox/uisync/code/src/java/pcgen/gui2/dialog/RandomNameDialog.java =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/dialog/RandomNameDialog.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/gui2/dialog/RandomNameDialog.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,92 @@ +/* + * RandomNameDialog.java + * Copyright James Dempsey, 2010 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on 20/06/2010 12:10:46 PM + * + * $Id$ + */ +package pcgen.gui2.dialog; + +import java.awt.BorderLayout; +import java.io.File; + +import javax.swing.JDialog; +import javax.swing.JFrame; + +import pcgen.core.SettingsHandler; +import pcgen.gui2.doomsdaybook.NameGenPanel; + +/** + * The Class <code>RandomNameDialog</code> is a dialog in which the user can + * generate a random name for their character. + * + * <br/> + * Last Editor: $Author$ + * Last Edited: $Date$ + * + * @author James Dempsey <jde...@us...> + * @version $Revision$ + */ +@SuppressWarnings("serial") +public class RandomNameDialog extends JDialog +{ + private NameGenPanel nameGenPanel; + + /** + * Create a new Random Name Dialog + * @param frame The parent frame. The dialog will be centred on this frame + */ + public RandomNameDialog(JFrame frame, String gender) + { + super(frame, "Generate Random Name", true); + getContentPane().setLayout(new BorderLayout()); + nameGenPanel = new NameGenPanel(new File(getDataDir()), true); + nameGenPanel.setGender(gender); + getContentPane().add(nameGenPanel, BorderLayout.CENTER); + pack(); + setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); + setLocationRelativeTo(frame); + } + + /** + * @return The directory where the random name data is held + */ + private String getDataDir() + { + String pluginDirectory = SettingsHandler.getGmgenPluginDir().toString(); + + return pluginDirectory + File.separator + "Random Names"; + } + + /** + * @return The name the user generated. + */ + public String getChosenName() + { + return nameGenPanel.getChosenName(); + } + + /** + * @return the gender + */ + public String getGender() + { + return nameGenPanel.getGender(); + } + +} Property changes on: sandbox/uisync/code/src/java/pcgen/gui2/dialog/RandomNameDialog.java ___________________________________________________________________ Added: svn:keywords + Date Author Revision Id Added: svn:eol-style + native Copied: sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/Main.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/Main.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/Main.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/Main.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,87 @@ +/* + * main.java + * + * Created on April 25, 2003, 4:37 PM + */ +package pcgen.gui2.doomsdaybook; + +import java.io.File; + +/** + * + * @author devon + */ +public class Main extends javax.swing.JFrame +{ + // Variables declaration - do not modify//GEN-BEGIN:variables + private NameGenPanel nameGenPanel1; + + /** Creates new form main */ + public Main() + { + initComponents(); + initPrefs(); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + new Main().setVisible(true); + } + + /** Exit the Application + * @param evt + */ + private void exitForm(java.awt.event.WindowEvent evt) + { //GEN-FIRST:event_exitForm + nameGenPanel1.setExitPrefs(); + nameGenPanel1.namePrefs.putInt("WindowX", this.getX()); + nameGenPanel1.namePrefs.putInt("WindowY", this.getY()); + nameGenPanel1.namePrefs.putInt("WindowWidth", this.getSize().width); + nameGenPanel1.namePrefs.putInt("WindowHeight", this.getSize().height); + System.exit(0); + } + + //GEN-LAST:event_exitForm + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + private void initComponents() + { //GEN-BEGIN:initComponents + nameGenPanel1 = + new pcgen.gui2.doomsdaybook.NameGenPanel(new File("./Data/"), false); + setTitle("The Doomsday Book Name Generator"); + addWindowListener(new java.awt.event.WindowAdapter() + { + public void windowClosing(java.awt.event.WindowEvent evt) + { + exitForm(evt); + } + }); + getContentPane().add(nameGenPanel1, java.awt.BorderLayout.CENTER); + pack(); + } + + //GEN-END:initComponents + + private void initPrefs() + { + int iWinX = nameGenPanel1.namePrefs.getInt("WindowX", 0); + int iWinY = nameGenPanel1.namePrefs.getInt("WindowY", 0); + this.setLocation(iWinX, iWinY); + + int iWinWidth = nameGenPanel1.namePrefs.getInt("WindowWidth", 700); + int iWinHeight = nameGenPanel1.namePrefs.getInt("WindowHeight", 300); + this.setSize(iWinWidth, iWinHeight); + setTitle(getTitle() + " v" + + nameGenPanel1.namePrefs.getDouble("Version", 0) + "." + + nameGenPanel1.namePrefs.getDouble("SubVersion", 0)); + } + + // End of variables declaration//GEN-END:variables +} Copied: sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameButton.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/NameButton.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameButton.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameButton.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,35 @@ +/* + * NameButton.java + * + * Created on May 2, 2003, 11:00 AM + */ +package pcgen.gui2.doomsdaybook; + +import pcgen.core.doomsdaybook.DataElement; + +/** + * + * @author devon + */ +public class NameButton extends javax.swing.JButton +{ + DataElement element; + + /** Creates a new instance of NameButton + * @param element + */ + public NameButton(DataElement element) + { + this.element = element; + super.setText(element.getTitle()); + } + + /** + * Get the data element for the name button + * @return the data element for the name button + */ + public DataElement getDataElement() + { + return element; + } +} Copied: sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameGenPanel.java (from rev 14649, sandbox/uisync/code/src/java/plugin/doomsdaybook/gui/NameGenPanel.java) =================================================================== --- sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameGenPanel.java (rev 0) +++ sandbox/uisync/code/src/java/pcgen/gui2/doomsdaybook/NameGenPanel.java 2011-02-28 22:42:23 UTC (rev 14655) @@ -0,0 +1,1088 @@ +/* + * NameGenPanel.java + * + * Created on April 24, 2003, 1:03 PM + */ +package pcgen.gui2.doomsdaybook; + +import gmgen.util.LogUtilities; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Insets; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.Set; +import java.util.Vector; +import java.util.prefs.Preferences; + +import javax.swing.BoxLayout; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; + +import org.jdom.DataConversionException; +import org.jdom.DocType; +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.input.SAXBuilder; + +import pcgen.core.doomsdaybook.CRRule; +import pcgen.core.doomsdaybook.DataElement; +import pcgen.core.doomsdaybook.DataElementComperator; +import pcgen.core.doomsdaybook.DataValue; +import pcgen.core.doomsdaybook.HyphenRule; +import pcgen.core.doomsdaybook.Rule; +import pcgen.core.doomsdaybook.RuleSet; +import pcgen.core.doomsdaybook.SpaceRule; +import pcgen.core.doomsdaybook.VariableHashMap; +import pcgen.core.doomsdaybook.WeightedDataValue; +import pcgen.gui2.tools.Icons; +import pcgen.util.Logging; +import plugin.doomsdaybook.RandomNamePlugin; + +/** + * + * @author devon + */ +public class NameGenPanel extends JPanel +{ + private static final Font titleFont = new Font("Verdana", Font.BOLD, 15); + + public Preferences namePrefs = + Preferences.userNodeForPackage(NameGenPanel.class); + private Map<String, List<RuleSet>> categories = + new HashMap<String, List<RuleSet>>(); + private JButton generateButton; + private JButton jButton1; + private JCheckBox chkStructure; + private JComboBox cbCatalog; + private JComboBox cbCategory; + private JComboBox cbSex; + private JComboBox cbStructure; + private JLabel jLabel1; + private JLabel jLabel2; + private JLabel jLabel3; + + private JLabel jLabel4; + private JLabel jLabel5; + private JLabel jLabel6; + private JLabel meaning; + private JLabel pronounciation; + private JPanel buttonPanel; + private JPanel genCtrlPanel; + private JPanel jPanel10; + private JPanel jPanel11; + private JPanel jPanel12; + private JPanel jPanel13; + private JPanel jPanel14; + private JPanel nameDisplayPanel; + private JPanel namePanel; + private JPanel jPanel4; + private JPanel nameSubInfoPanel; + private JPanel nameActionPanel; + private JPanel jPanel7; + private JPanel jPanel8; + private JPanel jPanel9; + private JSeparator jSeparator1; + private JSeparator jSeparator2; + private JSeparator jSeparator3; + private JSeparator jSeparator4; + private JTextField name; + private VariableHashMap allVars = new VariableHashMap(); + + private Rule lastRule = null; + + private boolean generatingCharacterName = false; + private String chosenName = ""; + private String gender; + + /** Creates new form NameGenPanel */ + public NameGenPanel() + { + initComponents(); + initPrefs(); + loadData(new File(".")); + } + + /** + * Constructs a NameGenPanel given a dataPath + * + * @param dataPath + */ + public NameGenPanel(File dataPath, boolean generatingCharacterName) + { + this.generatingCharacterName = generatingCharacterName; + initComponents(); + initPrefs(); + loadData(dataPath); + } + + public void setExitPrefs() + { + // TODO: Method doesn't do anything? + } + + /** + * Generate a Rule + * @return new Rule + */ + public Rule generate() + { + try + { + Rule rule = null; + + if (chkStructure.isSelected()) + { + RuleSet rs = (RuleSet) cbCatalog.getSelectedItem(); + rule = rs.getRule(); + } + else + { + rule = (Rule) cbStructure.getSelectedItem(); + } + + ArrayList<DataValue> aName = rule.getData(); + setNameText(aName); + setMeaningText(aName); + setPronounciationText(aName); + + return rule; + } + catch (Exception e) + { + Logging.errorPrint(e.getMessage(), e); + + return null; + } + } + + /** + * Initialization of the bulk of preferences. sets the defaults + * if this is the first time you have used this version + */ + public void initPrefs() + { + boolean prefsSet = namePrefs.getBoolean("arePrefsSet", false); + + if (!prefsSet) + { + namePrefs.putBoolean("arePrefsSet", true); + } + + double version = namePrefs.getDouble("Version", 0); + + if ((version < 0.5) || !prefsSet) + { + namePrefs.putDouble("Version", 0.5); + } + + namePrefs.putDouble("SubVersion", 0); + } + + private void setMeaningText(String meaning) + { + this.meaning.setText(meaning); + } + + private void setMeaningText(ArrayList<DataValue> data) + { + StringBuffer meaningBuffer = new StringBuffer(); + + for (DataValue val : data) + { + String aMeaning = val.getSubValue("meaning"); + + if (aMeaning == null) + { + aMeaning = val.getValue(); + } + + meaningBuffer.append(aMeaning); + } + + setMeaningText(meaningBuffer.toString()); + } + + private void setNameText(String name) + { + this.name.setText(name); + LogUtilities.inst().logMessage(RandomNamePlugin.LOG_NAME, name); + } + + private void setNameText(ArrayList<DataValue> data) + { + StringBuffer nameBuffer = new StringBuffer(); + + for (DataValue val : data) + { + nameBuffer.append(val.getValue()); + } + + setNameText(nameBuffer.toString()); + } + + private void setPronounciationText(String pronounciation) + { + this.pronounciation.setText(pronounciation); + } + + private void setPronounciationText(ArrayList<DataValue> data) + { + StringBuffer proBuffer = new StringBuffer(); + + for (DataValue val : data) + { + String aPronounciation = val.getSubValue("pronounciation"); + + if (aPronounciation == null) + { + aPronounciation = val.getValue(); + } + + proBuffer.append(aPronounciation); + } + + setPronounciationText(proBuffer.toString()); + } + + void NameButtonActionPerformed(ActionEvent evt) + { + try + { + NameButton nb = (NameButton) evt.getSource(); + DataElement element = nb.getDataElement(); + element.getData(); + + Rule rule = this.lastRule; + + if (rule == null) + { + if (chkStructure.isSelected()) + { + RuleSet rs = (RuleSet) cbCatalog.getSelectedItem(); + rule = rs.getLastRule(); + } + else + { + rule = (Rule) cbStructure.getSelectedItem(); + } + + this.lastRule = rule; + } + + ArrayList<DataValue> aName = rule.getLastData(); + + setNameText(aName); + setMeaningText(aName); + setPronounciationText(aName); + } + catch (Exception e) + { + Logging.errorPrint(e.getMessage(), e); + } + } + + void cbCatalogActionPerformed(ActionEvent evt) + { //GEN-FIRST:event_cbCatalogActionPerformed + loadStructureDD(); + this.clearButtons(); + } + + //GEN-LAST:event_cbCatalogActionPerformed + + void cbStructureActionPerformed(ActionEvent evt) + { //GEN-FIRST:event_cbStructureActionPerformed + this.clearButtons(); + } + + //GEN-LAST:event_cbStructureActionPerformed + + void cbCategoryActionPerformed(ActionEvent evt) + { //GEN-FIRST:event_cbCategoryActionPerformed + this.loadGenderDD(); + loadCatalogDD(); + loadStructureDD(); + this.clearButtons(); + } + + //GEN-LAST:event_cbCategoryActionPerformed + + void cbSexActionPerformed(ActionEvent evt) + { //GEN-FIRST:event_cbSexActionPerformed + loadCatalogDD(); + loadStructureDD(); + this.clearButtons(); + } + + //GEN-LAST:event_cbSexActionPerformed + + void chkStructureActionPerformed(ActionEvent evt) + { //GEN-FIRST:event_chkStructureActionPerformed + loadStructureDD(); + } + + //GEN-LAST:event_chkStructureActionPerformed + + private void clearButtons() + { + buttonPanel.removeAll(); + buttonPanel.repaint(); + } + + private void displayButtons(Rule rule) + { + clearButtons(); + + for (String key : rule) + { + try + { + DataElement ele = allVars.getDataElement(key); + + if (ele.getTitle() != null) + { + NameButton nb = new NameButton(ele); + nb.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent evt) + { + NameButtonActionPerformed(evt); + } + }); + buttonPanel.add(nb); + } + } + catch (Exception e) + { + Logging.errorPrint(e.getMessage(), e); + } + } + + buttonPanel.repaint(); + } + + void generateButtonActionPerformed(ActionEvent evt) + { //GEN-FIRST:event_generateButtonActionPerformed + + try + { + this.lastRule = generate(); + displayButtons(this.lastRule); + } + catch (Exception e) + { + Logging.errorPrint(e.getMessage(), e); + } + } + + //GEN-LAST:event_generateButtonActionPerformed + + /** + * This method is called from within the constructor to + * initialize the form. + * + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + private void initComp... [truncated message content] |