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 }