/** * Company * Copyright (C) 2014-2017 All Rights Reserved. */ package com.bootcwenao.bigdataserver.hbase.handler; import com.bootcwenao.bigdataserver.utils.HumpNameOrMethodUtils; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapper; import org.springframework.beans.PropertyAccessorFactory; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.beans.PropertyDescriptor; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * 按qualifier返回结果 * @author cwenao * @version $Id HbaseFindBuilder.java, v 0.1 2017-02-20 16:05 cwenao Exp $$ */ public class HbaseFindBuilder<T> { private String family; private Result result; private String qualifier; private Map<String, PropertyDescriptor> fieldsMap; private Set<String> propertiesSet; private Set<String> qualifierSet; private BeanWrapper beanWrapper; private T tBean; /** * 按family查询 * @param family * @param result * @param tclazz */ public HbaseFindBuilder(String family, Result result, Class<T> tclazz) { this.family = family; this.result = result; fieldsMap = new HashMap(); propertiesSet = new HashSet<>(); reflectBean(tclazz); } /** * return the result by qulifier * @param qualifier * @return */ public HbaseFindBuilder build(String qualifier) { return this.build(qualifier,""); } /** * by multiple qualifier * @param qualifiers * @return */ public HbaseFindBuilder build(String... qualifiers) { if (qualifiers == null || qualifiers.length == 0) { return this; } PropertyDescriptor p = null; byte[] qualifierByte = null; for (String qualifier : qualifiers) { if (StringUtils.isEmpty(qualifier)) { continue; } p = fieldsMap.get(qualifier.trim()); qualifierByte = result.getValue(family.getBytes(), HumpNameOrMethodUtils.humpEntityForVar(qualifier).getBytes()); if (qualifierByte != null && qualifierByte.length > 0) { beanWrapper.setPropertyValue(p.getName(),Bytes.toString(qualifierByte)); propertiesSet.add(p.getName()); } } return this; } /** * by map * @param map * @return */ public HbaseFindBuilder build(Map<String,String> map) { if (map == null || map.size() <= 0) { return this; } PropertyDescriptor p = null; byte[] qualifierByte = null; for (String value : map.values()) { if (StringUtils.isEmpty(value)) { continue; } p = fieldsMap.get(value.trim()); qualifierByte = result.getValue(family.getBytes(), HumpNameOrMethodUtils.humpEntityForVar(value).getBytes()); if (qualifierByte != null && qualifierByte.length > 0) { beanWrapper.setPropertyValue(p.getName(), Bytes.toString(qualifierByte)); propertiesSet.add(p.getName()); } } return this; } private void reflectBean(Class<T> tclazz) { tBean = BeanUtils.instantiate(tclazz); PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(tclazz); for (PropertyDescriptor p : propertyDescriptors) { if (p.getWriteMethod() != null) { this.fieldsMap.put(p.getName(), p); } } beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(tBean); } public T fetch() { if (!CollectionUtils.isEmpty(propertiesSet)) { return this.tBean; } return null; } }