001 /**
002 * Copyright 2010 The Kuali Foundation Licensed under the
003 * Educational Community License, Version 2.0 (the "License"); you may
004 * not use this file except in compliance with the License. You may
005 * obtain a copy of the License at
006 *
007 * http://www.osedu.org/licenses/ECL-2.0
008 *
009 * Unless required by applicable law or agreed to in writing,
010 * software distributed under the License is distributed on an "AS IS"
011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012 * or implied. See the License for the specific language governing
013 * permissions and limitations under the License.
014 */
015
016 package org.kuali.student.common.test.spring;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import net.sf.ehcache.CacheManager;
022 import net.sf.ehcache.Element;
023 import net.sf.ehcache.ObjectExistsException;
024
025 import org.aopalliance.aop.Advice;
026 import org.apache.log4j.Logger;
027 import org.aspectj.lang.ProceedingJoinPoint;
028
029 @Deprecated
030 public class IdToObjectEhcacheAdvice implements Advice {
031 final Logger LOG = Logger.getLogger(IdToObjectEhcacheAdvice.class);
032
033 private CacheManager cacheManager;
034 private String cacheName;
035
036 /**
037 *
038 */
039 public IdToObjectEhcacheAdvice() {
040 super();
041 }
042
043 /**
044 * @param cacheName
045 */
046 public IdToObjectEhcacheAdvice(String cacheName) {
047 super();
048 this.cacheName = cacheName;
049 }
050
051 public Object invalidateCache(ProceedingJoinPoint pjp) throws Throwable {
052 if (cacheManager == null) {
053 cacheManager = CacheManager.getInstance();
054 try {
055 cacheManager.addCache(cacheName);
056 } catch (ObjectExistsException e) {
057
058 }
059 }
060 LOG.info("Invalidating Cache");
061 cacheManager.getCache(cacheName).remove(pjp.getArgs()[0]);
062 return pjp.proceed();
063 }
064
065 @SuppressWarnings("unchecked")
066 public Object getFromCache(ProceedingJoinPoint pjp) throws Throwable {
067 if (cacheManager == null) {
068 cacheManager = CacheManager.getInstance();
069 try {
070 cacheManager.addCache(cacheName);
071 } catch (ObjectExistsException e) {
072
073 }
074 }
075 // Have two caches for the one object? one by id, the other by method
076 // call?
077 if (pjp.getArgs().length == 1 && pjp.getArgs()[0] instanceof List) {
078 List<Object> results = new ArrayList<Object>();
079 List<String> uncachedIdList = new ArrayList<String>();
080 for (String id : (List<String>) pjp.getArgs()[0]) {
081 // Look in the cache
082 LOG.info("Looking in Cache");
083 Element cachedResult = cacheManager.getCache(cacheName).get(id);
084 if (cachedResult == null) {
085 uncachedIdList.add(id);
086 } else {
087 results.add(cachedResult.getValue());
088 }
089 }
090 if (uncachedIdList.size() > 0) {
091 List<Idable> uncachedResults = (List<Idable>) pjp.proceed();
092 if (uncachedResults != null) {
093 for (Idable uncachedResult : uncachedResults) {
094 // Add to the cache and add to results
095 LOG.info("Storing to Cache");
096 results.add(uncachedResult);
097 cacheManager.getCache(cacheName).put(
098 new Element(uncachedResult.getId(),
099 uncachedResult));
100 }
101 }
102 }
103 return results;
104 }
105 if (pjp.getArgs().length == 1 && pjp.getArgs()[0] instanceof String) {
106 String id = (String) pjp.getArgs()[0];
107 LOG.info("Looking in Cache");
108 Element resultElement = cacheManager.getCache(cacheName).get(id);
109 Object result;
110 if (resultElement == null) {
111 result = pjp.proceed();
112 LOG.info("Storing to Cache");
113 cacheManager.getCache(cacheName).put(new Element(id, result));
114 } else {
115 result = resultElement.getValue();
116 }
117 return result;
118 }
119
120 return pjp.proceed();
121 }
122
123 /**
124 * @return the cacheName
125 */
126 public String getCacheName() {
127 return cacheName;
128 }
129
130 /**
131 * @param cacheName
132 * the cacheName to set
133 */
134 public void setCacheName(String cacheName) {
135 this.cacheName = cacheName;
136 }
137
138 }