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