/* * CCVisu is a tool for visual graph clustering * and general force-directed graph layout. * This file is part of CCVisu. * * Copyright (C) 2005-2012 Dirk Beyer * * CCVisu is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * CCVisu is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with CCVisu; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Please find the GNU Lesser General Public License in file * license_lgpl.txt or http://www.gnu.org/licenses/lgpl.txt * * Dirk Beyer (firstname.lastname@uni-passau.de) * University of Passau, Bavaria, Germany */ package org.sosy_lab.ccvisu.readers; import java.awt.Color; import java.io.BufferedReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.sosy_lab.ccvisu.Options.Verbosity; import org.sosy_lab.ccvisu.graph.GraphData; import org.sosy_lab.ccvisu.graph.GraphVertex; import org.sosy_lab.ccvisu.graph.NameVisibility; import org.sosy_lab.ccvisu.graph.Position; import org.sosy_lab.ccvisu.graph.Relation; import org.sosy_lab.ccvisu.graph.Tuple; /** * Reader for layouts in text format. */ public class ReaderDataLayoutLAY extends ReaderData { /** * Constructor. * @param reader Stream reader object. */ public ReaderDataLayoutLAY(BufferedReader reader, Verbosity verbosity) { super(reader, verbosity); } /** * Reads the layout data from stream reader <code>in</code>, in text format LAY. * @param graph <code>GraphData</code> object to store the layout data in. */ @Override public void read(GraphData graph) { List<GraphVertex> vertices = new ArrayList<GraphVertex>(); ReaderDataGraphRSF rsfReader = new ReaderDataGraphRSF(reader, verbosity); Relation layout = rsfReader.readTuples(); for (Tuple tuple : layout) { // provides backwards compatibility List<String> vertex = new ArrayList<String>(); vertex.add(tuple.getRelationName()); vertex.addAll(tuple.getTupleElements()); if (vertex.size() < 6) { System.err.println("RSF reading problem. Following format is expected:"); System.err.println(" LAY <x-pos_float> <y-pos_float> <z-pos_float> " + "<edge-degree_int> <vertex-name_string> [<rgb-color_int>] " + "[<showName_bool>]"); } Iterator<String> it = vertex.iterator(); if (tuple.getRelationName().equals("LAY")) { // To handle old LAY files without the 'LAY' as relation name. // 'vertex.get(0)' contains actually the x coordinate. it.next(); } float xValue = Float.parseFloat(it.next()); float yValue = Float.parseFloat(it.next()); float zValue = Float.parseFloat(it.next()); float degree = Float.parseFloat(it.next()); String name = it.next(); Position newPos = new Position(xValue, yValue, zValue); GraphVertex newVertex = new GraphVertex(name, newPos, degree); // optional: color if (it.hasNext()) { newVertex.setColor(new Color(Integer.parseInt(it.next()))); } // optional: show label if (it.hasNext()) { boolean showVertexLabel = Boolean.valueOf(it.next()).booleanValue(); newVertex.setShowName(NameVisibility.Priority.STARTUP, showVertexLabel); } vertices.add(newVertex); } graph.setVertices(vertices); } }