1
22
23 package com.liferay.portal.servlet.filters.layoutcache;
24
25 import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
26 import com.liferay.portal.kernel.cache.PortalCache;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29 import com.liferay.portal.kernel.util.StringPool;
30 import com.liferay.portal.kernel.util.Validator;
31 import com.liferay.util.servlet.filters.CacheResponseData;
32
33 import java.util.Map;
34 import java.util.Set;
35 import java.util.concurrent.ConcurrentHashMap;
36
37
44 public class LayoutCacheUtil {
45
46 public static String CACHE_NAME = LayoutCacheUtil.class.getName();
47
48 public static void clearCache() {
49 MultiVMPoolUtil.clear(CACHE_NAME);
50 }
51
52 public static void clearCache(long companyId) {
53 String groupKey = _encodeGroupKey(companyId);
54
55 MultiVMPoolUtil.clearGroup(_groups, groupKey, _cache);
56
57 if (_log.isInfoEnabled()) {
58 _log.info("Cleared layout cache for " + companyId);
59 }
60 }
61
62 public static CacheResponseData getCacheResponseData(
63 long companyId, String key) {
64
65 if (Validator.isNull(key)) {
66 return null;
67 }
68
69 key = _encodeKey(companyId, key);
70
71 CacheResponseData data =
72 (CacheResponseData)MultiVMPoolUtil.get(_cache, key);
73
74 return data;
75 }
76
77 public static void putCacheResponseData(
78 long companyId, String key, CacheResponseData data) {
79
80 if (data != null) {
81 key = _encodeKey(companyId, key);
82
83 String groupKey = _encodeGroupKey(companyId);
84
85 MultiVMPoolUtil.put(_cache, key, _groups, groupKey, data);
86 }
87 }
88
89 private static String _encodeGroupKey(long companyId) {
90 StringBuilder sb = new StringBuilder();
91
92 sb.append(CACHE_NAME);
93 sb.append(StringPool.POUND);
94 sb.append(companyId);
95
96 return sb.toString();
97 }
98
99 private static String _encodeKey(long companyId, String key) {
100 StringBuilder sb = new StringBuilder();
101
102 sb.append(CACHE_NAME);
103 sb.append(StringPool.POUND);
104 sb.append(companyId);
105 sb.append(StringPool.POUND);
106 sb.append(key);
107
108 return sb.toString();
109 }
110
111 private static Log _log = LogFactoryUtil.getLog(LayoutCacheUtil.class);
112
113 private static PortalCache _cache = MultiVMPoolUtil.getCache(CACHE_NAME);
114
115 private static Map<String, Set<String>> _groups =
116 new ConcurrentHashMap<String, Set<String>>();
117
118 }