001 /** 002 * Copyright 2005-2013 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.kns.web; 017 018 import org.kuali.rice.core.api.CoreApiServiceLocator; 019 import org.kuali.rice.core.api.config.property.ConfigurationService; 020 021 import java.util.HashMap; 022 import java.util.HashSet; 023 import java.util.LinkedList; 024 import java.util.Map; 025 import java.util.Queue; 026 import java.util.Set; 027 import java.util.UUID; 028 029 030 /** 031 * A class which will hold a Map of editable properties, dropping editable properties when too many 032 * are filled in. 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 * 036 */ 037 @Deprecated 038 public class EditablePropertiesHistoryHolder implements java.io.Serializable { 039 private Map<String, Set<String>> editablePropertiesMap; 040 private Integer maxLength = null; 041 private Queue<String> historyOrder; 042 private static final String EDITABLE_PROPERTIES_HISTORY_SIZE_PROPERTY_NAME = "kns.editable.properties.history.size"; 043 private transient ConfigurationService configurationService; 044 045 /** 046 * Constructs the EditablePropertiesHistoryHolder 047 * 048 */ 049 public EditablePropertiesHistoryHolder() { 050 editablePropertiesMap = new HashMap<String, Set<String>>(); 051 historyOrder = new LinkedList<String>(); 052 } 053 054 /** 055 * @return the maximum length of the history that this will hold 056 */ 057 public int getMaxHistoryLength() { 058 if (maxLength == null) { 059 final String historyLengthAsString = getConfigurationService().getPropertyValueAsString( 060 EditablePropertiesHistoryHolder.EDITABLE_PROPERTIES_HISTORY_SIZE_PROPERTY_NAME); 061 if (historyLengthAsString == null) { 062 maxLength = new Integer(20); 063 } else { 064 try { 065 maxLength = new Integer(historyLengthAsString); 066 } catch (NumberFormatException nfe) { 067 throw new RuntimeException("Cannot convert property "+EditablePropertiesHistoryHolder.EDITABLE_PROPERTIES_HISTORY_SIZE_PROPERTY_NAME+" with value "+historyLengthAsString+" to integer", nfe); 068 } 069 } 070 } 071 return maxLength.intValue(); 072 } 073 074 /** 075 * Adds a Set of editable property names to the history, keyed with the given guid String. If the editable properties exceeds the buffer size, 076 * the earliest editable properties will be bumped 077 * @param editableProperties the Set of editable property names to save in the history 078 * @return a String to act as a key (or guid) to the editable properties 079 */ 080 public String addEditablePropertiesToHistory(Set<String> editableProperties) { 081 String guid = generateNewGuid(); 082 083 if (getHistoryOrder().size() > getMaxHistoryLength()) { 084 final String guidForRemoval = getHistoryOrder().remove(); 085 getEditablePropertiesMap().remove(guidForRemoval); 086 } 087 getHistoryOrder().add(guid); 088 getEditablePropertiesMap().put(guid, editableProperties); 089 090 return guid; 091 } 092 093 /** 094 * 095 * @return a newly generated Guid to act as a key to an editable properties Set 096 */ 097 public String generateNewGuid() { 098 final String guid = UUID.randomUUID().toString(); 099 return guid; 100 } 101 102 /** 103 * Returns the editable properties registered with the current guid 104 * @param guid the guid to find editable properties for 105 * @return a Set<String> of editable properties 106 */ 107 public Set<String> getEditableProperties(String guid) { 108 return getEditablePropertiesMap().get(guid); 109 } 110 111 /** 112 * Clears out the editable properties associated with the given guid 113 * @param guid the guid to clear out editable properties for 114 */ 115 public void clearEditableProperties(String guid) { 116 getEditablePropertiesMap().put(guid, createNewEditablePropertiesEntry()); 117 } 118 119 /** 120 * @return the order of the entries as they chronologically were created 121 */ 122 protected Queue<String> getHistoryOrder() { 123 return historyOrder; 124 } 125 126 /** 127 * @return the Map which associates editable property guids with Sets of editable property names 128 */ 129 protected Map<String, Set<String>> getEditablePropertiesMap() { 130 return editablePropertiesMap; 131 } 132 133 /** 134 * @return a new Entry to hold the names of editable properties 135 */ 136 protected Set<String> createNewEditablePropertiesEntry() { 137 return new HashSet<String>(); 138 } 139 140 /** 141 * @return an implementation of the ConfigurationService 142 */ 143 protected ConfigurationService getConfigurationService() { 144 if (configurationService == null) { 145 configurationService = CoreApiServiceLocator.getKualiConfigurationService(); 146 } 147 return configurationService; 148 } 149 }