docletとpoiを使ってみる
以前のテストプチフレームワークづくりの続き。
テスト結果を比較する際に、期待する結果を記述するExcelファイルの作成を支援するツール。(あくまでベース)
こんな感じかな。
import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import com.sun.javadoc.ClassDoc; import com.sun.javadoc.MethodDoc; import com.sun.javadoc.RootDoc; public class CreateExceptSheet { enum Type { JAVA_DOC, FIELD_NAME } /** * @param root * @return */ public static boolean start(RootDoc root) { try { CreateExceptSheet ces = new CreateExceptSheet(); List<Map<Type, String>> column = ces.getColumn(root); ces.createXlsFile(column); return true; } catch (Exception e) { return false; } } /** * @param root * @return */ private List<Map<Type, String>> getColumn(RootDoc root) { List<Map<Type, String>> ret = new ArrayList<Map<Type, String>>(); for (ClassDoc clazz : root.classes()) { for (MethodDoc method : clazz.methods()) { if (method.name().matches("^get.+$")) { Map<Type, String> entry = new HashMap<Type, String>(); entry.put( Type.FIELD_NAME, method.name().replace("get","") ); entry.put( Type.JAVA_DOC, method.tags("@return")[0].text() ); ret.add(entry); } } } return ret; } /** * @param column * @throws IOException */ private void createXlsFile(List<Map<Type, String>> column) throws IOException { OutputStream xlsFile = null; try { HSSFWorkbook workBook = new HSSFWorkbook(); HSSFSheet sheet = workBook.createSheet("sample"); HSSFCellStyle style = createCellStyle(workBook); int rowCount = 0; for (Type key : Type.values()) { HSSFRow row = sheet.createRow(rowCount++); int cellCount = 0; for (Map<Type, String> entry : column) { HSSFCell cell = row.createCell(cellCount++); cell.setCellStyle(style); cell.setCellValue(entry.get(key)); } } // sheet.createFreezePane(0, 0, 0, 1); xlsFile = new FileOutputStream("except.xls"); workBook.write(xlsFile); } finally { if (xlsFile != null) { xlsFile.close(); } } } /** * @param workBook * @return */ private HSSFCellStyle createCellStyle(HSSFWorkbook workBook) { HSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 11); font.setFontName("MS Pゴシック"); HSSFCellStyle style = workBook.createCellStyle(); style.setFont(font); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBottomBorderColor(HSSFColor.BLACK.index); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setLeftBorderColor(HSSFColor.BLACK.index); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setRightBorderColor(HSSFColor.BLACK.index); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setTopBorderColor(HSSFColor.BLACK.index); style.setFillBackgroundColor(HSSFColor.BLUE.index); return style; } }