001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase; 019 020import org.apache.yetus.audience.InterfaceAudience; 021 022/** 023 * Factory to create Tags. 024 */ 025@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC) 026public final class TagBuilderFactory { 027 028 public static TagBuilder create() { 029 return new TagBuilderImpl(); 030 } 031} 032 033/** 034 * Builder implementation to create {@link Tag}<br> 035 * Call setTagValue(byte[]) method to create {@link ArrayBackedTag} 036 */ 037class TagBuilderImpl implements TagBuilder { 038 // This assumes that we never create tag with value less than 0. 039 private byte tagType = (byte) -1; 040 private byte[] tagBytes = null; 041 public static final String TAG_TYPE_NOT_SET_EXCEPTION = "Need to set type of the tag."; 042 public static final String TAG_VALUE_NULL_EXCEPTION = "TagBytes can't be null"; 043 044 @Override 045 public TagBuilder setTagType(byte tagType) { 046 this.tagType = tagType; 047 return this; 048 } 049 050 @Override 051 public TagBuilder setTagValue(byte[] tagBytes) { 052 this.tagBytes = tagBytes; 053 return this; 054 } 055 056 private void validate() { 057 if (tagType == -1) { 058 throw new IllegalArgumentException(TAG_TYPE_NOT_SET_EXCEPTION); 059 } 060 if (tagBytes == null) { 061 throw new IllegalArgumentException(TAG_VALUE_NULL_EXCEPTION); 062 } 063 } 064 065 @Override 066 public Tag build() { 067 validate(); 068 return new ArrayBackedTag(tagType, tagBytes); 069 } 070}