001 /** 002 * Copyright 2005-2012 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 */ 016 package org.kuali.rice.kim.impl.common.attribute; 017 018 import javax.persistence.Transient; 019 020 import org.apache.commons.collections.CollectionUtils; 021 import org.apache.commons.lang.StringUtils; 022 import org.kuali.rice.kim.api.common.attribute.KimAttributeDataContract; 023 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 024 import org.kuali.rice.kim.api.type.KimTypeAttribute; 025 import org.kuali.rice.kim.impl.type.KimTypeBo; 026 import org.kuali.rice.krad.bo.PersistableBusinessObjectBase; 027 import org.kuali.rice.krad.util.ObjectUtils; 028 029 import java.util.ArrayList; 030 import java.util.Collection; 031 import java.util.HashMap; 032 import java.util.List; 033 import java.util.Map; 034 035 public abstract class KimAttributeDataBo extends PersistableBusinessObjectBase implements KimAttributeDataContract { 036 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(KimAttributeDataBo.class); 037 private static final long serialVersionUID = 1L; 038 039 private String id; 040 private String attributeValue; 041 private String kimAttributeId; 042 private KimAttributeBo kimAttribute; 043 private String kimTypeId; 044 @Transient 045 private KimTypeBo kimType; 046 047 public abstract void setAssignedToId(String s); 048 049 @Override 050 public KimAttributeBo getKimAttribute() { 051 if(ObjectUtils.isNull(this.kimAttribute) 052 && StringUtils.isNotBlank(kimAttributeId)) { 053 this.refreshReferenceObject("kimAttribute"); 054 } 055 return kimAttribute; 056 } 057 058 @Override 059 public KimTypeBo getKimType() { 060 if (kimType == null && StringUtils.isNotEmpty(id)) { 061 kimType = KimTypeBo.from(KimApiServiceLocator.getKimTypeInfoService().getKimType(kimTypeId)); 062 } 063 return kimType; 064 } 065 066 public static <T extends KimAttributeDataBo> Map<String, String> toAttributes(Collection<T> bos) { 067 Map<String, String> m = new HashMap<String, String>(); 068 if(CollectionUtils.isNotEmpty(bos)) { 069 for (T it : bos) { 070 if (it != null) { 071 KimTypeAttribute attribute = null; 072 if ( it.kimType != null ) { 073 attribute = KimTypeBo.to(it.kimType).getAttributeDefinitionById(it.getKimAttributeId()); 074 } 075 if ( attribute != null ) { 076 m.put(attribute.getKimAttribute().getAttributeName(), it.getAttributeValue()); 077 } else { 078 m.put(it.getKimAttribute().getAttributeName(), it.getAttributeValue()); 079 } 080 } 081 } 082 } 083 return m; 084 } 085 086 /** creates a list of KimAttributeDataBos from attributes, kimTypeId, and assignedToId. */ 087 public static <T extends KimAttributeDataBo> List<T> createFrom(Class<T> type, Map<String, String> attributes, String kimTypeId) { 088 if (attributes == null) { 089 //purposely not using Collections.emptyList() b/c we do not want to return an unmodifiable list. 090 return new ArrayList<T>(); 091 } 092 List<T> attrs = new ArrayList<T>(); 093 for (Map.Entry<String, String> it : attributes.entrySet()) { 094 //return attributes.entrySet().collect { 095 KimTypeAttribute attr = KimApiServiceLocator.getKimTypeInfoService().getKimType(kimTypeId).getAttributeDefinitionByName(it.getKey()); 096 if (attr != null && StringUtils.isNotBlank(it.getValue())) { 097 try { 098 T newDetail = type.newInstance(); 099 newDetail.setKimAttributeId(attr.getKimAttribute().getId()); 100 newDetail.setKimAttribute(KimAttributeBo.from(attr.getKimAttribute())); 101 newDetail.setKimTypeId(kimTypeId); 102 newDetail.setAttributeValue(it.getValue()); 103 attrs.add(newDetail); 104 } catch (InstantiationException e) { 105 LOG.error(e.getMessage(), e); 106 } catch (IllegalAccessException e) { 107 LOG.error(e.getMessage(), e); 108 } 109 110 } 111 } 112 return attrs; 113 } 114 115 @Override 116 public String getId() { 117 return id; 118 } 119 120 public void setId(String id) { 121 this.id = id; 122 } 123 124 @Override 125 public String getAttributeValue() { 126 return attributeValue; 127 } 128 129 public void setAttributeValue(String attributeValue) { 130 this.attributeValue = attributeValue; 131 } 132 133 public String getKimAttributeId() { 134 return kimAttributeId; 135 } 136 137 public void setKimAttributeId(String kimAttributeId) { 138 this.kimAttributeId = kimAttributeId; 139 } 140 141 @Override 142 public String getKimTypeId() { 143 return kimTypeId; 144 } 145 146 public void setKimTypeId(String kimTypeId) { 147 this.kimTypeId = kimTypeId; 148 } 149 150 public void setKimType(KimTypeBo kimType) { 151 this.kimType = kimType; 152 } 153 154 public void setKimAttribute(KimAttributeBo kimAttribute) { 155 this.kimAttribute = kimAttribute; 156 } 157 }