/*
* 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.builder.library.scanner;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.seasar.mayaa.builder.library.scanner.SourceScanner;
import org.seasar.mayaa.impl.IllegalParameterValueException;
import org.seasar.mayaa.impl.ParameterAwareImpl;
import org.seasar.mayaa.impl.util.StringUtil;
import org.seasar.mayaa.impl.util.collection.IteratorIterator;
import org.seasar.mayaa.source.SourceDescriptor;
/**
* @author Masataka Kurihara (Gluegent, Inc)
*/
public class MetaInfSourceScanner extends ParameterAwareImpl
implements SourceScanner {
private static final long serialVersionUID = -7285416169718204350L;
private FolderSourceScanner _folderScanner = new FolderSourceScanner();
private Set _ignores = new HashSet();
private String _jarScanFolder;
private Set _jarScanIgnores = new HashSet();
private Set _jarScanExtensions = new HashSet();
private void initJarScanOptions() {
if (_jarScanFolder == null) {
_jarScanFolder = "META-INF/";
}
if (_jarScanIgnores.size() == 0) {
_jarScanIgnores.add("META-INF/MANIFEST.MF");
}
if (_jarScanExtensions.size() == 0) {
_jarScanExtensions.add(".mld");
_jarScanExtensions.add(".tld");
}
}
public Iterator scan() {
initJarScanOptions();
IteratorIterator itit = new IteratorIterator();
for (Iterator it = _folderScanner.scan(); it.hasNext(); ) {
JarSourceScanner scanner = new JarSourceScanner();
scanner.setDescriptor((SourceDescriptor) it.next());
scanner.setParameter("root", _folderScanner.getFolder());
scanner.setParameter("folder", _jarScanFolder);
for (Iterator itIgnore = _jarScanIgnores.iterator()
; itIgnore.hasNext(); ) {
scanner.setParameter("ignore", (String) itIgnore.next());
}
for (Iterator itExtension = _jarScanExtensions.iterator()
; itExtension.hasNext(); ) {
scanner.setParameter("extension", (String) itExtension.next());
}
itit.add(scanner);
}
return itit;
}
// Parameterizable implements ------------------------------------
public void setParameter(String name, String value) {
if ("ignore".equals(name)) {
if (StringUtil.isEmpty(value)) {
throw new IllegalParameterValueException(getClass(), name);
}
_ignores.add(value);
} else if (name.startsWith("jar.")) {
name = name.substring("jar.".length());
if ("folder".equals(name)) {
_jarScanFolder = value;
} else if ("ignore".equals(name)) {
_jarScanIgnores.add(value);
} else if ("extension".equals(name)) {
_jarScanExtensions.add(value);
}
} else {
_folderScanner.setParameter(name, value);
return;
}
super.setParameter(name, value);
}
}