/* * Copyright (c) Thomas Parker, 2014. * * This program 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 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 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., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package pcgen.cdom.facet; import java.util.HashMap; import java.util.Map; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.base.DataSetInitializedFacet; import pcgen.cdom.enumeration.DataSetID; import pcgen.cdom.enumeration.ListKey; import pcgen.cdom.facet.base.AbstractSubAssociationFacet; import pcgen.core.Ability; import pcgen.core.ArmorProf; import pcgen.core.Campaign; import pcgen.core.Deity; import pcgen.core.Domain; import pcgen.core.Equipment; import pcgen.core.Kit; import pcgen.core.Language; import pcgen.core.PCAlignment; import pcgen.core.PCCheck; import pcgen.core.PCClass; import pcgen.core.PCStat; import pcgen.core.PCTemplate; import pcgen.core.PObject; import pcgen.core.Race; import pcgen.core.ShieldProf; import pcgen.core.SizeAdjustment; import pcgen.core.WeaponProf; import pcgen.output.actor.DescriptionActor; import pcgen.output.actor.DisplayNameActor; import pcgen.output.actor.EqTypeActor; import pcgen.output.actor.InfoActor; import pcgen.output.actor.KeyActor; import pcgen.output.actor.OutputNameActor; import pcgen.output.actor.SourceActor; import pcgen.output.actor.TypeActor; import pcgen.output.base.OutputActor; import pcgen.rules.context.LoadContext; /** * This Facet stores the Actors usable in Freemarker for a given DataSetID. */ public class CDOMWrapperInfoFacet extends AbstractSubAssociationFacet<DataSetID, Class<?>, String, OutputActor<?>> implements DataSetInitializedFacet { private DataSetInitializationFacet datasetInitializationFacet; @Override public void initialize(LoadContext context) { initialize(context.getDataSetID()); } /** * Initializes this facet for the given DataSetID. * * @param dsID * The DataSetID for which this facet should be initialized */ public void initialize(DataSetID dsID) { set(dsID, CDOMObject.class, "source", new SourceActor()); set(dsID, CDOMObject.class, "info", new InfoActor()); set(dsID, CDOMObject.class, "key", new KeyActor()); set(dsID, CDOMObject.class, "displayname", new DisplayNameActor()); set(dsID, CDOMObject.class, "type", new TypeActor()); set(dsID, PObject.class, "desc", new DescriptionActor(ListKey.DESCRIPTION)); set(dsID, PObject.class, "benefit", new DescriptionActor(ListKey.BENEFIT)); OutputNameActor outputNameActor = new OutputNameActor(); set(dsID, Ability.class, "outputname", outputNameActor); set(dsID, ArmorProf.class, "outputname", outputNameActor); set(dsID, Campaign.class, "outputname", outputNameActor); set(dsID, Deity.class, "outputname", outputNameActor); set(dsID, Domain.class, "outputname", outputNameActor); set(dsID, Equipment.class, "outputname", outputNameActor); set(dsID, Kit.class, "outputname", outputNameActor); set(dsID, Language.class, "outputname", outputNameActor); set(dsID, PCAlignment.class, "outputname", outputNameActor); set(dsID, PCCheck.class, "outputname", outputNameActor); set(dsID, PCClass.class, "outputname", outputNameActor); set(dsID, PCStat.class, "outputname", outputNameActor); set(dsID, PCTemplate.class, "outputname", outputNameActor); set(dsID, Race.class, "outputname", outputNameActor); set(dsID, ShieldProf.class, "outputname", outputNameActor); set(dsID, SizeAdjustment.class, "outputname", outputNameActor); set(dsID, WeaponProf.class, "outputname", outputNameActor); set(dsID, Equipment.class, "type", new EqTypeActor()); } /** * Returns the Actor for the given DataSetID, Identity (class) and key. * * @param dsID * The DataSetID to identify the actor to be returned * @param identity * The Identity (class) for which the actor should be returned * @param key * The key of the actor to be returned * @return the Actor for the given DataSetID, Identity (class) and key */ public <T> OutputActor<? super T> getActor(DataSetID dsID, Class<T> identity, String key) { @SuppressWarnings("unchecked") OutputActor<T> actor = (OutputActor<T>) get(dsID, identity, key); if (actor == null) { Class<? super T> parent = identity.getSuperclass(); if (parent == null) { //If we got to Object, then there is nothing left to do return null; } return getActor(dsID, parent, key); } return actor; } @Override protected Map<String, OutputActor<?>> getSubComponentMap() { return new HashMap<>(); } public void setDataSetInitializationFacet( DataSetInitializationFacet datasetInitializationFacet) { this.datasetInitializationFacet = datasetInitializationFacet; } public void init() { datasetInitializationFacet.addDataSetInitializedFacet(this); } }