12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*
- * Copyright 2014 James Moger.
- *
- * 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 com.iciql;
-
- import com.iciql.Iciql.Mode;
-
- import java.io.InputStream;
- import java.util.Properties;
-
- /**
- * Loads DAO statements from Properties resource files the classpath.
- *
- * @author James Moger
- */
- public class DaoClasspathStatementProvider implements DaoStatementProvider {
-
- private final Properties externalStatements;
-
- public DaoClasspathStatementProvider() {
- externalStatements = load();
- }
-
- /**
- * Returns the list of statement resources to try locating.
- *
- * @return
- */
- protected String[] getStatementResources() {
- return new String[]{"/iciql.properties", "/iciql.xml", "/conf/iciql.properties", "/conf/iciql.xml"};
- }
-
- /**
- * Loads the first statement resource found on the classpath.
- *
- * @return the loaded statements
- */
- private Properties load() {
-
- Properties props = new Properties();
- for (String resource : getStatementResources()) {
-
- InputStream is = null;
-
- try {
- is = DaoProxy.class.getResourceAsStream(resource);
-
- if (is != null) {
-
- if (resource.toLowerCase().endsWith(".xml")) {
- // load an .XML statements file
- props.loadFromXML(is);
- } else {
- // load a .Properties statements file
- props.load(is);
- }
-
- break;
- }
-
- } catch (Exception e) {
- throw new IciqlException(e, "Failed to parse {0}", resource);
- } finally {
- try {
- is.close();
- } catch (Exception e) {
- }
- }
-
- }
- return props;
- }
-
- @Override
- public String getStatement(String idOrStatement, Mode mode) {
- final String modePrefix = "%" + mode.name().toLowerCase() + ".";
- String value = externalStatements.getProperty(idOrStatement, idOrStatement);
- value = externalStatements.getProperty(modePrefix + idOrStatement, value);
- return value;
- }
-
- }
|