001/* 002 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020 021package cascading.property; 022 023import java.util.Set; 024import java.util.TreeSet; 025 026import cascading.util.Util; 027import org.slf4j.Logger; 028import org.slf4j.LoggerFactory; 029 030import static cascading.util.Util.join; 031 032/** Class UnitOfWorkDef is the base class for framework specific fluent definition interfaces. */ 033public class UnitOfWorkDef<T> 034 { 035 private static final Logger LOG = LoggerFactory.getLogger( UnitOfWorkDef.class ); 036 037 protected String name; 038 protected Set<String> tags = new TreeSet<String>(); 039 040 public UnitOfWorkDef() 041 { 042 } 043 044 protected UnitOfWorkDef( UnitOfWorkDef<T> unitOfWorkDef ) 045 { 046 this.name = unitOfWorkDef.name; 047 this.tags.addAll( unitOfWorkDef.tags ); 048 } 049 050 public String getName() 051 { 052 return name; 053 } 054 055 /** 056 * Method setName sets the UnitOfWork name. 057 * 058 * @param name type String 059 * @return this 060 */ 061 public T setName( String name ) 062 { 063 this.name = name; 064 return (T) this; 065 } 066 067 public String getTags() 068 { 069 return join( tags, "," ); 070 } 071 072 /** 073 * Method addTag will associate a "tag" with this UnitOfWork. A UnitOfWork can have an unlimited number of tags. 074 * <p/> 075 * Tags allow for search and organization by management tools. 076 * <p/> 077 * Tag values are opaque, but adopting a simple convention of 'category:value' allows for complex use cases. 078 * <p/> 079 * Note that tags should not contain whitespace characters, even though this is not an error, a warning will be 080 * issues. 081 * 082 * @param tag type String 083 * @return this 084 */ 085 public T addTag( String tag ) 086 { 087 if( tag == null || tag.isEmpty() ) 088 return (T) this; 089 090 tag = tag.trim(); 091 092 if( Util.containsWhitespace( tag ) ) 093 LOG.warn( "tags should not contain whitespace characters: '{}'", tag ); 094 095 tags.add( tag ); 096 097 return (T) this; 098 } 099 100 /** 101 * Method addTags will associate the given "tags" with this UnitOfWork. A UnitOfWork can have an unlimited number of tags. 102 * <p/> 103 * Tags allow for search and organization by management tools. 104 * <p/> 105 * Tag values are opaque, but adopting a simple convention of 'category:value' allows for complex use cases. 106 * <p/> 107 * Note that tags should not contain whitespace characters, even though this is not an error, a warning will be 108 * issues. 109 * 110 * @param tags type String 111 * @return this 112 */ 113 public T addTags( String... tags ) 114 { 115 for( String tag : tags ) 116 addTag( tag ); 117 118 return (T) this; 119 } 120 }