All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.seasar.mayaa.impl.source.SystemIDFileSearchIterator Maven / Gradle / Ivy

Go to download

Mayaa is server side web template engine that is strongly aware of work sharing between programmers and designers based on HTML based templates.

The newest version!
/*
 * Copyright 2004-2012 the Seasar Foundation and the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */package org.seasar.mayaa.impl.source;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Iterator;

import org.seasar.mayaa.impl.util.FileSearchIterator;
import org.seasar.mayaa.impl.util.StringUtil;

/**
 * 指定フォルダ以下のファイルのSystemIDを順番に返すIterator。
 * フォルダ内のファイルを全て返したら、次はサブフォルダを処理します。
 * 見つけたファイルのうち、ファイル名がフィルタに合致するファイルのみを対象とします。
 * ただし隠しファイルは対象としません。
 *
 * フィルタはセミコロン(";")で区切ることで複数指定できます。
 * フィルタの指定方法は2パターンあります。
 * 
    *
  1. "."で始まる英数字のみの文字列の場合は拡張子とみなし、一致するものを対象とします。 * (大文字小文字を区別しない)
  2. *
  3. 1以外の場合は正規表現とみなし、絶対パスがマッチするものを対象とします。
  4. *
* * @author Taro Kato (Gluegent, Inc.) * @author Koji Suga (Gluegent Inc.) */ public class SystemIDFileSearchIterator extends FileSearchIterator implements Iterator { /** * filtersにnullを渡すと、".html"というフィルタが指定されたものとみなす。 * * @param rootDir 探索を開始するフォルダ * @param filters フィルタ文字列の配列 */ public SystemIDFileSearchIterator(File rootDir, final String[] filters) { super(rootDir, new FilenameFilter() { public boolean accept(File dir, String name) { File file = new File(dir.getPath() + File.separatorChar + name); if (file.isHidden()) { return false; } if (file.isDirectory()) { return true; } if (filters == null) { return name.toLowerCase().endsWith(".html"); } for (int i = 0; i < filters.length; i++) { String filter = filters[i].trim(); // 拡張子のフィルタか? if (filter.matches("^\\.[a-zA-Z0-9]+")) { if (name.toLowerCase().endsWith(filter.toLowerCase())) { return true; } } else { // それ以外は正規表現とみなす String absolutePath = file.getAbsolutePath().replace(File.separatorChar, '/'); if (absolutePath.matches(filter)) { return true; } } } return false; } public String toString() { if (filters != null) { return "[" + StringUtil.join(filters, ",") + "]"; } return ""; } }); } @Override public boolean hasNext() { return super.hasNextFile(); } @Override public String next() { return makeSystemID((File) super.nextFile()); } @Override public void remove() { throw new UnsupportedOperationException("remove"); } protected String makeSystemID(File current) { String rootPath = getRoot().getPath(); String filePath = current.getPath(); filePath = filePath.substring(rootPath.length()); filePath = filePath.replace(File.separatorChar, '/'); if (filePath.length() > 0 && filePath.startsWith("/")) { filePath = filePath.substring(1); } return filePath; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy