001 package jp.osdl.jbento2.chart; 002 003 import java.awt.Color; 004 import java.io.File; 005 import java.io.IOException; 006 007 008 import org.jfree.chart.ChartUtilities; 009 import org.jfree.chart.JFreeChart; 010 import org.jfree.chart.plot.PlotOrientation; 011 import org.jfree.data.general.AbstractDataset; 012 013 public class ChartGenerator { 014 015 private File src; 016 017 private File dest; 018 019 private String postfix; 020 021 private String title; 022 023 private String xlabel; 024 025 private String ylabel; 026 027 private int width = 320; 028 029 private int height = 240; 030 031 private long xMin = 0; 032 033 private long xMax = 0; 034 035 private long yMin = 0; 036 037 private long yMax = 0; 038 039 private boolean shape = true; 040 041 private String[] categories = null; 042 043 private String endOfData = "TOTAL"; 044 045 private ChartType chartType = null; 046 047 private DataSetBuilder dsBuilder = null; 048 049 private boolean renew = false; 050 051 /** 052 * Execute 053 * 054 * @throws IOException 055 * thrown if error occurred 056 */ 057 public void execute() throws IOException { 058 059 checkStatus(); 060 061 if (!renew && getSrc().lastModified() <= getDest().lastModified()) { 062 return; 063 } 064 065 dsBuilder.setCategories(categories); 066 dsBuilder.setEndOfData(endOfData); 067 068 AbstractDataset dataset = dsBuilder.createDataSet(getSrc()); 069 070 JFreeChart chart = chartType.getChart(getTitle(), getXlabel(), 071 getYlabel(), getXMin(), getXMax(), getYMin(), getYMax(), 072 dataset, PlotOrientation.VERTICAL, true, true, false, 073 getShape()); 074 075 chart.setBackgroundPaint(Color.WHITE); 076 077 ChartUtilities 078 .saveChartAsPNG(getDest(), chart, getWidth(), getHeight()); 079 080 // System.out.println(" generated chart " + getDest()); 081 } 082 083 private void checkStatus() { 084 if (getSrc() == null) { 085 throw new IllegalStateException("src is null"); 086 } 087 if (getChartType() == null) { 088 throw new IllegalStateException("chartType is null"); 089 } 090 if (getDsBuilder() == null) { 091 throw new IllegalStateException("dsBuilder is null"); 092 } 093 if (getDest() == null) { 094 String srcName = getSrc().getName(); 095 StringBuffer sb = new StringBuffer(); 096 sb.append(srcName.substring(0, srcName.lastIndexOf('.'))); 097 if (getPostfix() != null) { 098 sb.append(getPostfix()); 099 } 100 sb.append(".png"); 101 File dest = new File(getSrc().getParent(), sb.toString()); 102 setDest(dest); 103 } 104 } 105 106 /** 107 * Gets the value of src 108 * 109 * @return the value of src 110 */ 111 public File getSrc() { 112 return this.src; 113 } 114 115 /** 116 * Sets the value of src 117 * 118 * @param argSrc 119 * Value to assign to this.src 120 */ 121 public void setSrc(File argSrc) { 122 this.src = argSrc; 123 } 124 125 /** 126 * Gets the value of dest 127 * 128 * @return the value of dest 129 */ 130 public File getDest() { 131 return this.dest; 132 } 133 134 /** 135 * Sets the value of dest 136 * 137 * @param argDest 138 * Value to assign to this.dest 139 */ 140 public void setDest(File argDest) { 141 this.dest = argDest; 142 } 143 144 /** 145 * Gets the value of title 146 * 147 * @return the value of title 148 */ 149 public String getTitle() { 150 return this.title; 151 } 152 153 /** 154 * Sets the value of title 155 * 156 * @param argTitle 157 * Value to assign to this.title 158 */ 159 public void setTitle(String argTitle) { 160 this.title = argTitle; 161 } 162 163 /** 164 * Gets the value of xlabel 165 * 166 * @return the value of xlabel 167 */ 168 public String getXlabel() { 169 return this.xlabel; 170 } 171 172 /** 173 * Sets the value of xlabel 174 * 175 * @param argXlabel 176 * Value to assign to this.xlabel 177 */ 178 public void setXlabel(String argXlabel) { 179 this.xlabel = argXlabel; 180 } 181 182 /** 183 * Gets the value of ylabel 184 * 185 * @return the value of ylabel 186 */ 187 public String getYlabel() { 188 return this.ylabel; 189 } 190 191 /** 192 * Sets the value of ylabel 193 * 194 * @param argYlabel 195 * Value to assign to this.ylabel 196 */ 197 public void setYlabel(String argYlabel) { 198 this.ylabel = argYlabel; 199 } 200 201 /** 202 * Gets the value of width 203 * 204 * @return the value of width 205 */ 206 public int getWidth() { 207 return this.width; 208 } 209 210 /** 211 * Sets the value of width 212 * 213 * @param argWidth 214 * Value to assign to this.width 215 */ 216 public void setWidth(int argWidth) { 217 this.width = argWidth; 218 } 219 220 /** 221 * Gets the value of height 222 * 223 * @return the value of height 224 */ 225 public int getHeight() { 226 return this.height; 227 } 228 229 /** 230 * Sets the value of height 231 * 232 * @param argHeight 233 * Value to assign to this.height 234 */ 235 public void setHeight(int argHeight) { 236 this.height = argHeight; 237 } 238 239 /** 240 * Gets the value of ymax 241 * 242 * @return ymax 243 */ 244 public long getYMax() { 245 return yMax; 246 } 247 248 /** 249 * Sets the value of ymax 250 * 251 * @param ymax 252 */ 253 public void setYMax(long ymax) { 254 this.yMax = ymax; 255 } 256 257 /** 258 * Gets the value of shape 259 * 260 * @return shape 261 */ 262 public boolean getShape() { 263 return shape; 264 } 265 266 public void setShape(boolean shape) { 267 this.shape = shape; 268 } 269 270 public String[] getCategories() { 271 return categories; 272 } 273 274 public void setCategories(String[] categories) { 275 this.categories = categories; 276 } 277 278 public String getEndOfData() { 279 return endOfData; 280 } 281 282 public void setEndOfData(String endOfData) { 283 this.endOfData = endOfData; 284 } 285 286 public long getXMax() { 287 return xMax; 288 } 289 290 public void setXMax(long max) { 291 xMax = max; 292 } 293 294 public ChartType getChartType() { 295 return chartType; 296 } 297 298 public void setChartType(ChartType chartType) { 299 this.chartType = chartType; 300 } 301 302 public DataSetBuilder getDsBuilder() { 303 return dsBuilder; 304 } 305 306 public void setDsBuilder(DataSetBuilder dsBuilder) { 307 this.dsBuilder = dsBuilder; 308 } 309 310 public String getPostfix() { 311 return postfix; 312 } 313 314 public void setPostfix(String postfix) { 315 this.postfix = postfix; 316 } 317 318 public boolean isRenew() { 319 return renew; 320 } 321 322 public void setRenew(boolean renew) { 323 this.renew = renew; 324 } 325 326 public long getXMin() { 327 return xMin; 328 } 329 330 public void setXMin(long min) { 331 xMin = min; 332 } 333 334 public long getYMin() { 335 return yMin; 336 } 337 338 public void setYMin(long min) { 339 yMin = min; 340 } 341 342 }