/****************************************************************************** * Copyright (c) 2009 - 2015 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *****************************************************************************/ /** * */ package com.ibm.wala.memsat.viz; import java.util.Set; import com.ibm.wala.memsat.translation.Translation; import com.ibm.wala.memsat.translation.TranslationWarning; import com.ibm.wala.memsat.translation.concurrent.ConcurrentTranslation; import com.ibm.wala.memsat.translation.sequential.SequentialTranslation; import com.ibm.wala.util.warnings.Warning; import kodkod.engine.Evaluator; import kodkod.engine.Solution; /** * Displays the results of a Miniatur analysis as a human-readable string. * @specfield translation: T * @specfield solution: Solution * @invariant solution.formula = translation.formula && solution.bounds = translation.bounds * @author etorlak */ public abstract class StringVisualizer<T extends Translation<?>> implements Visualizer<String> { final T translation; final Evaluator eval; /** * Constructs a new string visualizer from the given translation and solution. * @requires solution.instance!=null * @requires solution.formula = translation.formula && solution.bounds = translation.bounds */ StringVisualizer(T translation, Solution solution) { this.translation = translation; this.eval = new Evaluator(solution.instance(), translation.factory().options().kodkodOptions()); } /** * Returns a string visualizer for the given sequential translation and solution. * @return a string visualizer for the given sequential translation and solution. */ public static Visualizer<String> viz(SequentialTranslation translation, Solution sol) { return sol.instance()==null ? empty() : new SequentialStringVisualizer(translation, sol); } /** * Returns a string visualizer for the given concurrent translation and solution. * @return a string visualizer for the given concurrent translation and solution. */ public static Visualizer<String> viz(ConcurrentTranslation translation, Solution sol) { return sol.instance()==null ? empty() : new ConcurrentStringVisualizer(translation, sol); } private static Visualizer<String> empty() { return new Visualizer<String>() { public String visualize() { return ""; } }; } /** * {@inheritDoc} * @see com.ibm.wala.memsat.viz.Visualizer#visualize() */ public abstract String visualize(); // /** // * Appends a visualization header to the given buffer. // */ // final void preamble(Appendable buffer) { // // } /** * Appends a string representation of the given warning set to the specified * builder or leaves the buffer unchanged if the set is empty. */ final void warnings(StringBuilder str, Set<TranslationWarning> warnings) { if (!warnings.isEmpty()) { str.append("warnings:\n"); for(Warning w : warnings) { str.append(" "+w+"\n"); } } } }