io.legaldocml.akn.element.SubFlowStructure Maven / Gradle / Ivy
package io.legaldocml.akn.element;
import com.google.common.collect.ImmutableMap;
import io.legaldocml.akn.container.BlockElementsContainer;
import io.legaldocml.akn.container.HierElementsContainer;
import io.legaldocml.akn.group.ANblock;
import io.legaldocml.akn.group.ANhier;
import io.legaldocml.akn.group.BlockElements;
import io.legaldocml.akn.group.HTMLblock;
import io.legaldocml.akn.group.HierElements;
import io.legaldocml.akn.util.AknList;
import io.legaldocml.akn.util.XmlReaderHelper;
import io.legaldocml.akn.visitor.AknVisitor;
import io.legaldocml.io.XmlReader;
import io.legaldocml.io.XmlWriter;
import java.io.IOException;
import java.util.function.Supplier;
import static io.legaldocml.akn.AknElements.CITATION;
import static io.legaldocml.akn.AknElements.CITATIONS;
import static io.legaldocml.akn.AknElements.COMPONENT_REF;
import static io.legaldocml.akn.AknElements.CONTENT;
import static io.legaldocml.akn.AknElements.DOCUMENT_REF;
import static io.legaldocml.akn.AknElements.FORMULA;
import static io.legaldocml.akn.AknElements.HEADING;
import static io.legaldocml.akn.AknElements.INTRO;
import static io.legaldocml.akn.AknElements.LONG_TITLE;
import static io.legaldocml.akn.AknElements.NUM;
import static io.legaldocml.akn.AknElements.RECITAL;
import static io.legaldocml.akn.AknElements.RECITALS;
import static io.legaldocml.akn.AknElements.SUB_HEADING;
import static io.legaldocml.akn.AknElements.TD;
import static io.legaldocml.akn.AknElements.TH;
import static io.legaldocml.akn.AknElements.TR;
import static io.legaldocml.akn.AknElements.WRAP_UP;
import static io.legaldocml.akn.element.Groups.ANcontainers;
import static io.legaldocml.akn.element.Groups.blockElements;
import static io.legaldocml.akn.element.Groups.containerElements;
import static io.legaldocml.akn.element.Groups.convertSuper;
import static io.legaldocml.akn.element.Groups.hierElements;
import static java.util.Objects.requireNonNull;
/**
* The type subFlowStructure specifies the overall content model of the elements that are subFlows.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* @author Jacques Militello
*/
public abstract class SubFlowStructure extends CoreReqImpl implements BlockElementsContainer, HierElementsContainer {
private static final ImmutableMap> ELEMS;
static {
ELEMS = ImmutableMap.>builder()
.putAll(convertSuper(blockElements()))
.putAll(convertSuper(containerElements()))
.put(TR, Tr::new)
.put(TH, Th::new)
.put(TD, Td::new)
.putAll(convertSuper(hierElements()))
.put(CONTENT, Content::new)
.putAll(convertSuper(ANcontainers()))
.put(FORMULA, Formula::new)
.put(RECITALS, Recitals::new)
.put(CITATIONS, Citations::new)
.put(LONG_TITLE, LongTitle::new)
.put(RECITAL, Recital::new)
.put(CITATION, Citation::new)
.put(COMPONENT_REF, ComponentRef::new)
.put(DOCUMENT_REF, DocumentRef::new)
.put(INTRO, Intro::new)
.put(WRAP_UP, WrapUp::new)
.put(HEADING, Heading::new)
.put(SUB_HEADING, Subheading::new)
.put(NUM, Num::new)
.build();
}
// Mandatory (min 1).
private final AknList elems = new AknList<>(new SubFlowStructureElement[8]);
public final void add(SubFlowStructureElement element) {
this.elems.add(element);
}
/**
* {@inheritDoc}
*/
@Override
public void add(BlockElements elements) {
this.elems.add(requireNonNull(elements));
}
/**
* {@inheritDoc}
*/
@Override
public void add(HTMLblock block) {
this.elems.add(requireNonNull(block));
}
/**
* {@inheritDoc}
*/
@Override
public void add(HierElements hier) {
this.elems.add(requireNonNull(hier));
}
/**
* {@inheritDoc}
*/
@Override
public void add(ANhier hier) {
this.elems.add(requireNonNull(hier));
}
/**
* {@inheritDoc}
*/
@Override
public void add(ANblock block) {
this.elems.add(requireNonNull(block));
}
/**
* {@inheritDoc}
*/
@Override
public void read(XmlReader reader) {
super.read(reader);
XmlReaderHelper.read(reader, elems, ELEMS);
}
/**
* {@inheritDoc}
*/
@Override
public void write(XmlWriter writer) throws IOException {
super.write(writer);
this.elems.write(writer);
}
/**
* {@inheritDoc}
*/
@Override
public void accept(AknVisitor visitor) {
this.elems.accept(visitor);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy