001/** 002 * Copyright 2005-2016 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.kew.docsearch; 017 018import org.apache.commons.lang.ObjectUtils; 019import org.apache.commons.lang.StringUtils; 020import org.kuali.rice.kew.api.KewApiConstants; 021import org.kuali.rice.kew.api.document.attribute.DocumentAttributeFactory; 022import org.kuali.rice.kew.api.document.attribute.DocumentAttributeString; 023 024import javax.persistence.Column; 025import javax.persistence.Entity; 026import javax.persistence.Inheritance; 027import javax.persistence.InheritanceType; 028import javax.persistence.NamedQueries; 029import javax.persistence.NamedQuery; 030import javax.persistence.Table; 031import java.io.Serializable; 032import java.sql.ResultSet; 033import java.sql.SQLException; 034 035/** 036 * 037 * @author Kuali Rice Team (rice.collab@kuali.org) 038 */ 039@Entity 040@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS) 041@Table(name="KREW_DOC_HDR_EXT_T") 042@NamedQueries({ 043 @NamedQuery(name="SearchableAttributeStringValue.FindByDocumentId", query="select s from " 044 + "SearchableAttributeStringValue as s where s.documentId = :documentId"), 045 @NamedQuery(name="SearchableAttributeStringValue.FindByKey", query="select s from SearchableAttributeStringValue as " 046 + "s where s.documentId = :documentId and s.searchableAttributeKey = :searchableAttributeKey") 047}) 048public class SearchableAttributeStringValue extends SearchableAttributeBase implements CaseAwareSearchableAttributeValue, Serializable { 049 050 private static final long serialVersionUID = 8696089933682052078L; 051 052 private static final String ATTRIBUTE_DATABASE_TABLE_NAME = "KREW_DOC_HDR_EXT_T"; 053 private static final boolean DEFAULT_WILDCARD_ALLOWANCE_POLICY = true; 054 private static final boolean ALLOWS_RANGE_SEARCH = true; 055 private static final boolean ALLOWS_CASE_INSENSITIVE_SEARCH = true; 056 private static final String ATTRIBUTE_XML_REPRESENTATION = KewApiConstants.SearchableAttributeConstants.DATA_TYPE_STRING; 057 private static final int STRING_MAX_LENGTH = 2000; // should match table creation 058 059 @Column(name="VAL") 060 private String searchableAttributeValue; 061 062 /** 063 * Default constructor. 064 */ 065 public SearchableAttributeStringValue() { 066 super(); 067 this.ojbConcreteClass = this.getClass().getName(); 068 } 069 070 @Override 071 public void setupAttributeValue(String value) { 072 this.setSearchableAttributeValue(value); 073 } 074 075 @Override 076 public void setupAttributeValue(ResultSet resultSet, String columnName) throws SQLException { 077 this.setSearchableAttributeValue(resultSet.getString(columnName)); 078 } 079 080 @Override 081 public String getSearchableAttributeDisplayValue() { 082 return getSearchableAttributeValue(); 083 } 084 085 @Override 086 public String getAttributeDataType() { 087 return ATTRIBUTE_XML_REPRESENTATION; 088 } 089 090 @Override 091 public String getAttributeTableName() { 092 return ATTRIBUTE_DATABASE_TABLE_NAME; 093 } 094 095 @Override 096 public boolean allowsWildcards() { 097 return DEFAULT_WILDCARD_ALLOWANCE_POLICY; 098 } 099 100 @Override 101 public boolean allowsCaseInsensitivity() { 102 return ALLOWS_CASE_INSENSITIVE_SEARCH; 103 } 104 105 @Override 106 public boolean allowsRangeSearches() { 107 return ALLOWS_RANGE_SEARCH; 108 } 109 110 /** 111 * @return true if the {@code valueEntered} parameter is not null and is equal to or 112 * less than the specified max length defined by {@link #STRING_MAX_LENGTH}. 113 */ 114 @Override 115 public boolean isPassesDefaultValidation(String valueEntered) { 116 if (valueEntered != null && (valueEntered.length() > STRING_MAX_LENGTH)) { 117 return false; 118 } 119 return true; 120 } 121 122 @Override 123 public Boolean isRangeValid(String lowerValue, String upperValue) { 124 return isRangeValid(lowerValue, upperValue, true); 125 } 126 127 @Override 128 public Boolean isRangeValid(String lowerValue, String upperValue, boolean caseSensitive) { 129 if (allowsRangeSearches()) { 130 return StringUtils.isBlank(lowerValue) || 131 StringUtils.isBlank(upperValue) || 132 (caseSensitive ? 133 ObjectUtils.compare(lowerValue, upperValue) <= 0 : 134 String.CASE_INSENSITIVE_ORDER.compare(lowerValue, upperValue) <= 0); 135 } 136 return null; 137 } 138 139 @Override 140 public String getSearchableAttributeValue() { 141 return searchableAttributeValue; 142 } 143 144 public void setSearchableAttributeValue(String searchableAttributeValue) { 145 this.searchableAttributeValue = searchableAttributeValue; 146 } 147 148 @Override 149 public DocumentAttributeString toDocumentAttribute() { 150 return DocumentAttributeFactory.createStringAttribute(getSearchableAttributeKey(), getSearchableAttributeValue()); 151 } 152 153} 154