1 /* 2 * Copyright (c) 2003-2008, by Henrik Arro and Contributors 3 * 4 * This file is part of JSeq, a tool to automatically create 5 * sequence diagrams by tracing program execution. 6 * 7 * See <http://jseq.sourceforge.net> for more information. 8 * 9 * JSeq is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of 12 * the License, or (at your option) any later version. 13 * 14 * JSeq is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public License 20 * along with JSeq. If not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 package th.co.edge.jseq.sdedit; 24 25 import java.io.File; 26 import java.io.IOException; 27 28 import net.sf.sdedit.Main; 29 import th.co.edge.jseq.ActivationList; 30 import th.co.edge.jseq.Diagram; 31 32 /** 33 * An <code>SdeditPngDiagram</code> is a <code>Diagram</code> that can be 34 * used to generate sequence diagrams in PNG format, using the <a 35 * href="http://sdedit.sourceforge.net/" target="new">Quick Sequence Diagram 36 * Editor</a> to create the image. 37 * 38 * @author jacek.ratzinger 39 */ 40 public class SdeditPngDiagram implements Diagram { 41 42 private static final String DEFAULT_PNG_FILE_EXTENSION = ".png"; 43 44 private final SdeditTextDiagram textDiagram; 45 46 /** 47 * Creates a new <code>SdeditPngDiagram</code>, using the given 48 * <code>ActivationList</code> as the basis for the sequence diagram. 49 * 50 * @param activationList 51 * a list of root <code>Activation</code>s to use when 52 * generating the sequence diagram 53 */ 54 public SdeditPngDiagram(ActivationList activationList) { 55 this.textDiagram = new SdeditTextDiagram(activationList); 56 } 57 58 /** 59 * Creates a sequence diagram and writes it to file as a PNG image. 60 * 61 * @param pngFile 62 * the <code>File</code> to write to 63 * 64 * @throws IOException 65 * if something went wrong when creating or saving the diagram 66 */ 67 @Override 68 public void save(File pngFile) throws IOException { 69 String outputFilePrefix = 70 pngFile.getName().substring( 71 0, 72 pngFile.getName().length() - 73 DEFAULT_PNG_FILE_EXTENSION.length()); 74 File tempTextFile = 75 new File(pngFile.getParentFile(), outputFilePrefix + ".txt"); 76 textDiagram.save(tempTextFile); 77 String[] sdeditArgs = 78 { "-t", "png", "-o", pngFile.getAbsolutePath(), 79 tempTextFile.getAbsolutePath() }; 80 try { 81 Main.main(sdeditArgs); 82 } catch (Exception e) { 83 throw new IOException(e); 84 } 85 } 86 87 }