blob: 59160aa05f5e34ebff8b07603148a0cb2a986263 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.apache.ofbiz.webtools;
import java.util.Iterator;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ofbiz.base.util.UtilDateTime;
import org.apache.ofbiz.base.util.UtilHttp;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.cache.UtilCache;
import org.apache.ofbiz.security.Security;
/**
* Contains events for the UtilCache class; must be external to access security resources
*/
public final class UtilCacheEvents {
private static final String err_resource = "WebtoolsErrorUiLabels";
private UtilCacheEvents() {}
/** An HTTP WebEvent handler the specified element from the specified cache
* @param request The HTTP request object for the current JSP or Servlet request.
* @param response The HTTP response object for the current JSP or Servlet request.
* @return return an HTTP WebEvent handler the specified element from the specified cache
*/
public static String removeElementEvent(HttpServletRequest request, HttpServletResponse response) {
String errMsg = "";
Locale locale = UtilHttp.getLocale(request);
Security security = (Security) request.getAttribute("security");
if (!security.hasPermission("UTIL_CACHE_EDIT", request.getSession())) {
errMsg = UtilProperties.getMessage(err_resource, "utilCacheEvents.permissionEdit", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
String name = request.getParameter("UTIL_CACHE_NAME");
if (name == null) {
errMsg = UtilProperties.getMessage(err_resource, "utilCacheEvents.noCacheNameSpecified", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
String numString = request.getParameter("UTIL_CACHE_ELEMENT_NUMBER");
if (numString == null) {
errMsg = UtilProperties.getMessage(err_resource, "utilCacheEvents.noElementNumberSpecified", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", "");
return "error";
}
int number;
try {
number = Integer.parseInt(numString);
} catch (Exception e) {
return "error";
}
UtilCache<?, ?> utilCache = UtilCache.findCache(name);
if (utilCache != null) {
Object key = null;
Iterator<?> ksIter = utilCache.getCacheLineKeys().iterator();
int curNum = 0;
while (ksIter.hasNext()) {
if (number == curNum) {
key = ksIter.next();
break;
} else {
ksIter.next();
}
curNum++;
}
if (key != null) {
utilCache.remove(key);
errMsg = UtilProperties.getMessage(err_resource, "utilCache.removeElementWithKey", UtilMisc.toMap("key", key.toString()), locale) + ".";
request.setAttribute("_EVENT_MESSAGE_", errMsg);
} else {
errMsg = UtilProperties.getMessage(err_resource, "utilCache.couldNotRemoveElementNumber", UtilMisc.toMap("name", name, "numString", numString), locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
} else {
errMsg = UtilProperties.getMessage(err_resource, "utilCache.couldNotRemoveElement", UtilMisc.toMap("name", name), locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
return "success";
}
/** An HTTP WebEvent handler that clears the named cache
* @param request The HTTP request object for the current JSP or Servlet request.
* @param response The HTTP response object for the current JSP or Servlet request.
* @return return an HTTP WebEvent handler that clears the named cache
*/
public static String clearEvent(HttpServletRequest request, HttpServletResponse response) {
String errMsg = "";
Locale locale = UtilHttp.getLocale(request);
Security security = (Security) request.getAttribute("security");
if (!security.hasPermission("UTIL_CACHE_EDIT", request.getSession())) {
errMsg = UtilProperties.getMessage(err_resource, "utilCacheEvents.permissionEdit", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
String name = request.getParameter("UTIL_CACHE_NAME");
if (name == null) {
errMsg = UtilProperties.getMessage(err_resource, "utilCache.couldNotClearCache", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
UtilCache<?, ?> utilCache = UtilCache.findCache(name);
if (utilCache != null) {
utilCache.clear();
errMsg = UtilProperties.getMessage(err_resource, "utilCache.clearCache", UtilMisc.toMap("name", name), locale) + ".";
request.setAttribute("_EVENT_MESSAGE_", errMsg);
} else {
errMsg = UtilProperties.getMessage(err_resource, "utilCache.couldNotClearCacheNotFoundName", UtilMisc.toMap("name", name), locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
return "success";
}
/** An HTTP WebEvent handler that clears all caches
* @param request The HTTP request object for the current JSP or Servlet request.
* @param response The HTTP response object for the current JSP or Servlet request.
* @return return an HTTP WebEvent handler that clears all caches
*/
public static String clearAllEvent(HttpServletRequest request, HttpServletResponse response) {
String errMsg = "";
Locale locale = UtilHttp.getLocale(request);
Security security = (Security) request.getAttribute("security");
if (!security.hasPermission("UTIL_CACHE_EDIT", request.getSession())) {
errMsg = UtilProperties.getMessage(err_resource, "utilCacheEvents.permissionEdit", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
UtilCache.clearAllCaches();
errMsg = UtilProperties.getMessage(err_resource, "utilCache.clearAllCaches", locale);
request.setAttribute("_EVENT_MESSAGE_", errMsg + " (" + UtilDateTime.nowDateString("yyyy-MM-dd HH:mm:ss") + ").");
return "success";
}
/** An HTTP WebEvent handler that updates the named cache
* @param request The HTTP request object for the current JSP or Servlet request.
* @param response The HTTP response object for the current JSP or Servlet request.
* @return return an HTTP WebEvent handler that updates the named cache
*/
public static String updateEvent(HttpServletRequest request, HttpServletResponse response) {
String errMsg = "";
Locale locale = UtilHttp.getLocale(request);
Security security = (Security) request.getAttribute("security");
if (!security.hasPermission("UTIL_CACHE_EDIT", request.getSession())) {
errMsg = UtilProperties.getMessage(err_resource, "utilCacheEvents.permissionEdit", locale) + ".";
request.setAttribute("_EVENT_MESSAGE_", errMsg);
return "error";
}
String name = request.getParameter("UTIL_CACHE_NAME");
if (name == null) {
errMsg = UtilProperties.getMessage(err_resource, "utilCache.couldNotUpdateCacheSetting", locale) + ".";
request.setAttribute("_ERROR_MESSAGE_", errMsg);
return "error";
}
String maxInMemoryStr = request.getParameter("UTIL_CACHE_MAX_IN_MEMORY");
String expireTimeStr = request.getParameter("UTIL_CACHE_EXPIRE_TIME");
String useSoftReferenceStr = request.getParameter("UTIL_CACHE_USE_SOFT_REFERENCE");
Integer maxInMemory = null;
Long expireTime = null;
try {
maxInMemory = Integer.valueOf(maxInMemoryStr);
} catch (Exception e) {}
try {
expireTime = Long.valueOf(expireTimeStr);
} catch (Exception e) {}
UtilCache<?, ?> utilCache = UtilCache.findCache(name);
if (utilCache != null) {
if (maxInMemory != null)
utilCache.setMaxInMemory(maxInMemory.intValue());
if (expireTime != null)
utilCache.setExpireTime(expireTime.longValue());
if (useSoftReferenceStr != null) {
utilCache.setUseSoftReference("true".equals(useSoftReferenceStr));
}
}
return "success";
}
}