use of pcgen.core.Domain in project pcgen by PCGen.
the class SelectableTokenIntegrationTest method createDomain.
private Domain createDomain(String key, String prop, String val) {
Domain d = new Domain();
d.setName(key);
FactKey<String> fk = FactKey.getConstant(prop, STRING_MGR);
d.put(fk, new BasicIndirect<>(STRING_MGR, val));
context.getReferenceContext().importObject(d);
return d;
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class AdddomainsToken method unparse.
@Override
public String[] unparse(LoadContext context, PCClassLevel level) {
AssociatedChanges<CDOMReference<Domain>> changes = context.getListContext().getChangesInList(getTokenName(), level, PCClass.ALLOWED_DOMAINS);
Collection<CDOMReference<Domain>> removedItems = changes.getRemoved();
if (removedItems != null && !removedItems.isEmpty() || changes.includesGlobalClear()) {
context.addWriteMessage(getTokenName() + " does not support .CLEAR");
return null;
}
MapToList<CDOMReference<Domain>, AssociatedPrereqObject> mtl = changes.getAddedAssociations();
if (mtl == null || mtl.isEmpty()) {
return null;
}
PrerequisiteWriter prereqWriter = new PrerequisiteWriter();
Set<String> set = new TreeSet<>();
for (CDOMReference<Domain> domain : mtl.getKeySet()) {
for (AssociatedPrereqObject assoc : mtl.getListFor(domain)) {
StringBuilder sb = new StringBuilder(domain.getLSTformat(false));
List<Prerequisite> prereqs = assoc.getPrerequisiteList();
Prerequisite prereq;
if (prereqs == null || prereqs.isEmpty()) {
prereq = null;
} else if (prereqs.size() == 1) {
prereq = prereqs.get(0);
} else {
context.addWriteMessage("Added Domain from " + getTokenName() + " had more than one " + "Prerequisite: " + prereqs.size());
return null;
}
if (prereq != null) {
sb.append('[');
StringWriter swriter = new StringWriter();
try {
prereqWriter.write(swriter, prereq);
} catch (PersistenceLayerException e) {
context.addWriteMessage("Error writing Prerequisite: " + e);
return null;
}
sb.append(swriter.toString());
sb.append(']');
}
set.add(sb.toString());
}
}
return new String[] { StringUtil.join(set, Constants.DOT) };
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class DomainToken method parseTokenWithSeparator.
@Override
protected ParseResult parseTokenWithSeparator(LoadContext context, PCClassLevel pcl, String value) {
StringTokenizer pipeTok = new StringTokenizer(value, Constants.PIPE);
boolean first = true;
String tok = pipeTok.nextToken();
if (looksLikeAPrerequisite(tok)) {
return new ParseResult.Fail("Cannot have only PRExxx subtoken in " + getTokenName() + ": " + value, context);
}
List<QualifiedObject<CDOMSingleRef<Domain>>> toAdd = new ArrayList<>();
boolean foundClear = false;
while (true) {
if (Constants.LST_DOT_CLEAR.equals(tok)) {
if (!first) {
return new ParseResult.Fail(" Non-sensical " + getTokenName() + ": .CLEAR was not the first list item", context);
}
context.getObjectContext().removeList(pcl, ListKey.DOMAIN);
foundClear = true;
} else {
CDOMSingleRef<Domain> domain = context.getReferenceContext().getCDOMReference(DOMAIN_CLASS, tok);
QualifiedObject<CDOMSingleRef<Domain>> qo = new QualifiedObject<>(domain);
toAdd.add(qo);
context.getObjectContext().addToList(pcl, ListKey.DOMAIN, qo);
}
first = false;
if (!pipeTok.hasMoreTokens()) {
// No prereqs, so we're done
return ParseResult.SUCCESS;
}
tok = pipeTok.nextToken();
if (looksLikeAPrerequisite(tok)) {
break;
}
}
if (foundClear) {
return new ParseResult.Fail("Cannot use PREREQs when using .CLEAR in " + getTokenName(), context);
}
while (true) {
Prerequisite prereq = getPrerequisite(tok);
if (prereq == null) {
return new ParseResult.Fail(" (Did you put feats after the " + "PRExxx tags in " + getTokenName() + ":?)", context);
}
for (PrereqObject pro : toAdd) {
pro.addPrerequisite(prereq);
}
if (!pipeTok.hasMoreTokens()) {
break;
}
tok = pipeTok.nextToken();
}
return ParseResult.SUCCESS;
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class DeityToken method getCollection.
@Override
public <R> Collection<R> getCollection(PlayerCharacter pc, Converter<Domain, R> c) {
HashSet<R> returnSet = new HashSet<>();
Deity deity = pc.getDisplay().getDeity();
if (deity == null) {
return returnSet;
}
CDOMReference<DomainList> list = Deity.DOMAINLIST;
Collection<CDOMReference<Domain>> mods = deity.getListMods(list);
for (CDOMReference<Domain> ref : mods) {
Collection<AssociatedPrereqObject> assoc = deity.getListAssociations(list, ref);
for (AssociatedPrereqObject apo : assoc) {
if (PrereqHandler.passesAll(apo.getPrerequisiteList(), pc, deity)) {
returnSet.addAll(c.convert(ref));
break;
}
}
}
return returnSet;
}
use of pcgen.core.Domain in project pcgen by PCGen.
the class CharacterFacadeImpl method processDomainList.
private void processDomainList(CDOMObject obj, final List<DomainFacadeImpl> availDomainList) {
for (QualifiedObject<CDOMSingleRef<Domain>> qo : obj.getSafeListFor(ListKey.DOMAIN)) {
CDOMSingleRef<Domain> ref = qo.getRawObject();
Domain domain = ref.get();
if (!isDomainInList(availDomainList, domain)) {
availDomainList.add(new DomainFacadeImpl(domain, qo.getPrerequisiteList()));
}
}
}
Aggregations