Project Report: fawkez

Packagesummary org.jcoderz.commons.taskdefs

org.jcoderz.commons.taskdefs.DotTask

LineHitsNoteSource
1  /*
2   * $Id: DotTask.java 1011 2008-06-16 17:57:36Z amandel $
3   *
4   * Copyright 2006, The jCoderZ.org Project. All rights reserved.
5   *
6   * Redistribution and use in source and binary forms, with or without
7   * modification, are permitted provided that the following conditions are
8   * met:
9   *
10   *    * Redistributions of source code must retain the above copyright
11   *      notice, this list of conditions and the following disclaimer.
12   *    * Redistributions in binary form must reproduce the above
13   *      copyright notice, this list of conditions and the following
14   *      disclaimer in the documentation and/or other materials
15   *      provided with the distribution.
16   *    * Neither the name of the jCoderZ.org Project nor the names of
17   *      its contributors may be used to endorse or promote products
18   *      derived from this software without specific prior written
19   *      permission.
20   *
21   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
22   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24   * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS
25   * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30   * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32   */
33  package org.jcoderz.commons.taskdefs;
34  
35  import java.io.File;
36  import java.io.IOException;
37  import java.util.Locale;
38  
39  import org.apache.tools.ant.BuildException;
40  import org.apache.tools.ant.Project;
41  import org.apache.tools.ant.Task;
42  import org.apache.tools.ant.taskdefs.Execute;
43  import org.apache.tools.ant.taskdefs.LogStreamHandler;
44  import org.apache.tools.ant.types.Commandline;
45  
46  /**
47   * Ant task for the 'dot' command from the graphviz package.
48   *
49   * @author Michael Griffel
50   */
510 public class DotTask
52        extends Task
53  {
54     private static final String DEFAULT_OUTPUT_FORMAT = "svg";
55     /** The input files. */
56     private File[] mInFiles;
57     /** The output format. */
580    private String mFormat = DEFAULT_OUTPUT_FORMAT;
59     /** terminate ant build on error. */
60     private boolean mFailOnError;
610    private final Commandline mCommand = new Commandline();
62  
63     /**
64      * Sets the XML input file that contains the document.
65      * @param f the XML input file (log message info).
66      */
67     public void setIn (File f)
68     {
690       mInFiles = new File[] {f};
70  
710    }
72  
73     /**
74      * Set the output format.
75      * @param format the output format.
76      */
77     public void setFormat (String format)
78     {
790       mFormat = format;
800    }
81  
82     /**
83      * Set whether we should fail on an error.
84      * @param b Whether we should fail on an error.
85      */
86     public void setFailonerror (boolean b)
87     {
880       mFailOnError = b;
890    }
90  
91     /**
92      * Returns the file name extension for the current output format.
93      * @return the file name extension for the current output format.
94      */
95     public String getFileExtension ()
96     {
970       return mFormat.toLowerCase(Locale.US);
98     }
99  
100     /**
101      * Execute this task.
102      *
103      * @throws BuildException An building exception occurred.
104      */
105     public void execute ()
106           throws BuildException
107     {
108        try
109        {
1100          checkAttributes();
111  
1120          mCommand.setExecutable("dot");
1130          mCommand.createArgument().setValue("-Gfontnames=svg");
1140          mCommand.createArgument().setValue("-Gcharset=UTF-8");
1150          mCommand.createArgument().setValue("-T" + mFormat);
1160(1)         mCommand.createArgument().setValue("-O");
117  
1180          for (int i = 0; i < mInFiles.length; i++)
119           {
1200              mCommand.createArgument().setValue(mInFiles[i].getAbsolutePath());
121           }
122  
1230          final Execute exe = new Execute(new LogStreamHandler(
124                 this, Project.MSG_VERBOSE, Project.MSG_WARN), null);
1250          exe.setCommandline(mCommand.getCommandline());
1260          log(mCommand.describeCommand(), Project.MSG_VERBOSE);
127           try
128           {
1290              exe.execute();
130           }
1310          catch (IOException e)
132           {
1330              throw new BuildException(e, getLocation());
1340          }
135        }
1360       catch (BuildException e)
137        {
1380          if (mFailOnError)
139           {
1400             throw e;
141           }
1420          log(e.getMessage(), Project.MSG_ERR);
1430       }
1440    }
145  
146     /**
147      * Checks the attributes provided by this class.
148      * @throws BuildException
149    */
150     private void checkAttributes ()
151           throws BuildException
152     {
1530       checkAttributeInFile();
1540    }
155  
156     private void checkAttributeInFile ()
157     {
1580       if (mInFiles == null)
159        {
1600          throw new BuildException(
161                 "Missing mandatory attribute 'in'.", getLocation());
162        }
163  
1640       for (int i = 0; i < mInFiles.length; i++)
165        {
1660           if (!mInFiles[i].exists())
167            {
1680              throw new BuildException(
169                     "Input file '" + mInFiles[i] + "' not found.",
170                     getLocation());
171            }
172         }
1730    }
174  
175      /**
176       * Set the input files.
177       *
178       * @param inFiles the input files.
179       */
180      public void setInFiles (File[] inFiles)
181      {
1820(2)        mInFiles = inFiles;
1830     }
184  
185  }

Findings in this File

c (3) Got an exception - java.lang.RuntimeException: Unable to get class information for @throws tag 'BuildException'.
i (4) DotTask.mInFiles not initialized in constructor
c (1) 116 : 0 Copied and pasted code. 232 equal tokens (70 lines) found in 2 locations. See also: org.jcoderz.commons.taskdefs.GnuplotTask:91
w (2) 182 : 0 org.jcoderz.commons.taskdefs.DotTask.setInFiles(File[]) may expose internal representation by storing an externally mutable object into DotTask.mInFiles