/******************************************************************************* * Copyright 2012 Pearson Education * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package org.semantictools.frame.api; import java.io.PrintWriter; import java.util.Collections; import java.util.List; import org.semantictools.context.renderer.model.Container; import org.semantictools.context.renderer.model.JsonContext; import org.semantictools.context.renderer.model.TermInfo; import org.semantictools.context.renderer.model.TermValue; public class ContextWriter { private int tabSize = 2; public void writeContext(PrintWriter writer, JsonContext context) { writer.println("{"); int indent = tabSize; beginObject(writer, indent, "@context"); indent += tabSize; writeTerms(writer, indent, context); writer.println(); indent -= tabSize; endObject(writer, indent); writer.println(","); writer.print(" \"@id\" : \""); writer.print(context.getContextURI()); writer.println("\""); writer.println("}"); } private void writeTerms(PrintWriter writer, int indent, JsonContext context) { List<TermInfo> list = context.getTerms(); Collections.sort(list); String newline = "\n"; for (TermInfo term : list) { writer.print(newline); String name = term.getTermName(); if (!term.hasObjectValue()) { writeProperty(writer, indent, name, term.getIri()); } else { beginObject(writer, indent, name); indent += tabSize; TermValue value = term.getObjectValue(); writer.println(); writeProperty(writer, indent, "@id", value.getId()); if (value.getType() != null) { writer.println(","); writeProperty(writer, indent, "@type", value.getType()); } if (value.getContainer() == Container.LIST) { writer.println(","); writeProperty(writer, indent, "@container", "@list"); } Integer minCardinality = value.getMinCardinality(); if (minCardinality != null) { writer.println(","); writeProperty(writer, indent, "@minCardinality", minCardinality.toString()); } indent -= tabSize; writer.println(); endObject(writer, indent); } newline = ",\n"; } } private void beginObject(PrintWriter writer, int indent, String name) { for (int i=0; i<indent; i++) { writer.print(' '); } writer.print('"'); writer.print(name); writer.print("\" : {"); } private void endObject(PrintWriter writer, int indent) { for (int i=0; i<indent; i++) { writer.print(' '); } writer.print("}"); } private void writeProperty(PrintWriter writer, int indent, String name, String value) { for (int i=0; i<indent; i++) { writer.print(' '); } writer.print('"'); writer.print(name); writer.print("\" : \""); writer.print(value); writer.print('"'); } }