Java tutorial
/******************************************************************************* * * Copyright 2012-2015, the original author or authors. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obta 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.flipkart.aesop.hbasedatalayer.delete; import com.flipkart.aesop.destinationoperation.DeleteDestinationStoreProcessor; import com.flipkart.aesop.destinationoperation.JDBCDataLayer; import com.flipkart.aesop.destinationoperation.utils.DataLayerConstants; import com.flipkart.aesop.destinationoperation.utils.DataLayerHelper; import com.flipkart.aesop.event.AbstractEvent; import com.flipkart.aesop.hbasedatalayer.upsert.HBaseUpsertDataLayer; import com.linkedin.databus.client.pub.ConsumerCallbackResult; import com.linkedin.databus.core.DbusOpcode; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.trpr.platform.core.impl.logging.LogFactory; import org.trpr.platform.core.spi.logging.Logger; import java.util.Map; /** * HBase Delete Data Layer. Persists {@link DbusOpcode#DELETE} events to HBase through Phoenix. * @author Prakhar Jain * @see HBaseUpsertDataLayer */ public class HBaseDeleteDataLayer extends DeleteDestinationStoreProcessor implements JDBCDataLayer { /** Logger for this class. */ public static final Logger LOGGER = LogFactory.getLogger(HBaseUpsertDataLayer.class); /** JDBC Template Map, with Namespace name as key and the corresponding JDBC template as value. */ private Map<String, NamedParameterJdbcTemplate> jdbcTemplateMap; /** * Field Constructor. * @param jdbcTemplateMap jdbcTemplateMap */ public HBaseDeleteDataLayer(Map<String, NamedParameterJdbcTemplate> jdbcTemplateMap) { this.jdbcTemplateMap = jdbcTemplateMap; } public Map<String, NamedParameterJdbcTemplate> getJdbcTemplateMap() { return jdbcTemplateMap; } @Override protected ConsumerCallbackResult delete(AbstractEvent event) { String deleteQuery = generateDeleteQuery(event); NamedParameterJdbcTemplate jdbcTemplate = jdbcTemplateMap.get(event.getNamespaceName()); Map<String, Object> nullValueColumnMapping = DataLayerHelper .generateColumnMappingWithNullValues(event.getFieldMapPair(), event.getPrimaryKeySet()); jdbcTemplate.update(deleteQuery, nullValueColumnMapping); return ConsumerCallbackResult.SUCCESS; } /** * Generates Delete Query using {@link #buildQuery(String, String, StringBuilder, StringBuilder)} and * {@link #populateQueryParts(Map, StringBuilder, StringBuilder)} helper functions. * @param event event * @return Delete Query. */ private String generateDeleteQuery(AbstractEvent event) { StringBuilder columnNameStringBuilder = new StringBuilder(); StringBuilder placeholderStringBuilder = new StringBuilder(); populateQueryParts(event.getFieldMapPair(), columnNameStringBuilder, placeholderStringBuilder); return buildQuery(event.getNamespaceName(), event.getEntityName(), columnNameStringBuilder, placeholderStringBuilder); } /** * Helper function for {@link #generateDeleteQuery(AbstractEvent)}. * @param namespace namespace * @param entity entity * @param columnNameStringBuilder columnNameStringBuilder * @param placeholderStringBuilder placeholderStringBuilder * @return Delete Query */ private String buildQuery(String namespace, String entity, StringBuilder columnNameStringBuilder, StringBuilder placeholderStringBuilder) { StringBuilder upsertQuery = new StringBuilder(); upsertQuery.append("UPSERT INTO "); if (namespace != null && !"".equals(namespace)) { upsertQuery.append(namespace + "."); } upsertQuery.append(entity + "("); upsertQuery.append(columnNameStringBuilder.substring(0, columnNameStringBuilder.length() - 1)); upsertQuery.append(") VALUES("); upsertQuery.append(placeholderStringBuilder.substring(0, placeholderStringBuilder.length() - 1)); upsertQuery.append(")"); return upsertQuery.toString(); } /** * Helper function for {@link #generateDeleteQuery(AbstractEvent)}. * @param fieldMap * @param columnNameStringBuilder * @param placeholderStringBuilder */ private void populateQueryParts(Map<String, Object> fieldMap, StringBuilder columnNameStringBuilder, StringBuilder placeholderStringBuilder) { for (String columnName : fieldMap.keySet()) { columnNameStringBuilder.append(columnName + DataLayerConstants.COMMA); placeholderStringBuilder.append(DataLayerConstants.COLON + columnName + DataLayerConstants.COMMA); } } }