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 }