/**
  * Write a graph to a output stream.
  *
  * @param lattice a concept lattice to write
  * @param file a file
  * @throws IOException When an IOException occurs
  */
 public void write(ConceptLattice lattice, BufferedWriter file) throws IOException {
   file.write("digraph G {\n");
   file.write("Graph [rankdir=BT]\n");
   StringBuffer nodes = new StringBuffer();
   StringBuffer edges = new StringBuffer();
   for (Node node : lattice.getNodes()) {
     Concept concept = (Concept) node;
     String dot = concept.getIdentifier() + " [label=\" ";
     String tmp = "";
     if (concept.hasSetA()) {
       tmp += concept.getSetA();
     }
     if (concept.hasSetA() && concept.hasSetB()) {
       tmp += "\\n";
     }
     if (concept.hasSetB()) {
       tmp += concept.getSetB();
     }
     StringTokenizer st = new StringTokenizer(tmp, "\"");
     while (st.hasMoreTokens()) {
       dot += st.nextToken();
     }
     dot += "\"]";
     nodes.append(dot).append("\n");
   }
   for (Edge edge : lattice.getEdges()) {
     String dot = edge.getFrom().getIdentifier() + "->" + edge.getTo().getIdentifier();
     if (edge.hasContent()) {
       dot = dot + " [" + "label=\"";
       StringTokenizer tokenizer = new StringTokenizer(edge.getContent().toString(), "\"");
       while (tokenizer.hasMoreTokens()) {
         dot += tokenizer.nextToken();
       }
       dot = dot + "\"]";
     }
     edges.append(dot).append("\n");
   }
   file.write(nodes.toString());
   file.write(edges.toString());
   file.write("}");
 }