/*
* 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.dao.helper.impl;
import java.lang.reflect.Method;
import org.seasar.extension.dao.DaoConstants;
import org.seasar.extension.dao.DaoNotFoundRuntimeException;
import org.seasar.extension.dao.helper.DaoHelper;
import org.seasar.framework.convention.NamingConvention;
import org.seasar.framework.util.ResourceUtil;
import org.seasar.framework.util.StringUtil;
import org.seasar.framework.util.TextUtil;
/**
* {@link DaoHelper}の実装クラスです。
*
* @author higa
*
*/
public class DaoHelperImpl implements DaoHelper {
private NamingConvention namingConvention;
/**
* @return 命名規約を返します。
*/
public NamingConvention getNamingConvention() {
return namingConvention;
}
/**
* 命名規約を設定します。
*
* @param namingConvention
* 命名規約
*/
public void setNamingConvention(NamingConvention namingConvention) {
this.namingConvention = namingConvention;
}
public Class getDaoInterface(Class clazz) {
if (clazz.isInterface()) {
return clazz;
}
for (Class target = clazz; target != Object.class; target = target
.getSuperclass()) {
Class[] interfaces = target.getInterfaces();
for (int i = 0; i < interfaces.length; ++i) {
Class intf = interfaces[i];
if (intf.getName().endsWith(namingConvention.getDaoSuffix())) {
return intf;
}
}
}
throw new DaoNotFoundRuntimeException(clazz);
}
public String getDataSourceName(Class daoClass) {
Class intf = getDaoInterface(daoClass);
String className = intf.getName();
String key = "." + namingConvention.getDaoPackageName() + ".";
int index = className.lastIndexOf(key);
if (index < 0) {
return null;
}
int index2 = className.lastIndexOf('.');
if (index + key.length() - 1 == index2) {
return null;
}
return className.substring(index + key.length(), index2);
}
public String getSqlBySqlFile(Class daoClass, Method method, String suffix) {
String base = daoClass.getName().replace('.', '/') + "_"
+ method.getName();
String dbmsPath = base
+ (StringUtil.isEmpty(suffix) ? "" : "_" + suffix)
+ DaoConstants.SQL_EXTENSION;
String standardPath = base + DaoConstants.SQL_EXTENSION;
if (ResourceUtil.isExist(dbmsPath)) {
return TextUtil.readUTF8(dbmsPath);
} else if (ResourceUtil.isExist(standardPath)) {
return TextUtil.readUTF8(standardPath);
}
return null;
}
}