Guest User

Untitled

a guest
Nov 28th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.54 KB | None | 0 0
  1. package jdbc.dao;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.UnsupportedEncodingException;
  7. import java.net.URLDecoder;
  8. import java.util.Properties;
  9. import java.util.regex.Matcher;
  10.  
  11. import br.org.configparser.ConfigParser;
  12.  
  13. /**
  14. * @author thiago-amm
  15. * @version v1.0.0 05/11/2017
  16. * @since v1.0.0
  17. */
  18. public class DataSourceConfig {
  19.  
  20. private static final File FILE = new File(".");
  21. private static String exceptionMessage;
  22.  
  23. public static final String REGEX_FILE_SEPARATOR = Matcher.quoteReplacement(File.separator);
  24. public static final String FILE_SEPARATOR = File.separator.replaceAll("\\\\", "/");
  25. public static final String PROJECT_DIR = FILE.getAbsolutePath().replace(".", "");
  26. public static final String PROJECT_DIR_DATABASE_PROPERTIES = PROJECT_DIR + "database.properties";
  27.  
  28. public static final String BIN_DIR = PROJECT_DIR + "bin/";
  29. public static final String BUILD_DIR = PROJECT_DIR + "build/";
  30. public static final String DOC_DIR = PROJECT_DIR + "doc/";
  31. public static final String SRC_DIR = PROJECT_DIR + "src/";
  32. public static final String LIB_DIR = PROJECT_DIR + "lib/";
  33.  
  34. public static final String SRC_MAIN_DIR = SRC_DIR + "main/";
  35. public static final String SRC_MAIN_JAVA_DIR = SRC_MAIN_DIR + "java/";
  36. public static final String SRC_MAIN_RESOURCES_DIR = SRC_MAIN_DIR + "resources/";
  37. public static final String SRC_MAIN_RESOURCES_DATABASE_PROPERTIES = SRC_MAIN_RESOURCES_DIR + "database.properties";
  38. public static final String SRC_MAIN_RESOURCES_SQL_DIR = SRC_MAIN_RESOURCES_DIR + "sql/";
  39. public static final String SRC_MAIN_RESOURCES_METAINF_DIR = SRC_MAIN_RESOURCES_DIR + "META-INF/";
  40. public static final String SRC_MAIN_WEBAPP_DIR = SRC_MAIN_DIR + "webapp/";
  41. public static final String SRC_MAIN_WEBAPP_METAINF_DIR = SRC_MAIN_WEBAPP_DIR + "META-INF/";
  42. public static final String SRC_MAIN_WEBAPP_WEBINF_DIR = SRC_MAIN_WEBAPP_DIR + "WEB-INF/";
  43. public static final String SRC_MAIN_WEBAPP_WEBINF__LIB_DIR = SRC_MAIN_WEBAPP_WEBINF_DIR + "lib/";
  44. public static final String SRC_MAIN_WEBAPP_WEBINF_DATABASE_PROPERTIES = SRC_MAIN_WEBAPP_WEBINF_DIR + "database.properties";
  45.  
  46. public static final String SRC_TEST_DIR = SRC_MAIN_DIR.replace("main", "test");
  47. public static final String SRC_TEST_JAVA_DIR = SRC_MAIN_JAVA_DIR.replace("main", "test");
  48. public static final String SRC_TEST_RESOURCES_DIR = SRC_MAIN_RESOURCES_DIR.replace("main", "test");
  49. public static final String SRC_TEST_RESOURCES_DATABASE_PROPERTIES = SRC_TEST_RESOURCES_DIR + "database.properties";
  50.  
  51. public static String DATABASE_PROPERTIES_PATH = null;
  52. public static boolean DATABASE_PROPERTIES_LOADED = false;
  53. public static FileInputStream DATABASE_PROPERTIES_FILE;
  54. public static Properties DATABASE_PROPERTIES;
  55.  
  56. private Environment environment;
  57. private Engine engine;
  58. private Pool pool;
  59. private String host;
  60. private Integer port;
  61. private String database;
  62. private String user;
  63. private String password;
  64. private String charset;
  65. private String collate;
  66. private Boolean autoReconnect;
  67. private Boolean autoReconnectForPools;
  68. private Boolean autoCommit;
  69. private Boolean autoClose;
  70. private Boolean useSSL;
  71. private Boolean verifyServerCertificate;
  72. private Boolean logging;
  73. private String driver;
  74. private String url;
  75.  
  76. public static boolean isWindows() {
  77. boolean isWindows = false;
  78. if (System.getProperty("os.name").toLowerCase().contains("windows")) {
  79. isWindows = true;
  80. }
  81. return isWindows;
  82. }
  83.  
  84. public static boolean isLinux() {
  85. boolean isWindows = false;
  86. if (System.getProperty("os.name").toLowerCase().contains("linux")) {
  87. isWindows = true;
  88. }
  89. return isWindows;
  90. }
  91.  
  92. public static String normalizeFilePath(String path) {
  93. if (isWindows()) {
  94. path = path.replace("\\", "/");
  95. path = path.substring(0, 1).equals("/") ? path.substring(1) : path;
  96. }
  97. return path;
  98. }
  99.  
  100. /**
  101. * Carrega o arquivo de propriedades database.properties.
  102. */
  103. public static void _load() {
  104. try {
  105. DATABASE_PROPERTIES_PATH = DataSourceConfig.class.getClassLoader().getResource("database.properties").getPath();
  106. DATABASE_PROPERTIES_PATH = URLDecoder.decode(DATABASE_PROPERTIES_PATH, System.getProperty("file.encoding"));
  107. File databaseProperties = new File(DATABASE_PROPERTIES_PATH);
  108. if (databaseProperties.exists()) {
  109. DATABASE_PROPERTIES_FILE = new FileInputStream(databaseProperties);
  110. } else {
  111. exceptionMessage = "ATENÇÃO: Não foi possível encontrar o arquivo de configurações database.properties!";
  112. throw new IllegalStateException(exceptionMessage);
  113. }
  114. DATABASE_PROPERTIES = new Properties();
  115. DATABASE_PROPERTIES.load(DATABASE_PROPERTIES_FILE);
  116. System.out.println("--- PROPRIEDADES ---");
  117. for (Object o : DATABASE_PROPERTIES.keySet()) {
  118. String key = o.toString().toLowerCase().trim();
  119. String value = DATABASE_PROPERTIES.getProperty(key);
  120. value = value == null ? "" : value.trim().toLowerCase();
  121. System.out.println(key);
  122. System.out.println(value);
  123. }
  124. } catch (UnsupportedEncodingException e) {
  125. e.printStackTrace();
  126. } catch (IOException e) {
  127. e.printStackTrace();
  128. }
  129. }
  130.  
  131. public DataSourceConfig load(String filePath) {
  132. DataSourceConfig dataSourceConfig = null;
  133. filePath = filePath == null ? "" : filePath;
  134. if (!filePath.isEmpty()) {
  135. try {
  136. System.out.println("=========== CARREGANDO ===========");
  137. ConfigParser configParser = new ConfigParser();
  138. configParser.read(filePath);
  139. configParser.sections().forEach(section -> configParser.items(section).forEach(System.out::println));
  140. } catch (Exception e) {
  141. e.printStackTrace();
  142. }
  143. }
  144. return dataSourceConfig;
  145. }
  146.  
  147. public DataSourceConfig() {
  148. environment = Environment.DEVELOPMENT;
  149. engine = Engine.MYSQL;
  150. pool = Pool.HIKARICP;
  151. host = "localhost";
  152. port = 3306;
  153. database = "";
  154. user = "";
  155. password = "";
  156. charset = "uf8";
  157. collate = "utf8_general_ci";
  158. autoReconnect = false;
  159. autoReconnectForPools = false;
  160. autoCommit = false;
  161. autoClose = false;
  162. useSSL = false;
  163. verifyServerCertificate = false;
  164. logging = false;
  165. driver = Engine.MYSQL.getDriver();
  166. url = Engine.MYSQL.getUrl();
  167. }
  168.  
  169. public static DataSourceConfig create() {
  170. return new DataSourceConfig();
  171. }
  172.  
  173. public Environment getEnviroment() {
  174. return environment;
  175. }
  176.  
  177. public Environment enviroment() {
  178. return getEnviroment();
  179. }
  180.  
  181. public void setEnvironment(Environment environment) {
  182. this.environment = environment == null ? Environment.DEVELOPMENT : environment;
  183. }
  184.  
  185. public DataSourceConfig environment(Environment environment) {
  186. setEnvironment(environment);
  187. return this;
  188. }
  189.  
  190. public Engine getEngine() {
  191. return engine;
  192. }
  193.  
  194. public Engine engine() {
  195. return getEngine();
  196. }
  197.  
  198. public void setEngine(Engine engine) {
  199. this.engine = engine == null ? Engine.MYSQL : engine;
  200. switch (engine.toString()) {
  201. case "mysql":
  202. url = Engine.MYSQL.getUrl();
  203. break;
  204. case "postgresql":
  205. url = Engine.POSTGRESQL.getUrl();
  206. break;
  207. case "oracle":
  208. url = Engine.ORACLE.getUrl();
  209. break;
  210. }
  211. }
  212.  
  213. public DataSourceConfig engine(Engine engine) {
  214. setEngine(engine);
  215. return this;
  216. }
  217.  
  218. public Pool getPool() {
  219. return pool;
  220. }
  221.  
  222. public Pool pool() {
  223. return getPool();
  224. }
  225.  
  226. public void setPool(Pool pool) {
  227. this.pool = pool == null ? Pool.NONE : pool;
  228. }
  229.  
  230. public DataSourceConfig pool(Pool pool) {
  231. setPool(pool);
  232. return this;
  233. }
  234.  
  235. public String getHost() {
  236. return host;
  237. }
  238.  
  239. public String host() {
  240. return getHost();
  241. }
  242.  
  243. public void setHost(String host) {
  244. this.host = host == null ? "localhost" : host;
  245. }
  246.  
  247. public DataSourceConfig host(String host) {
  248. setHost(host);
  249. return this;
  250. }
  251.  
  252. public Integer getPort() {
  253. return port;
  254. }
  255.  
  256. public Integer port() {
  257. return getPort();
  258. }
  259.  
  260. public void setPort(Integer port) {
  261. this.port = port == null ? 3306 : port;
  262. }
  263.  
  264. public DataSourceConfig port(Integer port) {
  265. setPort(port);
  266. return this;
  267. }
  268.  
  269. public String getDatabase() {
  270. return database;
  271. }
  272.  
  273. public String database() {
  274. return getDatabase();
  275. }
  276.  
  277. public void setDatabase(String database) {
  278. database = database == null ? "" : database;
  279. if (database.isEmpty()) {
  280. if (!user.isEmpty()) {
  281. this.database = user;
  282. } else {
  283. switch (engine.toString()) {
  284. case "mysql":
  285. database = "mysql";
  286. break;
  287. case "postgresql":
  288. database = "postgres";
  289. break;
  290. case "oracle":
  291. database = "xe";
  292. break;
  293. }
  294. }
  295. }
  296. this.database = database;
  297. }
  298.  
  299. public DataSourceConfig database(String database) {
  300. setDatabase(database);
  301. return this;
  302. }
  303.  
  304. public String getUser() {
  305. return user;
  306. }
  307.  
  308. public String user() {
  309. return getUser();
  310. }
  311.  
  312. public void setUser(String user) {
  313. user = user == null ? "" : user;
  314. if (user.isEmpty()) {
  315. switch (engine.toString()) {
  316. case "mysql":
  317. user = "root";
  318. break;
  319. case "postgresql":
  320. user = "postgres";
  321. break;
  322. case "oracle":
  323. user = "hr";
  324. break;
  325. }
  326. }
  327. if (database.isEmpty()) {
  328. database = user;
  329. }
  330. if (password.isEmpty()) {
  331. password = user;
  332. }
  333. this.user = user;
  334. }
  335.  
  336. public DataSourceConfig user(String user) {
  337. setUser(user);
  338. return this;
  339. }
  340.  
  341. public String getPassword() {
  342. return password;
  343. }
  344.  
  345. public String password() {
  346. return getPassword();
  347. }
  348.  
  349. public void setPassword(String password) {
  350. this.password = password == null ? "" : password;
  351. if (password.isEmpty()) {
  352. if (!user.isEmpty()) {
  353. password = user;
  354. }
  355. }
  356. this.password = password;
  357. }
  358.  
  359. public DataSourceConfig password(String password) {
  360. setPassword(password);
  361. return this;
  362. }
  363.  
  364. public String getCharset() {
  365. return charset;
  366. }
  367.  
  368. public String charset() {
  369. return getCharset();
  370. }
  371.  
  372. public void setCharset(String charset) {
  373. this.charset = charset == null ? "utf8" : charset;
  374. }
  375.  
  376. public DataSourceConfig charset(String charset) {
  377. setCharset(charset);
  378. return this;
  379. }
  380.  
  381. public String getCollate() {
  382. return collate;
  383. }
  384.  
  385. public String collate() {
  386. return getCollate();
  387. }
  388.  
  389. public void setCollate(String collate) {
  390. this.collate = collate == null ? "utf8_general_ci" : collate;
  391. }
  392.  
  393. public DataSourceConfig collate(String collate) {
  394. setCollate(collate);
  395. return this;
  396. }
  397.  
  398. public Boolean getAutoReconnect() {
  399. return autoReconnect;
  400. }
  401.  
  402. public Boolean autoReconnect() {
  403. return getAutoReconnect();
  404. }
  405.  
  406. public void setAutoReconnect(Boolean autoReconnect) {
  407. this.autoReconnect = autoReconnect == null ? false : autoReconnect;
  408. }
  409.  
  410. public DataSourceConfig autoReconnect(Boolean autoReconnect) {
  411. setAutoReconnect(autoReconnect);
  412. return this;
  413. }
  414.  
  415. public Boolean getAutoReconnectForPools() {
  416. return autoReconnectForPools;
  417. }
  418.  
  419. public Boolean autoReconnectForPools() {
  420. return getAutoReconnectForPools();
  421. }
  422.  
  423. public void setAutoReconnectForPools(Boolean autoReconnectForPools) {
  424. this.autoReconnectForPools = autoReconnectForPools == null ? false : autoReconnectForPools;
  425. }
  426.  
  427. public DataSourceConfig autoReconnectForPools(Boolean autoReconnectForPools) {
  428. setAutoReconnect(autoReconnectForPools);
  429. return this;
  430. }
  431.  
  432. public Boolean getAutoCommit() {
  433. return autoCommit;
  434. }
  435.  
  436. public Boolean autoCommit() {
  437. return getAutoCommit();
  438. }
  439.  
  440. public void setAutoCommit(Boolean autoCommit) {
  441. this.autoCommit = autoCommit == null ? false : autoCommit;
  442. }
  443.  
  444. public DataSourceConfig autoCommit(Boolean autoCommit) {
  445. setAutoCommit(autoCommit);
  446. return this;
  447. }
  448.  
  449. public Boolean getAutoClose() {
  450. return autoClose;
  451. }
  452.  
  453. public Boolean autoClose() {
  454. return getAutoClose();
  455. }
  456.  
  457. public void setAutoClose(Boolean autoClose) {
  458. this.autoClose = autoClose == null ? false : autoClose;
  459. }
  460.  
  461. public DataSourceConfig autoClose(Boolean autoClose) {
  462. setAutoClose(autoClose);
  463. return this;
  464. }
  465.  
  466. public Boolean getUseSSL() {
  467. return useSSL;
  468. }
  469.  
  470. public Boolean useSSL() {
  471. return getUseSSL();
  472. }
  473.  
  474. public void setUseSSL(Boolean useSSL) {
  475. this.useSSL = useSSL == null ? false : useSSL;
  476. }
  477.  
  478. public DataSourceConfig useSSL(Boolean useSSL) {
  479. setUseSSL(useSSL);
  480. return this;
  481. }
  482.  
  483. public Boolean getVerifyServerCertificate() {
  484. return verifyServerCertificate;
  485. }
  486.  
  487. public Boolean verifyServerCertificate() {
  488. return getVerifyServerCertificate();
  489. }
  490.  
  491. public void setVerifyServerCertificate(Boolean verifyServerCertificate) {
  492. this.verifyServerCertificate = verifyServerCertificate == null ? false : verifyServerCertificate;
  493. }
  494.  
  495. public DataSourceConfig verifyServerCertificate(Boolean verifyServerCertificate) {
  496. setVerifyServerCertificate(verifyServerCertificate);
  497. return this;
  498. }
  499.  
  500. public Boolean getLogging() {
  501. return logging;
  502. }
  503.  
  504. public Boolean logging() {
  505. return getLogging();
  506. }
  507.  
  508. public void setLogging(Boolean logging) {
  509. this.logging = logging == null ? false : logging;
  510. }
  511.  
  512. public DataSourceConfig logging(Boolean logging) {
  513. setLogging(logging);
  514. return this;
  515. }
  516.  
  517. public String getDriver() {
  518. return driver;
  519. }
  520.  
  521. public String driver() {
  522. return getDriver();
  523. }
  524.  
  525. public void setDriver(String driver) {
  526. this.driver = driver;
  527. }
  528.  
  529. public DataSourceConfig driver(String driver) {
  530. this.driver = driver == null ? Engine.MYSQL.getDriver() : driver;
  531. return this;
  532. }
  533.  
  534. public String getUrl() {
  535. String url = "";
  536. if (engine.equals(Engine.MYSQL)) {
  537. url = String.format(this.url, host, port, database, user, password, verifyServerCertificate, useSSL);
  538. } else {
  539. url = String.format(this.url, this.host, this.port, this.database);
  540. }
  541. this.url = url;
  542. return url;
  543. }
  544.  
  545. @Override
  546. public String toString() {
  547. return "DataSourceConfig(enviroment=" + environment + ", engine=" + engine + ", pool=" + pool + ", host=" + host + ", port=" + port +
  548. ", database=" + database + ", user=" + user + ", password=" + password + ", charset=" + charset + ", collate=" + collate +
  549. ", autoReconnect=" + autoReconnect + ", autoReconnectForPools=" + autoReconnectForPools + ", autoCommit=" + autoCommit +
  550. ", autoClose=" + autoClose + ", useSSL=" + useSSL + ", verifyServerCertificate=" + verifyServerCertificate + ", logging=" +
  551. logging + ", driver=" + driver + ", url=" + url + ")";
  552. }
  553.  
  554. }
Add Comment
Please, Sign In to add comment