/*
* Copyright 2004-2015 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.extension.jdbc.gen.internal.model;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.seasar.extension.jdbc.DbmsDialect;
import org.seasar.extension.jdbc.gen.internal.util.FileUtil;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
/**
* SQLファイルのサポートクラスです。
*
* @author taedium
*
*/
public class SqlFileSupport {
/**
* SQLファイルのパスのリストを作成します。
*
* @param classpathDir
* クラスパスのディレクトリ
* @param sqlFileSet
* SQLファイルのセット
* @return SQLファイルのパスのリスト
*/
public List<String> createSqlFilePathList(File classpathDir,
Set<File> sqlFileSet) {
List<String> sqlFilePathList = new ArrayList<String>();
Set<String> dbmsNameSet = getDbmsNameSet();
String basePath = FileUtil.getCanonicalPath(classpathDir)
+ File.separator;
for (File sqlFile : sqlFileSet) {
String path = FileUtil.getCanonicalPath(sqlFile);
if (!path.startsWith(basePath)) {
continue;
}
path = path.substring(basePath.length());
if (path.endsWith(".sql")) {
path = path.substring(0, path.length() - 4);
}
for (String dbmsName : dbmsNameSet) {
if (path.endsWith("_" + dbmsName)) {
path = path.substring(0, path.length() - dbmsName.length()
- 1);
break;
}
}
String resourcePath = path.replace(File.separator, "/") + ".sql";
if (sqlFilePathList.contains(resourcePath)) {
continue;
}
sqlFilePathList.add(resourcePath);
}
Collections.sort(sqlFilePathList);
return sqlFilePathList;
}
/**
* コンテナに登録されているすべての{@link DbmsDialect}について名前のセットを返します。
*
* @return {@link DbmsDialect}の名前のセット
*/
protected Set<String> getDbmsNameSet() {
if (!SingletonS2ContainerFactory.hasContainer()) {
return Collections.emptySet();
}
Set<String> dbmsNameSet = new HashSet<String>();
S2Container container = SingletonS2ContainerFactory.getContainer();
DbmsDialect[] dialects = (DbmsDialect[]) container
.findAllComponents(DbmsDialect.class);
for (DbmsDialect dialect : dialects) {
String name = dialect.getName();
if (name != null) {
dbmsNameSet.add(name);
}
}
return dbmsNameSet;
}
}