use of pcgen.output.base.ModelFactory in project pcgen by PCGen.
the class OutputDB method getIterable.
/**
* Returns a specific portion of the PlayerCharacter data model for the
* given CharID and selection string.
*
* @param id
* The CharID for which the data model should be built
* @param keys
* A String (or array) of keys identifying the portion of the
* data model to be built
* @return An Iterable for the portion of the data model identified by the
* given Strings and the PlayerCharacter identified by the given
* CharID
*/
public static Iterable<?> getIterable(CharID id, String... keys) {
String k1 = keys[0];
String k2 = (keys.length > 1) ? keys[1] : "";
ModelFactory modelFactory = outModels.get(k1, k2);
if (modelFactory == null) {
return null;
}
return modelFactory.generate(id);
}
use of pcgen.output.base.ModelFactory in project pcgen by PCGen.
the class OutputDB method registerModelFactory.
/**
* Registers a new ModelFactory to be used in output
*
* @param name
* The interpolation for the ModelFactory
* @param modelFactory
* The ModelFactory to be used to generate the Models when the
* output Map is built
*/
public static void registerModelFactory(String name, ModelFactory modelFactory) {
if (modelFactory == null) {
throw new IllegalArgumentException("Model Factory may not be null");
}
String[] locationElements = name.split("\\.");
if (locationElements.length == 0) {
throw new IllegalArgumentException("Name may not be null or empty: " + name);
}
if (locationElements.length > 2) {
throw new IllegalArgumentException("Name may only contain zero or one period");
}
String secondName = (locationElements.length == 1) ? "" : locationElements[1];
ModelFactory old = outModels.put(locationElements[0], secondName, modelFactory);
if (old != null) {
throw new UnsupportedOperationException("Cannot have two Output Models using the same name: " + name);
}
}
use of pcgen.output.base.ModelFactory in project pcgen by PCGen.
the class OutputDB method buildDataModel.
/**
* Builds the PlayerCharacter data model for the given CharID.
*
* @param id
* The CharID for which the data model should be built
* @return A Map of the data model for the PlayerCharacter identified by the
* given CharID
*/
public static Map<String, Object> buildDataModel(CharID id) {
Map<String, Object> input = new HashMap<>();
for (Object k1 : outModels.getKeySet()) {
for (Object k2 : outModels.getSecondaryKeySet(k1)) {
ModelFactory modelFactory = outModels.get(k1, k2);
TemplateModel model = modelFactory.generate(id);
String k1String = k1.toString();
if ("".equals(k2.toString())) {
input.put(k1String, model);
} else {
ensureMap(input, k1String);
@SuppressWarnings("unchecked") Map<Object, Object> m = (Map<Object, Object>) input.get(k1String);
m.put(k2.toString(), model);
}
}
}
return input;
}
Aggregations