package org.unitils.dbmaintainer.locator;
import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.unitils.dbmaintainer.locator.resourcepickingstrategie.ResourcePickingStrategie;
import org.unitils.dbmaintainer.script.Script;
import org.unitils.dbmaintainer.script.impl.DefaultScriptSource;
/**
* Locate db scripts.
*
* @author tdr
*
* @since 1.0.2
*
*/
public class ClassPathScriptLocator extends ClassPathResourceLocator {
/* The logger instance for this class */
private static Log logger = LogFactory.getLog(ClassPathScriptLocator.class);
protected List<Script> scriptList;
protected String path;
protected List<String> scriptExtensions;
protected String schema;
/**
* @param scriptList1
* @param path1
* @param resourcePickingStrategie
* @param scriptExtensions1
*/
public void loadScripts(List<Script> scriptList1, String path1, ResourcePickingStrategie resourcePickingStrategie, List<String> scriptExtensions1, String schema, boolean defaultDatabase, Properties configuration) {
this.path = path1;
this.scriptList = scriptList1;
this.scriptExtensions = scriptExtensions1;
this.schema = schema;
List<URL> matchedResources = loadResources(path1, false);
List<URL> resourcesF = resourcePickingStrategie.filter(matchedResources, path1);
try {
addToScriptList(resourcesF, defaultDatabase, configuration);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
protected void addToScriptList(List<URL> resourcesF, boolean defaultDatabase, Properties configuration) throws IOException {
for (URL url : resourcesF) {
if (isScriptFile(url.toString())) {
String scriptName = url.toString().substring(url.toString().lastIndexOf(path) + path.length());
DefaultScriptSource defaultScriptSource = new DefaultScriptSource();
defaultScriptSource.init(configuration);
if (defaultScriptSource.checkIfScriptContainsCorrectDatabaseName(scriptName, schema, defaultDatabase) && defaultScriptSource.containsOneOfQualifiers(scriptName)) {
Script script = new Script(scriptName, Long.valueOf(url.openConnection().getLastModified()), new org.unitils.dbmaintainer.script.ScriptContentHandle.UrlScriptContentHandle(url));
logger.debug(" + script added (" + url.toString() + "))");
scriptList.add(script);
}
}
}
}
/**
* Vefiry's of the <code>location</code> ends with a valid file-extension.
*
* @param location
* @return
*/
protected boolean isScriptFile(String location) {
String name = location;
for (Iterator<String> i = scriptExtensions.iterator(); i.hasNext();) {
String fileExtension = i.next();
if (name.endsWith(fileExtension)) {
return true;
}
}
return false;
}
}