package org.aksw.sparqlify.core.domain.input;
import java.util.ArrayList;
import java.util.List;
import org.apache.jena.atlas.io.IndentedWriter;
/**
* Interface for nodes in the mapping hierarchy
*
* @author raven
*
*/
interface MappingMember {
Mapping asSingle();
MappingUnion asUnion();
}
/**
* Leaf nodes in the tree
* @author raven
*
*/
class MappingMemberAtomic {
private Mapping mapping;
}
abstract class MappingMemberUnionBase
implements MappingMember
{
@Override
public Mapping asSingle() {
throw new RuntimeException("This is the wrong sub class");
}
}
/**
* A union of mappings.
* Supports (sub)grouping and ordering.
*
*
*
*
* @author raven
*
*/
public class MappingUnion
extends MappingMemberUnionBase
implements Indentable
{
//private int order; // < 0: desc, 0: no order, > 0 asc
//private NavigableMap<Object, MappingMember> keyToMember;
//private List<K> memberOrder = null;
private List<Mapping> mappings = new ArrayList<Mapping>();
public MappingUnion() {
}
public MappingUnion(List<Mapping> mappings) {
this.mappings = mappings;
}
@Override
public MappingUnion asUnion() {
return this;
}
public List<Mapping> getMappings() {
return mappings;
}
public void add(Mapping mapping) {
this.mappings.add(mapping);
}
@Override
public void asString(IndentedWriter writer) {
writer.println("--- Begin of Mappings ---");
for(int i = 0; i < mappings.size(); ++i) {
Mapping mapping = mappings.get(i);
writer.println("#" + i);
writer.incIndent();
mapping.getVarDefinition().toPrettyString();
writer.decIndent();
}
writer.println("--- End of Mappings ---");
}
@Override
public String toString() {
return IndentableUtils.toString(this);
}
}