TemplateModelFactory.java 2.91 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.adobe.xfa.template;

import com.adobe.xfa.AppModel;
import com.adobe.xfa.Element;
import com.adobe.xfa.Model;
import com.adobe.xfa.ModelFactory;
import com.adobe.xfa.ModelPeer;
import com.adobe.xfa.Node;
import com.adobe.xfa.XFA;
import com.adobe.xfa.template.TemplateModel;
import com.adobe.xfa.template.TemplateResolver;
import com.adobe.xfa.ut.ExFull;
import com.adobe.xfa.ut.ResId;
import org.xml.sax.Attributes;

public final class TemplateModelFactory
extends ModelFactory {
    private boolean mbApplyFixups;
    private boolean mbFixupRenderCache;
    private TemplateResolver moTemplateResolver;

    public TemplateModelFactory() {
        super(XFA.TEMPLATETAG, "template", "$template");
    }

    public void applyFixups(boolean bApply) {
        this.mbApplyFixups = bApply;
    }

    @Override
    public Model createDOM(Element parent) {
        TemplateModel tm = new TemplateModel(parent.getAppModel(), null);
        ModelPeer modelPeer = new ModelPeer(parent, null, "http://www.xfa.org/schema/xfa-template/3.6/", "template", "template", null, tm);
        tm.setXmlPeer(modelPeer);
        tm.connectPeerToDocument();
        return tm;
    }

    @Override
    protected Model newModel(AppModel parent, Node prevSibling, String uri, String localName, String qName, Attributes a) {
        TemplateModel tm = new TemplateModel(parent, prevSibling, uri, qName, localName);
        tm.setXmlPeer(new ModelPeer((Element)parent.getXmlPeer(), null, uri, localName, qName, a, tm));
        tm.setDOMProperties(uri, localName, qName, null);
        if (this.moTemplateResolver != null) {
            tm.setTemplateResolver(this.moTemplateResolver);
        }
        if (this.mbApplyFixups) {
            tm.applyFixups();
        }
        if (this.mbFixupRenderCache) {
            tm.fixupRenderCache();
        }
        return tm;
    }

    @Override
    public void setOption(String optionName, String optionValue, boolean bCritical) {
        String name = optionName;
        int nPackageSeparatorOffset = optionName.indexOf(95);
        if (nPackageSeparatorOffset != -1) {
            if (nPackageSeparatorOffset == 0) {
                throw new ExFull(ResId.OptionWrongPackageException, optionName);
            }
            String packageName = optionName.substring(0, nPackageSeparatorOffset);
            String oPackageName = packageName.intern();
            if (!this.isRootName(oPackageName)) {
                throw new ExFull(ResId.OptionWrongPackageException, optionName);
            }
            name = optionName.substring(nPackageSeparatorOffset + 1);
        }
        if (name.equals("removeRenderCache")) {
            this.mbFixupRenderCache = optionValue.equals("1");
        } else {
            super.setOption(optionName, optionValue, bCritical);
        }
    }

    public void setTemplateResolver(TemplateResolver oResolver) {
        this.moTemplateResolver = oResolver;
    }
}