/**
* Zipファイル内画像ファイル情報リスト
*/
package jp.crwdev.app.container.zip;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import jp.crwdev.app.BufferedImageIO;
import jp.crwdev.app.container.ImageFileInfoList;
import jp.crwdev.app.interfaces.IImageFileInfo;
import jp.crwdev.app.interfaces.IImageFileInfoList;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
public class ZipImageFileInfoList extends ImageFileInfoList {
/** 入力Zipファイル */
protected ZipFile mZipFile;
/**
* コンストラクタ
* @param zipFile 入力Zipファイル
*/
public ZipImageFileInfoList(ZipFile zipFile) {
super();
setList(zipFile);
}
/**
* コンストラクタ
*/
protected ZipImageFileInfoList(){
super();
}
/**
* Zipファイル内の画像ファイルをリストに登録
* @param dir フォルダ
*/
private void setList(ZipFile zipFile){
mZipFile = zipFile;
clear();
if(mZipFile != null){
List<String> files = listZip(mZipFile);
for(String entryName : files){
try {
IImageFileInfo info = new ZipImageFileInfo(entryName, mZipFile);
add(info);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* Zip内画像ファイルリスト取得
* @param zip
* @return
*/
private List<String> listZip(ZipFile zip){
List<String> files = new ArrayList<String>();
try{
Enumeration<? extends ZipArchiveEntry> enu=zip.getEntries();
while(enu.hasMoreElements()){
listFile((ZipArchiveEntry)enu.nextElement(), files);
}
return files;
}catch(IOException e){
e.printStackTrace();
return null;
}
}
/**
* サポート画像ファイル判定
* @param entry ファイルエントリ
* @param files リスト
* @throws IOException
*/
private void listFile(ZipArchiveEntry entry, List<String> files) throws IOException{
String name = entry.getName();
if(!entry.isDirectory()){
if(BufferedImageIO.isSupport(getSuffix(name))){
files.add(name);
}
}
}
@Override
public IImageFileInfoList renew(){
ZipImageFileInfoList list = new ZipImageFileInfoList();
list.mZipFile = mZipFile;
return renewInternal(list);
}
}