/* * ============LICENSE_START========================================== * ONAP Portal SDK * =================================================================== * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * =================================================================== * * Unless otherwise specified, all software contained herein is licensed * under the Apache License, Version 2.0 (the "License"); * you may not use this software 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. * * Unless otherwise specified, all documentation contained herein is licensed * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); * you may not use this documentation except in compliance with the License. * You may obtain a copy of the License at * * https://creativecommons.org/licenses/by/4.0/ * * Unless required by applicable law or agreed to in writing, documentation * 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. * * ============LICENSE_END============================================ * * */ package org.onap.portalsdk.analytics.scheduler; import java.io.InputStream; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import org.onap.portalsdk.analytics.error.ReportSQLException; import org.onap.portalsdk.analytics.system.DbUtils; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; public class SchedulerUtil { private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerUtil.class); private Connection conn = null; public static Date trunc_hour(final Date v_date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(v_date); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); return calendar.getTime(); } public static Date add_hours(final Date v_date, final int i) { Calendar cal = Calendar.getInstance(); cal.setTime(v_date); cal.add(Calendar.HOUR, i); return cal.getTime(); } public static Date add_months(final Date v_date, final int i) { Calendar cal = Calendar.getInstance(); cal.setTime(v_date); cal.add(Calendar.MONTH, i); return cal.getTime(); } public static Date add_days(final Date v_date, final int i) { Calendar cal = Calendar.getInstance(); cal.setTime(v_date); cal.add(Calendar.DATE, i); return cal.getTime(); } public static Date to_date(final String input, final String format) { Date date = null; try { date = new SimpleDateFormat(format, Locale.ENGLISH).parse(input); } catch (final Exception e) { logger.warn("Failed to Format Date", e); } return date; } public static String to_date_str(final Date input, final String format) { String date = null; try { date = new SimpleDateFormat(format, Locale.ENGLISH).format(input); } catch (final Exception e) { logger.warn("Failed to Format Date", e); } return date; } public static String[] cr_dissecturl(final String formfields, final String delimiter) { if (formfields == null || formfields.isEmpty()) { return new String[]{}; } return formfields.split("&"); } protected Connection getConnection() { return conn; } protected void setConnection(final Connection _conn) { conn = _conn; } protected Connection init() throws ReportSQLException { if (conn != null) { return conn; } conn = DbUtils.getConnection(); return conn; } protected void closeConnection() throws SQLException { if (conn != null) { conn.close(); } } public void insertOrUpdate(final String sql) throws SQLException, ReportSQLException { try (final Statement stat = conn.createStatement()) { stat.executeUpdate(sql); } } public void updateBinaryStream(final String sql, final BigDecimal id, final InputStream is, final int size) throws SQLException, ReportSQLException { // cludge hack for oracle databases if (conn.getMetaData().getDatabaseProductName().toLowerCase().contains("oracle")) { throw new ReportSQLException("only maria db support for this "); } try (final PreparedStatement stat = conn.prepareStatement(sql)) { stat.setBigDecimal(2, id); stat.setBinaryStream(1, is, size); stat.executeUpdate(); } } public void insertOrUpdateWithPrepared(final String sql, final List params, final List types) throws SQLException { try (final PreparedStatement stat = conn.prepareStatement(sql)) { conn.getMetaData(); int i2; final int paramLength = params.size(); for (int i = 0; i < paramLength; i++) { i2 = i + 1; final Object param = params.get(i); final int type = types.get(i); if ("NULL".equals(param)) { stat.setNull(i2, type); } else if (type == Types.VARCHAR) { stat.setString(i2, (String) param); } else if (type == Types.INTEGER) { stat.setInt(i2, (Integer) param); } else if (type == Types.NUMERIC) { stat.setLong(i2, (Long) param); } else if (type == Types.DOUBLE) { stat.setDouble(i2, (Double) param); } else if (type == Types.DATE) { stat.setDate(i2, (java.sql.Date) param); } else if (type == Types.TIMESTAMP) { stat.setTimestamp(i2, (java.sql.Timestamp) param); } else if (type == Types.BIGINT) { stat.setBigDecimal(i2, (BigDecimal) param); } else { throw new SQLException( "Unidentified Object; Please contact admin and have this method updated with the current object type"); } } stat.executeUpdate(); } } public Object getSingleResult(final String sql, final String fieldName) { Object o = null; try (final Statement stat = conn.createStatement(); final ResultSet rs = stat.executeQuery(sql);) { while (rs.next()) { o = rs.getObject(fieldName); } } catch (final SQLException sqlE) { logger.warn("Failed to get single result", sqlE); } return o; } public InputStream getDBStream(final String sql, final String fieldname) throws SQLException, ReportSQLException { // cludge hack for oracle databases if (conn.getMetaData().getDatabaseProductName().toLowerCase().contains("oracle")) { throw new ReportSQLException("only maria db support for this "); } InputStream o = null; try (final Statement stat = conn.createStatement(); final ResultSet rs = stat.executeQuery(sql);) { while (rs.next()) { o = rs.getBinaryStream(fieldname); } } catch (SQLException sqlE) { logger.warn("Failed to get DB Stream", sqlE); } return o; } public void getAndExecute(final String sql, final Executor executor) throws SQLException { try (final Statement stat = conn.createStatement(); final ResultSet rs = stat.executeQuery(sql);) { while (rs.next()) { executor.execute(rs); } } catch (SQLException sqlE) { logger.warn("Failed to get DB Stream", sqlE); } } interface Executor { public void execute(ResultSet rs) throws SQLException; } }