1 28 29 package com.opencms.template.cache; 30 31 import org.opencms.file.CmsObject; 32 import org.opencms.main.CmsEvent; 33 import org.opencms.main.CmsException; 34 import org.opencms.main.CmsLog; 35 import org.opencms.main.I_CmsEventListener; 36 import org.opencms.main.OpenCms; 37 38 import java.util.Hashtable ; 39 import java.util.Vector ; 40 41 55 public class CmsElementCache extends Object implements I_CmsEventListener { 56 57 private CmsUriLocator m_uriLocator; 58 59 private CmsElementLocator m_elementLocator; 60 61 private int m_variantCachesize; 62 63 public CmsElementCache() { 64 this(10000, 50000, 100); 65 } 66 67 public CmsElementCache(int uriCachesize, int elementCachesize, int variantCachesize) { 68 m_uriLocator = new CmsUriLocator(uriCachesize); 69 m_elementLocator = new CmsElementLocator(elementCachesize); 70 if (variantCachesize < 2) { 71 variantCachesize = 100; 72 } 73 m_variantCachesize = variantCachesize; 74 75 if (CmsLog.INIT.isInfoEnabled()) { 76 CmsLog.INIT.info(". Legacy element cache : Uri cache size = " + uriCachesize); 77 CmsLog.INIT.info(". Legacy element cache : Element cache size = " + elementCachesize); 78 CmsLog.INIT.info(". Legacy element cache : Variant cache size = " + variantCachesize); 79 } 80 81 OpenCms.addCmsEventListener(this, new int[] { 83 I_CmsEventListener.EVENT_PUBLISH_PROJECT, 84 I_CmsEventListener.EVENT_CLEAR_CACHES, 85 I_CmsEventListener.EVENT_CLEAR_ONLINE_CACHES, 86 I_CmsEventListener.EVENT_CLEAR_OFFLINE_CACHES 87 }); 88 } 89 90 public CmsUriLocator getUriLocator() { 91 return m_uriLocator; 92 } 93 94 public CmsElementLocator getElementLocator() { 95 return m_elementLocator; 96 } 97 98 101 public int getVariantCachesize() { 102 return m_variantCachesize; 103 } 104 105 111 public void cleanupCache(Vector changedResources, Vector changedModuleRes) { 112 Vector resForUpdate = new Vector (); 114 if (changedResources != null) { 115 for (int i = 0; i < changedResources.size(); i++) { 116 String current = (String ) changedResources.elementAt(i); 117 resForUpdate.add(current); 118 resForUpdate.add(current + com.opencms.core.I_CmsConstants.C_XML_CONTROL_FILE_SUFFIX); 119 } 120 } 121 m_uriLocator.deleteUris(resForUpdate); 122 m_elementLocator.cleanupElementCache(resForUpdate); 123 124 m_elementLocator.cleanupDependencies(changedResources); 126 m_elementLocator.cleanupDependencies(changedModuleRes); 127 } 128 129 133 public void clearCache() { 134 m_elementLocator.clearCache(); 135 m_uriLocator.clearCache(); 136 } 137 138 143 public void printCacheInfo(int which) { 144 if (which == 1) { 145 m_elementLocator.printCacheInfo(which); 147 } 148 } 149 150 155 public Vector getCacheInfo() { 156 Vector uriInfo = m_uriLocator.getCacheInfo(); 157 Vector elementInfo = m_elementLocator.getCacheInfo(); 158 for (int i = 0; i < elementInfo.size(); i++) { 159 uriInfo.addElement(elementInfo.elementAt(i)); 160 } 161 return uriInfo; 162 } 163 164 public byte[] callCanonicalRoot(CmsObject cms, Hashtable parameters) throws CmsException { 165 CmsUri uri = m_uriLocator.get(new CmsUriDescriptor(cms.getRequestContext().getUri())); 166 return uri.callCanonicalRoot(this, cms, parameters); 167 } 168 169 public byte[] callCanonicalRoot(CmsObject cms, Hashtable parameters, String uriParam) throws CmsException { 170 CmsUri uri = m_uriLocator.get(new CmsUriDescriptor(uriParam)); 171 return uri.callCanonicalRoot(this, cms, parameters); 172 } 173 174 177 public void cmsEvent(CmsEvent event) { 178 switch (event.getType()) { 179 case I_CmsEventListener.EVENT_PUBLISH_PROJECT : 180 case I_CmsEventListener.EVENT_CLEAR_CACHES : 181 case I_CmsEventListener.EVENT_CLEAR_ONLINE_CACHES: 182 case I_CmsEventListener.EVENT_CLEAR_OFFLINE_CACHES: 183 clearCache(); 184 break; 185 } 186 } 187 }
| Popular Tags
|