@Override
public ProtoNetworkDescriptor writeProtoNetwork(ProtoNetwork pn,
String protoNetworkRootPath) throws ProtoNetworkError {
if (pn == null) throw new InvalidArgument("protoNetwork is null");
CSVWriter allWriter;
String path = asPath(protoNetworkRootPath, "all.tbl");
try {
allWriter = new CSVWriter(new FileWriter(path), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
} catch (IOException e) {
final String msg = "Cannot open all tbl debug file for write";
throw new ProtoNetworkError(path, msg, e);
}
CSVWriter tdvWriter;
allWriter.writeNext(new String[] { "Document table" });
// write document table
DocumentTable dt = pn.getDocumentTable();
File dfile = new File(protoNetworkRootPath + File.separator
+ "document.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(dfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "DocumentIndex", "Name",
"Description", "Version", "Copyright", "Disclaimer",
"ContactInfo", "Authors", "Licenses");
List<DocumentHeader> dhs = dt.getDocumentHeaders();
for (int i = 0; i < dhs.size(); i++) {
DocumentHeader dh = dhs.get(i);
tdvWriter
.writeNext(new String[] {
String.valueOf(i),
dh.getName() == null ? "-" : dh.getName(),
dh.getDescription() == null ? "-" : dh
.getDescription(),
dh.getVersion() == null ? "-" : dh.getVersion(),
dh.getCopyright() == null ? "-" : dh
.getCopyright(),
dh.getDisclaimer() == null ? "-" : dh
.getDisclaimer(),
dh.getContactInfo() == null ? "-" : dh
.getContactInfo(),
dh.getAuthors() == null ? "-" : dh.getAuthors(),
dh.getLicenses() == null ? "-" : dh
.getLicenses() });
allWriter
.writeNext(new String[] {
String.valueOf(i),
dh.getName() == null ? "-" : dh.getName(),
dh.getDescription() == null ? "-" : dh
.getDescription(),
dh.getVersion() == null ? "-" : dh.getVersion(),
dh.getCopyright() == null ? "-" : dh
.getCopyright(),
dh.getDisclaimer() == null ? "-" : dh
.getDisclaimer(),
dh.getContactInfo() == null ? "-" : dh
.getContactInfo(),
dh.getAuthors() == null ? "-" : dh.getAuthors(),
dh.getLicenses() == null ? "-" : dh
.getLicenses() });
}
tdvWriter.close();
} catch (IOException e) {
final String msg = "Cannot create document file for proto-network";
throw new ProtoNetworkError(dfile.getAbsolutePath(), msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Namespace table" });
// Write namespace table
NamespaceTable nt = pn.getNamespaceTable();
File nsfile = new File(protoNetworkRootPath + File.separator
+ "namespace.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(nsfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "NamespaceIndex", "Prefix",
"ResourceLocation");
for (TableNamespace ns : nt.getNamespaces()) {
String nsp =
StringUtils.isBlank(ns.getPrefix()) ? "-" : ns
.getPrefix();
tdvWriter.writeNext(new String[] {
String.valueOf(nt.getNamespaceIndex().get(ns)),
String.valueOf(nsp),
String.valueOf(ns.getResourceLocation()) });
allWriter.writeNext(new String[] {
String.valueOf(nt.getNamespaceIndex().get(ns)),
String.valueOf(nsp),
String.valueOf(ns.getResourceLocation()) });
}
tdvWriter.close();
} catch (IOException e) {
final String msg = "Cannot create namespace file for proto-network";
final String name = nsfile.getAbsolutePath();
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Document Namespace table" });
// Write document-namespace table
path = asPath(protoNetworkRootPath, "document-namespace.tbl");
File dnsfile = new File(path);
try {
tdvWriter = new CSVWriter(new FileWriter(dnsfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "DocumentIndex", "NamespaceIndex");
Map<Integer, List<Integer>> dnsi = nt.getDocumentNamespaces();
for (final Entry<Integer, List<Integer>> e : dnsi.entrySet()) {
Integer di = e.getKey();
List<Integer> dnsl = e.getValue();
if (noItems(dnsl)) continue;
for (Integer nsi : dnsl) {
tdvWriter.writeNext(new String[] {
String.valueOf(di),
String.valueOf(nsi) });
allWriter.writeNext(new String[] {
String.valueOf(di),
String.valueOf(nsi) });
}
}
tdvWriter.close();
} catch (IOException e) {
final String name = path;
final String msg =
"Cannot create document namespace file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Parameter table" });
// write parameter table
ParameterTable parameterTable = pn.getParameterTable();
NamespaceTable nsTable = pn.getNamespaceTable();
File pfile = new File(protoNetworkRootPath + File.separator
+ "parameter.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(pfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "ParameterIndex",
"NamespaceIndex", "Value", "(Global ParameterIndex)");
for (final TableParameter parameter : parameterTable
.getTableParameters()) {
// fetch the namespace value
TableNamespace tn = parameter.getNamespace();
Integer nsIndex = nsTable.getNamespaceIndex().get(tn);
String nsValue = "-";
if (nsIndex != null) {
nsValue = String.valueOf(nsIndex);
}
if (parameterTable.getGlobalIndex().isEmpty()) {
tdvWriter.writeNext(new String[] {
String.valueOf(parameterTable
.getTableParameterIndex()
.get(parameter)),
nsValue,
parameter.getValue() });
allWriter.writeNext(new String[] {
String.valueOf(parameterTable
.getTableParameterIndex()
.get(parameter)),
nsValue,
parameter.getValue() });
} else {
Integer globalIndex = parameterTable.getGlobalIndex().get(
parameterTable.getTableParameterIndex().get(
parameter));
tdvWriter.writeNext(new String[] {
String.valueOf(parameterTable
.getTableParameterIndex().get(parameter)),
nsValue,
parameter.getValue(),
globalIndex.toString() });
allWriter.writeNext(new String[] {
String.valueOf(parameterTable
.getTableParameterIndex().get(parameter)),
nsValue,
parameter.getValue(),
globalIndex.toString() });
}
}
tdvWriter.close();
} catch (IOException e) {
final String msg = "Cannot create parameter file for proto-network";
final String name = pfile.getAbsolutePath();
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Term table" });
// write term table
TermTable termTable = pn.getTermTable();
File tfile = new File(protoNetworkRootPath + File.separator
+ "term.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(tfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "TermIndex", "Value",
"(Global TermIndex)");
List<String> termValues = termTable.getTermValues();
Map<Integer, Integer> tgi = termTable.getGlobalTermIndex();
for (int i = 0; i < termValues.size(); i++) {
if (tgi.isEmpty()) {
tdvWriter.writeNext(new String[] { String.valueOf(i),
termValues.get(i) });
allWriter.writeNext(new String[] { String.valueOf(i),
termValues.get(i) });
} else {
Integer globalIndex = tgi.get(i);
tdvWriter.writeNext(new String[] { String.valueOf(i),
termValues.get(i),
globalIndex.toString() });
allWriter.writeNext(new String[] { String.valueOf(i),
termValues.get(i),
globalIndex.toString() });
}
}
tdvWriter.close();
} catch (IOException e) {
final String msg = "Cannot create term file for proto-network";
final String name = tfile.getAbsolutePath();
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Term Parameter table" });
// write term-parameter table
TermParameterMapTable termParameterMapTable = pn
.getTermParameterMapTable();
File tpmtfile = new File(protoNetworkRootPath
+ File.separator + "term-parameter-map.tbl");
try {
tdvWriter = new CSVWriter(
new FileWriter(tpmtfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "TermIndex", "ParameterIndex",
"Ordinal");
for (final Integer termIndex : termParameterMapTable
.getTermParameterIndex().keySet()) {
List<Integer> parameterIndexes = termParameterMapTable
.getTermParameterIndex().get(termIndex);
int ord = 0;
for (Integer parameterIndex : parameterIndexes) {
tdvWriter.writeNext(new String[] {
String.valueOf(termIndex),
String.valueOf(parameterIndex),
String.valueOf(ord) });
allWriter.writeNext(new String[] {
String.valueOf(termIndex),
String.valueOf(parameterIndex),
String.valueOf(ord) });
ord++;
}
}
tdvWriter.close();
} catch (IOException e) {
final String name = tpmtfile.getAbsolutePath();
final String msg = "Cannot create term to parameter mapping file " +
"for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Statement table" });
// write statement table
StatementTable statementTable = pn.getStatementTable();
File sfile = new File(protoNetworkRootPath + File.separator
+ "statement.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(sfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "StatementIndex",
"SubjectTermIndex", "Relationship", "ObjectTermIndex",
"NestedSubjectTermIndex", "NestedRelationship",
"NestedObjectTermIndex");
List<TableStatement> statements = statementTable.getStatements();
for (int i = 0; i < statements.size(); i++) {
TableStatement statement = statements.get(i);
String si = String.valueOf(i);
if (statement.getRelationshipName() == null) {
tdvWriter.writeNext(new String[] {
si,
String.valueOf(statement.getSubjectTermId()),
"-", "-", "-", "-", "-" });
allWriter.writeNext(new String[] {
si,
String.valueOf(statement.getSubjectTermId()),
"-", "-", "-", "-", "-" });
} else if (statement.getObjectTermId() != null) {
tdvWriter.writeNext(new String[] {
si,
String.valueOf(statement.getSubjectTermId()),
statement.getRelationshipName(),
String.valueOf(statement.getObjectTermId()),
"-", "-", "-" });
allWriter.writeNext(new String[] {
si,
String.valueOf(statement.getSubjectTermId()),
statement.getRelationshipName(),
String.valueOf(statement.getObjectTermId()),
"-", "-", "-" });
} else {
tdvWriter.writeNext(new String[] {
si,
String.valueOf(statement.getSubjectTermId()),
statement.getRelationshipName(),
String.valueOf(statement.getObjectTermId()),
String.valueOf(statement.getNestedSubject()),
statement.getNestedRelationship(),
String.valueOf(statement.getNestedObject()) });
allWriter.writeNext(new String[] {
si,
String.valueOf(statement.getSubjectTermId()),
statement.getRelationshipName(),
String.valueOf(statement.getObjectTermId()),
String.valueOf(statement.getNestedSubject()),
statement.getNestedRelationship(),
String.valueOf(statement.getNestedObject()) });
}
}
tdvWriter.close();
} catch (IOException e) {
final String name = sfile.getAbsolutePath();
final String msg = "Cannot create statement file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Statement Document table" });
// Write document-statement table
path = asPath(protoNetworkRootPath, "document-statement.tbl");
File dsfile = new File(path);
try {
tdvWriter = new CSVWriter(new FileWriter(dsfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "DocumentIndex", "StatementIndex");
List<TableStatement> sts = statementTable.getStatements();
Map<Integer, Integer> dsm = statementTable.getStatementDocument();
for (int si = 0; si < sts.size(); si++) {
tdvWriter.writeNext(new String[] {
String.valueOf(dsm.get(si)),
String.valueOf(si) });
allWriter.writeNext(new String[] {
String.valueOf(dsm.get(si)),
String.valueOf(si) });
}
tdvWriter.close();
} catch (IOException e) {
final String name = path;
final String msg =
"Cannot create document statement file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Annotation Definition table" });
// Write annotation definition table
AnnotationDefinitionTable adt = pn.getAnnotationDefinitionTable();
File adfile = new File(protoNetworkRootPath + File.separator
+ "annotation-definition.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(adfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "AnnotationDefinitionIndex",
"Name", "Description", "Usage", "Domain",
"AnnotationDefinitionType");
for (final TableAnnotationDefinition ad : adt
.getAnnotationDefinitions()) {
tdvWriter
.writeNext(new String[] {
String.valueOf(adt.getDefinitionIndex().get(ad)),
ad.getName(),
ad.getDescription() == null ? "-" : ad
.getDescription(),
ad.getUsage() == null ? "-" : ad.getUsage(),
ad.getAnnotationDomain() == null ? "-" : ad
.getAnnotationDomain(),
String.valueOf(ad.getAnnotationType()) });
allWriter
.writeNext(new String[] {
String.valueOf(adt.getDefinitionIndex().get(ad)),
ad.getName(),
ad.getDescription() == null ? "-" : ad
.getDescription(),
ad.getUsage() == null ? "-" : ad.getUsage(),
ad.getAnnotationDomain() == null ? "-" : ad
.getAnnotationDomain(),
String.valueOf(ad.getAnnotationType()) });
}
tdvWriter.close();
} catch (IOException e) {
final String name = adfile.getAbsolutePath();
final String msg =
"Cannot create annotation definition file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter
.writeNext(new String[] { "Document Annotation Definition table" });
// Write document annotation definition table
path =
asPath(protoNetworkRootPath,
"document-annotation-definition.tbl");
File dadfile = new File(path);
try {
tdvWriter = new CSVWriter(new FileWriter(dadfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "DocumentIndex",
"AnnotationDefinitionIndex");
Map<Integer, Set<Integer>> dnsi = adt
.getDocumentAnnotationDefinitions();
for (final Entry<Integer, Set<Integer>> e : dnsi.entrySet()) {
Integer di = e.getKey();
Set<Integer> adl = e.getValue();
if (noItems(adl)) continue;
for (Integer adi : adl) {
tdvWriter.writeNext(new String[] {
String.valueOf(di),
String.valueOf(adi) });
allWriter.writeNext(new String[] {
String.valueOf(di),
String.valueOf(adi) });
}
}
tdvWriter.close();
} catch (IOException e) {
final String name = path;
final String msg = "Cannot create document annotation definition " +
"file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Annotation Value table" });
// Write annotation value table
AnnotationValueTable avt = pn.getAnnotationValueTable();
File avfile = new File(protoNetworkRootPath + File.separator
+ "annotation-value.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(avfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "AnnotationValueIndex",
"AnnotationDefinitionIndex", "AnnotationValue");
Map<Integer, TableAnnotationValue> annotationIndex = avt
.getIndexValue();
Set<Integer> annotationIds = annotationIndex.keySet();
for (Integer annotationId : annotationIds) {
TableAnnotationValue value = annotationIndex.get(annotationId);
tdvWriter.writeNext(new String[] {
String.valueOf(annotationId),
String.valueOf(value.getAnnotationDefinitionId()),
value.getAnnotationValue() });
allWriter.writeNext(new String[] {
String.valueOf(annotationId),
String.valueOf(value.getAnnotationDefinitionId()),
value.getAnnotationValue() });
}
tdvWriter.close();
} catch (IOException e) {
final String name = avfile.getAbsolutePath();
final String msg =
"Cannot create annotation value file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Statement Annotation Map table" });
// Write statement annotation map table
StatementAnnotationMapTable samt = pn.getStatementAnnotationMapTable();
File samtfile = new File(protoNetworkRootPath + File.separator
+ "statement-annotation-map.tbl");
try {
tdvWriter = new CSVWriter(new FileWriter(samtfile), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "StatementIndex",
"AnnotationDefinitionIndex", "AnnotationValueIndex");
for (final Map.Entry<Integer, Set<AnnotationPair>> same : samt
.getStatementAnnotationPairsIndex().entrySet()) {
Integer sid = same.getKey();
for (AnnotationPair ap : same.getValue()) {
tdvWriter.writeNext(new String[] {
String.valueOf(sid),
String.valueOf(ap.getAnnotationDefinitionId()),
String.valueOf(ap.getAnnotationValueId()) });
allWriter.writeNext(new String[] {
String.valueOf(sid),
String.valueOf(ap.getAnnotationDefinitionId()),
String.valueOf(ap.getAnnotationValueId()) });
}
}
tdvWriter.close();
} catch (IOException e) {
final String name = samtfile.getAbsolutePath();
final String msg = "Cannot create statement annotation map file " +
"for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Proto Node Table" });
// Write proto node table
final ProtoNodeTable pnt = pn.getProtoNodeTable();
final Map<Integer, Integer> eqn = pnt.getEquivalences();
File pntf = new File(asPath(protoNetworkRootPath, "proto-node.tbl"));
try {
tdvWriter = new CSVWriter(new FileWriter(pntf), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "ProtoNodeIndex", "Label",
"EquivalenceIndex");
final List<String> nodes = pnt.getProtoNodes();
int nodeId = 0;
for (int i = 0, n = nodes.size(); i < n; i++) {
String nodeidstr = String.valueOf(nodeId);
String eqidstr = String.valueOf(eqn.get(i));
tdvWriter.writeNext(new String[] {
nodeidstr,
nodes.get(i),
eqidstr });
allWriter.writeNext(new String[] {
nodeidstr,
nodes.get(i),
eqidstr });
nodeId++;
}
tdvWriter.close();
} catch (IOException e) {
final String name = pntf.getAbsolutePath();
final String msg =
"Cannot create proto node file for proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Term Proto Node Table" });
// Write term proto node table
final TermTable tt = pn.getTermTable();
File tpnf =
new File(asPath(protoNetworkRootPath, "term-proto-node.tbl"));
try {
tdvWriter = new CSVWriter(new FileWriter(tpnf), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "TermIndex", "ProtoNodeIndex");
final List<String> terms = tt.getTermValues();
final Map<Integer, Integer> visited = pnt.getTermNodeIndex();
for (int i = 0, n = terms.size(); i < n; i++) {
String nodeidstr = String.valueOf(visited.get(i));
tdvWriter.writeNext(new String[] {
String.valueOf(i),
nodeidstr });
allWriter.writeNext(new String[] {
String.valueOf(i),
nodeidstr });
}
tdvWriter.close();
} catch (IOException e) {
final String name = tpnf.getAbsolutePath();
final String msg = "Cannot create term proto node file for " +
"proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Proto Edge Table" });
// Write proto edge table
final ProtoEdgeTable pet = pn.getProtoEdgeTable();
final Map<Integer, Integer> edgeEq = pet.getEquivalences();
File petf = new File(asPath(protoNetworkRootPath, "proto-edge.tbl"));
try {
tdvWriter = new CSVWriter(new FileWriter(petf), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "ProtoEdgeIndex",
"SourceProtoNodeIndex", "Relationship",
"TargetProtoNodeIndex", "EquivalenceIndex");
final List<TableProtoEdge> edges = pet.getProtoEdges();
for (int i = 0, n = edges.size(); i < n; i++) {
final TableProtoEdge edge = edges.get(i);
final String ei = String.valueOf(i);
final String source = String.valueOf(edge.getSource());
final String rel = edge.getRel();
final String target = String.valueOf(edge.getTarget());
String eqIndex = edgeEq.get(i).toString();
tdvWriter.writeNext(new String[] { ei, source, rel, target,
eqIndex });
allWriter.writeNext(new String[] { ei, source, rel, target,
eqIndex });
}
tdvWriter.close();
} catch (IOException e) {
final String name = tpnf.getAbsolutePath();
final String msg = "Cannot create proto edge file for " +
"proto-network";
throw new ProtoNetworkError(name, msg, e);
}
allWriter.writeNext(new String[0]);
allWriter.writeNext(new String[] { "Proto Edge Statement Table" });
// Write proto edge statement table
final List<TableProtoEdge> edges = pet.getProtoEdges();
File spet =
new File(asPath(protoNetworkRootPath,
"proto-edge-statement.tbl"));
try {
tdvWriter = new CSVWriter(new FileWriter(spet), '\t',
CSVWriter.NO_QUOTE_CHARACTER);
writeHeader(tdvWriter, allWriter, "ProtoEdgeIndex",
"StatementIndex");
final Map<Integer, Set<Integer>> edgeStmts =
pet.getEdgeStatements();
for (int i = 0, n = edges.size(); i < n; i++) {
final String ei = String.valueOf(i);
final Set<Integer> stmts = edgeStmts.get(i);
if (hasItems(stmts)) {
for (final Integer stmt : stmts) {
final String stmtstring = String.valueOf(stmt);
tdvWriter.writeNext(new String[] { ei, stmtstring });
allWriter.writeNext(new String[] { ei, stmtstring });
}
}
}
tdvWriter.close();
} catch (IOException e) {
final String name = tpnf.getAbsolutePath();
final String msg = "Cannot create proto edge file for " +
"proto-network";
throw new ProtoNetworkError(name, msg, e);