package io.trygvis.container.compiler; import io.trygvis.container.compiler.model.TypeRef; import io.trygvis.persistence.EntityMirror; import io.trygvis.persistence.SequenceMirror; import javax.lang.model.element.Element; import java.util.Map; import java.util.TreeMap; public class SqlUnitModel { private Map entities = new TreeMap<>(); private Map entityElements = new TreeMap<>(); private Map sequences = new TreeMap<>(); private Map sequenceElements = new TreeMap<>(); private String packageName; public String getPackageName() { if (packageName == null) { throw new InternalErrorException("packageName is not set yet."); } return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } // ----------------------------------------------------------------------- // Entity Mirrors // ----------------------------------------------------------------------- public SqlUnitModel add(EntityMirror entity, Element element) { entities.put(entity.type, entity); entityElements.put(entity, element); return this; } public SqlUnitModel add(EntityMirror... entities) { for (EntityMirror entity : entities) { this.entities.put(entity.type, entity); } return this; } public EntityMirror get(TypeRef type) { EntityMirror entity = entities.get(type); if (entity == null) { throw new InternalErrorException("Could not find entity for " + type.fqName); } return entity; } public Map getEntities() { return entities; } public Element element(EntityMirror entity) { return entityElements.get(entity); } // ----------------------------------------------------------------------- // Sequences // ----------------------------------------------------------------------- public SqlUnitModel add(SequenceMirror sequence, Element element) { sequences.put(sequence.name, sequence); sequenceElements.put(sequence, element); return this; } public SqlUnitModel add(SequenceMirror... sequenceMirrors) { for (SequenceMirror sequenceMirror : sequenceMirrors) { this.sequences.put(sequenceMirror.name, sequenceMirror); } return this; } public SequenceMirror getDefaultSequence() { switch (sequences.size()) { case 1: return sequences.values().iterator().next(); case 0: throw new CompilerException("No sequenced defined"); default: throw new CompilerException("More than one sequence defined, the field must specify which sequence to use with @SequenceGenerator"); } } public SequenceMirror getSequence(String name) { SequenceMirror sequence = sequences.get(name); if (sequence == null) { throw new CompilerException("Could not find sequence: " + name); } return sequence; } public Map getSequences() { return sequences; } public Element element(SequenceMirror sequence) { return sequenceElements.get(sequence); } }