001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.plugin.table; 017 018 import java.io.File; 019 import java.util.Locale; 020 import java.util.Map ; 021 import java.util.LinkedHashMap ; 022 023 import org.opengion.hayabusa.common.HybsSystemException; 024 import org.opengion.hayabusa.common.HybsSystem; 025 import org.opengion.hayabusa.db.AbstractTableFilter; 026 import org.opengion.hayabusa.db.DBTableModel; 027 028 import org.opengion.fukurou.util.ErrorMessage; 029 import org.opengion.fukurou.util.StringUtil; 030 import org.opengion.fukurou.util.ImageResizer; 031 032 /** 033 * TableFilter_THUMBNAIL は、TableFilter インターフェースを継承した、DBTableModel 処?の 034 * 実?ラスです? 035 * 036 * ここでは、オリジナルファイルのサ?イルファイルを作?します? 037 * keys と vals に?する?を以下に示します? 038 * 039 * <table border="1" frame="box" rules="all" > 040 * <caption>keys と vals に?する?</caption> 041 * <tr><th>KEY </th><th>VAL </th><th>(??) </th><th>初期値 </th><th>解説 </th></tr> 042 * <tr><td>PATH_CLM </td><td>?ァイルのPATHカラ?D </td><td>?? </td><td> </td><td>?ァイルのコン?ストパスが登録されて?カラ?D </td></tr> 043 * <tr><td>FILE_CLM </td><td>?ァイルのFILEカラ?D </td><td>?? </td><td> </td><td>?ァイルのファイル名が登録されて?カラ?D </td></tr> 044 * <tr><td>THUMB_CLM </td><td>サ?イルのカラ?D </td><td> </td><td> </td><td>サ?イルのPATH/FILEが登録、また?書き戻し用のカラ?D </td></tr> 045 * <tr><td>THUMB_DIR </td><td>サ?イルの管?ォル? </td><td> </td><td>_thumb/</td><td>サ?イルを作?する中間管?ォル? </td></tr> 046 * <tr><td>THUMB_SUFIX</td><td>サ?イルの拡張? </td><td> </td><td>AUTO </td><td>サ?イルの拡張子を?します?AUTOは、?のままです? </td></tr> 047 * <tr><td>OVERWRITE </td><td>上書きするかど? </td><td> </td><td>false </td><td>サ?イルを作?する時?上書きするかど?を指定します? </td></tr> 048 * <tr><td>MAX_SIZE </td><td>サ?イルの?ピクセル数 </td><td> </td><td>128 </td><td>サ?イルを作?する時?画像ファイルの大きさ。比率はキープされます? </td></tr> 049 * </table> 050 * 051 * 【解説? 052 * ?.PATH_CLM ??FILE_CLMのカラ??の値が??ァイルのコン?ストパス以下?ファイルのアドレスになります? 053 * ?.サ?イルは通常、?フォル?管?ォル?作?し?そ?下に、?ファイルと同じ名前のサ?イルファイルを作?します? 054 * つまり?PATH_CLM ??THUMB_DIR ??FILE_CLM ??拡張子が、サ?イルのファイル名になります? 055 * ?.THUMB_SUFIX を指定した?合?、サ?イルの拡張子を変更できます?初期値は、AUTOです? 056 * AUTOの場合?、?ファイルと同じ拡張子が使われます?自??する?合?、拡張子違???ァイルがあれ?重?ます?で注意が?です? 057 * ?.サ?イルを作?できるのは、bmp/jpeg/png/gif/tif ?です?それ以外?ファイルにつ?は、ICONレン?ー等を使用して、??サ?イル表示するようにして下さ?? 058 * ただし???は、xls/ppt/doc/pdf などの主要なファイルフォーマット?サ?イルは作?した??て?す? 059 * ?.THUMB_CLM にサ?イルのファイル名が記述されて?場合?そ?名前でサ?イルを作?します?こ?とき?OVERWRITE=true の場合?、既存ファイルの有無に関係な? 060 * 上書き(?作??されます?OVERWRITE=false(初期値)の場合?、すでに存在して?ば、そのままとします? 061 * ?.THUMB_CLM にサ?イルのファイル名が記述されて???合?、標準?ファイル名でサ?イルを作?して、THUMB_CLMカラ?書き戻します? 062 * こ?場合?既存ファイルの有無に関係なく?上書き(?作??されます? 063 * ?.THUMB_CLM が指定されて???合?、カラ?書き戻し??行いません??.と同じで、書き戻しを行いません? 064 * ?.MAX_SIZE は、サ?イルを作?する場合?縦、横の?ピクセルに、縮小されます?比率は変わりません。これ?物?なサ?イルファイルのサイズです? 065 * 066 * なお?ドキュメント管?で、?動スキャン取込みで、ファイル?ォル??先?に、アン??バ?がつ??場合?、スキャン対象から外します? 067 * ドキュメントシス?から見た場合??しファイルの扱?す?サ?イルも??ォルトでは、アン??バ?付?フォル?作?します? 068 * これは、?動スキャンで、サ?イルのサ?イルを作?することを避ける意味合いもあります? 069 * また?サ?イルの?削除などに都合が良?思います? 070 * 071 * パラメータは、tableFilterタグの keys, vals にそれぞれ記述するか?BODY 部にCSS形式で記述します? 072 * @og.formSample 073 * ●形式? 074 * ?<og:tableFilter classId="THUMBNAIL" keys="PATH_CLM,FILE_CLM" vals='"PATH,NMFILE"' /> 075 * 076 * ② <og:tableFilter classId="THUMBNAIL" > 077 * { 078 * PATH_CLM : ?ァイルのPATHカラ?D (??) ?ァイルのコン?ストパスが登録されて?カラ?D 079 * FILE_CLM : ?ァイルのFILEカラ?D (??) ?ァイルのファイル名が登録されて?カラ?D 080 * THUMB_CLM : サ?イルのカラ?D サ?イルのPATH/FILEが登録、また?書き戻し用のカラ?D 081 * THUMB_DIR : サ?イルの管?ォル? 初期値 _thumb/ サ?イルを作?する中間管?ォル? 082 * THUMB_SUFIX : サ?イルの拡張? 初期値 AUTO AUTOは?同じ拡張子を使?す? 083 * OVERWRITE : 上書きするかど? 初期値 false サ?イルを作?する時?上書きするかど?を指定します? 084 * MAX_SIZE : サ?イルの?ピクセル数 初期値 128 サ?イルを作?する時?画像ファイルの大きさ。比率はキープされます? 085 * } 086 * </og:tableFilter> 087 * 088 * @og.rev 5.6.5.1 (2013/06/14) 新規追? 089 * @og.rev 5.6.6.0 (2013/07/05) keys の整合?チェ?を追? 090 * 091 * @version 0.9.0 2000/10/17 092 * @author Kazuhiko Hasegawa 093 * @since JDK1.1, 094 */ 095 public class TableFilter_THUMBNAIL extends AbstractTableFilter { 096 //* こ?プログラ??VERSION??を設定します? {@value} */ 097 private static final String VERSION = "5.6.6.1 (2013/07/12)" ; 098 099 private static final String REAL_PATH = HybsSystem.sys( "REAL_PATH" ); 100 101 /** 102 * keys の整合?チェ?を行うための初期設定を行います? 103 * 104 * @og.rev 5.6.6.1 (2013/07/12) keys の整合?チェ?対? 105 * 106 * @param keysMap keys の整合?チェ?を行うための Map 107 */ 108 @Override 109 protected void init( final Map<String,String> keysMap ) { 110 keysMap.put( "PATH_CLM" , "?ァイルのPATHカラ?D (??)" ); 111 keysMap.put( "FILE_CLM" , "?ァイルのFILEカラ?D (??)" ); 112 keysMap.put( "THUMB_CLM" , "サ?イルのカラ?D" ); 113 keysMap.put( "THUMB_DIR" , "サ?イルの管?ォル? (初期値 _thumb/)" ); 114 keysMap.put( "THUMB_SUFIX" , "サ?イルの拡張? (初期値 AUTO)" ); // 5.6.6.1 (2013/07/12) 115 keysMap.put( "OVERWRITE" , "上書きするかど? (初期値 false" ); 116 keysMap.put( "MAX_SIZE" , "サ?イルの?ピクセル数 (初期値 128" ); 117 } 118 119 /** 120 * DBTableModel処?実行します? 121 * 122 * @og.rev 5.6.6.1 (2013/07/12) THUMB_SUFIXを追? 123 * 124 * @return 処?果のDBTableModel 125 */ 126 public DBTableModel execute() { 127 DBTableModel table = getDBTableModel(); // 5.5.2.6 (2012/05/25) インターフェースにgetterメソ?追? 128 129 String path_clm = StringUtil.nval( getValue( "PATH_CLM" ) , null ); // ??? 130 String file_clm = StringUtil.nval( getValue( "FILE_CLM" ) , null ); // ??? 131 String thumb_clm = StringUtil.nval( getValue( "THUMB_CLM" ) , null ); // なければ、?戻しをしな?? 132 String thumb_dir = StringUtil.nval( getValue( "THUMB_DIR" ) , "_thumb/" ); // サ?イルフォル? 133 String thumb_sufix = StringUtil.nval( getValue( "THUMB_SUFIX" ) , "AUTO" ); // 5.6.6.1 (2013/07/12) サ?イルの拡張? 134 boolean isOverwrite = StringUtil.nval( getValue( "OVERWRITE" ) , false ); // サ?イルの再作?有無 135 int max_size = StringUtil.nval( getValue( "MAX_SIZE" ) , 128 ); 136 137 int path_clmNo = table.getColumnNo( path_clm , true ); // 存在しな??合?、エラー 138 int file_clmNo = table.getColumnNo( file_clm , true ); // 存在しな??合?、エラー 139 int thumb_clmNo = table.getColumnNo( thumb_clm , false ); // 存在しな??合??1 を返す? 140 141 ErrorMessage errMessage = null; 142 int rowCnt = table.getRowCount(); 143 for( int row=0; row<rowCnt; row++ ) { 144 try { 145 // オリジナルのファイルを構築します? 146 String pathClmVal = table.getValue( row,path_clmNo ); 147 String fileClmVal = table.getValue( row,file_clmNo ); 148 File orgFile = new File( StringUtil.urlAppend( REAL_PATH , pathClmVal ),fileClmVal ); // オリジナルファイル? 149 if( !orgFile.exists() ) { 150 // String errMsg = "?ァイルが存在しません?" + orgFile.toString() + "]" ; // ファイルがなければエラー 151 // throw new RuntimeException( errMsg ); 152 continue; // 5.6.6.0 (2013/07/05) なければ無? 153 } 154 155 // ?サ?イル作?対象の拡張子?場合?み処?ます?よって、sufix は存在することが保障されます? 156 if( ImageResizer.isReaderSuffix( fileClmVal ) ) { 157 // サ?イルのファイルを構築します? 158 File thumbFile = null; 159 String thumbClmVal = null; 160 if( thumb_clmNo >= 0 ) { 161 thumbClmVal = table.getValue( row,thumb_clmNo ); 162 if( thumbClmVal != null && thumbClmVal.length() > 0 ) { // サ?イルファイル名が?された場? 163 thumbFile = new File( REAL_PATH , thumbClmVal ); 164 if( !isOverwrite && thumbFile.exists() ) { continue; } // ファイルが存在した場合?、??な? 165 } 166 else { 167 thumbClmVal = null; 168 } 169 } 170 171 // ?1 thumbClmVal が未定義(=null)の場合?、??ファイル名を構築す? 172 if( thumbClmVal == null ) { 173 // ?ァイルの拡張子を取り出します?(小文字化も行います?) 174 String sufix = ImageResizer.getSuffix( fileClmVal ); 175 String thumbName = fileClmVal ; 176 // 5.6.6.1 (2013/07/12) サ?イルの拡張? 177 if( ! "AUTO".equalsIgnoreCase( thumb_sufix ) ) { // AUTO以外が?された場? 178 thumbName = fileClmVal.substring( 0,fileClmVal.length()-sufix.length() ) + thumb_sufix ; 179 } 180 // 5.6.6.1 (2013/07/12) 拡張子が bmp の場合?、png に置き換え?しな?? 181 // if( "bmp".equalsIgnoreCase( sufix ) ) { 182 // thumbName = fileClmVal.substring( 0,fileClmVal.length()-3 ) + "png" ; // 拡張子が bmp の場合?、png に置き換えます? 183 // } 184 185 thumbClmVal = StringUtil.urlAppend( pathClmVal,thumb_dir,thumbName ); // サ?イルのアドレス/ファイル? 186 thumbFile = new File( REAL_PATH , thumbClmVal ); 187 188 if( thumb_clmNo >= 0) { 189 table.setValueAt( thumbClmVal,row,thumb_clmNo ); // サ?イルファイル名?書き戻? 190 } 191 } 192 193 // サ?イル保存?の?レクトリ作? 194 File parent = thumbFile.getParentFile(); 195 if( !parent.exists() && !parent.mkdirs() ) { 196 String errMsg = "サ?イル保存?の?レクトリ作?に失敗しました。file=[" + parent.toString() + "]"; 197 throw new HybsSystemException( errMsg ); 198 } 199 200 // 実際のサ?イルの作?処? 201 ImageResizer imgRes = new ImageResizer( orgFile.getAbsolutePath() ); // 変換??ファイル? 202 imgRes.resizeByPixel( thumbFile.getAbsolutePath() , max_size ); // 変換先?ファイル名と画像?大きさ 203 } 204 } 205 catch( RuntimeException ex ) { 206 if( errMessage == null ) { errMessage = makeErrorMessage( "TableFilter_THUMBNAIL Error",ErrorMessage.NG ); } 207 errMessage.addMessage( row+1,ErrorMessage.NG,ex.getMessage() ); 208 } 209 } 210 211 return table; 212 } 213 }