📄 interceptors.jsp
字号:
<%--
- $RCSfile$
- $Revision: 28502 $
- $Date: 2006-03-13 13:38:47 -0800 (Mon, 13 Mar 2006) $
-
- Copyright (C) 1999-2004 Jive Software. All rights reserved.
-
- This software is the proprietary information of Jive Software. Use is subject to license terms.
--%>
<% try { %>
<%@ page import="java.beans.*,
java.util.*,
java.lang.reflect.Method,
org.jivesoftware.xmpp.workgroup.WorkgroupManager,
org.jivesoftware.xmpp.workgroup.Workgroup,
org.xmpp.packet.JID,
org.jivesoftware.xmpp.workgroup.interceptor.*,
org.jivesoftware.util.*"
errorPage="workgroup-error.jsp"%>
<%! // Global variables/methods for this page
private boolean isInstalledInterceptor(Workgroup workgroup,
InterceptorManager interceptorManager, PacketInterceptor interceptor) {
try {
if (interceptor == null) {
return false;
}
String interceptorClassname = interceptor.getClass().getName();
List<PacketInterceptor> interceptors = workgroup == null ? interceptorManager
.getInterceptors()
: interceptorManager.getInterceptors(workgroup.getJID().toBareJID());
for (PacketInterceptor installedInterceptor : interceptors) {
if (interceptorClassname.equals(installedInterceptor.getClass().getName())) {
return true;
}
}
}
catch (Exception ignored) {
}
return false;
}
private String getHTML(PacketInterceptor interceptor, PropertyDescriptor descriptor) {
// HTML of the customizer for this property
StringBuffer html = new StringBuffer(50);
// Get the name of the property (this becomes the name of the form element)
String propName = descriptor.getName();
// Get the current value of the property
Object propValue = null;
try {
propValue = descriptor.getReadMethod().invoke(interceptor, (Object[])null);
}
catch (Exception e) {
e.printStackTrace();
}
// Get the classname of this property
String className = descriptor.getPropertyType().getName();
// HTML form elements for number values (rendered as small textfields)
if ("int".equals(className)
|| "double".equals(className)
|| "long".equals(className)) {
html.append("<input type=\"text\" name=\"").append(propName)
.append("\" size=\"6\" maxlength=\"10\"");
if (propValue != null) {
html.append(" value=\"").append(propValue.toString()).append("\"");
}
html.append(">");
}
// HTML form elements for boolean values (rendered as Yes/No radio buttons)
else if ("boolean".equals(className)) {
boolean value = false;
if ("true".equals(propValue.toString())) {
value = true;
}
html.append("<input type=\"radio\" name=\"").append(propName).append("\" id=\"rb")
.append(propName).append("1\" ");
html.append("value=\"true\"");
html.append((value) ? " checked" : "");
html.append("> <label for=\"rb").append(propName).append("1\">Yes</label> ");
html.append("<input type=\"radio\" name=\"").append(propName).append("\" id=\"rb")
.append(propName).append("2\" ");
html.append("value=\"false\"");
html.append((!value) ? " checked" : "");
html.append("> <label for=\"rb").append(propName).append("2\">No</label> ");
}
else if ("java.lang.String".equals(className)) {
// Indicates we should print a textarea if the large text field is specified to be used
boolean useLarge = ("true".equals(descriptor.getValue("useLargeTextField")));
// HTML elements for a String or String[] (rendered as a single-line textarea)
if (descriptor.getPropertyType().isArray()) {
// Print out a customizer for a String array:
String[] valArray = (String[])propValue;
for (int i = 0; i < valArray.length; i++) {
html.append(printStringHTML(propName + i, valArray[i], useLarge));
html.append("<input type=\"submit\" name=\"deletePropEntry")
.append(i).append("\" value=\"Delete\">")
.append("<br>");
}
html.append("<br>");
html.append(printStringHTML(propName, null, useLarge));
html.append("<input type=\"hidden\" name=\"addNewPropName");
html.append("\" value=\"").append(propName).append("\">");
html.append("<input type=\"submit\" name=\"addNewProp\" ");
html.append("value=\"Add\">");
html.append("<input type=\"hidden\" name=\"deletePropertyName");
html.append("\" value=\"").append(propName).append("\">");
}
// Else, it's just a POS (plain old String) :)
else {
if (propName.toLowerCase().equals("password")) {
html.append("<input type=\"password\"").append(" name=\"").append(propName);
html.append("\" size=\"30\" maxlength=\"150\"");
if (propValue != null) {
html.append(" value=\"").append(escapeHTML(propValue.toString()))
.append("\"");
}
html.append(">");
}
else {
String value = null;
if (propValue != null) {
value = propValue.toString();
}
html.append(printStringHTML(propName, value, useLarge));
}
}
}
if (html.length() == 0) {
html.append(" ");
}
return html.toString();
}
// Handles printing a string text field either as a textfield or a textarea.
private String printStringHTML(String name, String value, boolean useLarge) {
StringBuffer buf = new StringBuffer(50);
if (useLarge) {
buf.append("<textarea name=\"").append(name).append("\" cols=\"40\" rows=\"3\">");
if (value != null) {
buf.append(escapeHTML(value));
}
buf.append("</textarea>");
}
else {
buf.append("<input type=\"text\" name=\"").append(name)
.append("\" size=\"40\" maxlength=\"255\" ");
if (value != null) {
buf.append("value=\"").append(escapeHTML(value)).append("\"");
}
buf.append(">");
}
return buf.toString();
}
private Map getInterceptorPropertyValues(HttpServletRequest request,
PacketInterceptor interceptor) {
// Map of interceptor property name/value pairs
Map map = new HashMap();
try {
// Property descriptors
PropertyDescriptor[] descriptors = BeanUtils
.getPropertyDescriptors(interceptor.getClass());
// Loop through the properties, get the value of the property as a
// parameter from the HttpRequest object
for (int i = 0; i < descriptors.length; i++) {
// Don't set any array properties:
if (!descriptors[i].getPropertyType().isArray()) {
String propName = descriptors[i].getName();
String propValue = ParamUtils.getParameter(request, propName);
map.put(propName, propValue);
}
}
}
catch (Exception e) {
}
return map;
}
private String escapeHTML(String html) {
html = StringUtils.replace(html, "\"", """);
return StringUtils.escapeHTMLTags(html);
}
%>
<% // Get parameters
String workgroupID = ParamUtils.getParameter(request, "wgID");
String managerType = ParamUtils.getParameter(request, "managerType");
String classname = ParamUtils.getParameter(request, "interceptors");
boolean install = ParamUtils.getBooleanParameter(request, "install");
boolean remove = ParamUtils.getBooleanParameter(request, "remove");
int position = ParamUtils.getIntParameter(request, "pos", -1);
boolean edit = ParamUtils.getBooleanParameter(request, "edit");
boolean addInterceptor = ParamUtils.getBooleanParameter(request, "addInterceptor");
String newClassname = ParamUtils.getParameter(request, "newClassname");
boolean saveProperties = ParamUtils.getBooleanParameter(request, "saveProperties");
int interceptorIndex = ParamUtils.getIntParameter(request, "interceptorIndex", -1);
boolean changePosition = ParamUtils.getBooleanParameter(request, "changePos");
boolean up = ParamUtils.getBooleanParameter(request, "up");
boolean down = ParamUtils.getBooleanParameter(request, "down");
String deletePropertyName = ParamUtils.getParameter(request, "deletePropertyName");
boolean addNewProp = request.getParameter("addNewProp") != null;
String error = "";
String errorMessage = ParamUtils.getParameter(request, "errorMessage");
// Determine if we need to delete a String[] property entry
boolean deletePropEntry = false;
int deleteIndex = -1;
for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
String name = (String)e.nextElement();
if (name.startsWith("deletePropEntry")) {
try {
int pos = "deletePropEntry".length();
deleteIndex = Integer.parseInt(name.substring(pos, name.length()));
}
catch (Exception ignored) {
}
if (deleteIndex > -1) {
deletePropEntry = true;
break;
}
}
}
// Indicate if we're doing global interceptors
boolean isGlobal = (workgroupID == null);
WorkgroupManager workgroupManager = WorkgroupManager.getInstance();
// Load the workgroup
Workgroup workgroup = isGlobal ? null : workgroupManager.getWorkgroup(new JID(workgroupID));
// Get the interceptor manager
InterceptorManager interceptorManager = null;
if (managerType == null) {
managerType = "workgroup";
}
if ("workgroup".equals(managerType)) {
interceptorManager = WorkgroupInterceptorManager.getInstance();
}
else if ("agent".equals(managerType)) {
interceptorManager = AgentInterceptorManager.getInstance();
}
else if ("chatbot".equals(managerType)) {
interceptorManager = ChatbotInterceptorManager.getInstance();
}
else if ("queue".equals(managerType)) {
interceptorManager = QueueInterceptorManager.getInstance();
}
else if ("room".equals(managerType)) {
interceptorManager = RoomInterceptorManager.getInstance();
}
else if ("offer".equals(managerType)) {
interceptorManager = OfferInterceptorManager.getInstance();
}
// Add a new property for a String[] property type:
if (addNewProp) {
// Get the name of the interceptor for the new property:
String newPropName = ParamUtils.getParameter(request, "addNewPropName");
if (newPropName != null) {
// Get the value of the new property:
String newPropValue = ParamUtils.getParameter(request, "addNewProp" + newPropName);
if (newPropValue != null) {
// The interceptor we're working with:
PacketInterceptor interceptor = (isGlobal ? interceptorManager
.getInterceptor(interceptorIndex) : interceptorManager
.getInterceptor(workgroup.getJID().toBareJID(), interceptorIndex));
PropertyDescriptor[] descriptors = (Introspector.getBeanInfo(
interceptor.getClass())).getPropertyDescriptors();
PropertyDescriptor propDescriptor = null;
// Look for the property specified
for (int i = 0; i < descriptors.length; i++) {
if (descriptors[i].getName().equals(newPropName)) {
propDescriptor = descriptors[i];
break;
}
}
if (propDescriptor != null) {
// Get both the read and write methods:
Method readMethod = propDescriptor.getReadMethod();
Method writeMethod = propDescriptor.getWriteMethod();
// Get the String[] via the read method:
String[] entries = (String[])readMethod.invoke(interceptor, (Object[])null);
// Make a new entry array of entries.length+1 because we're
// adding one more entry to the property
String[] newEntries = new String[entries.length + 1];
for (int i = 0; i < entries.length; i++) {
newEntries[i] = entries[i];
}
// The new prop value goes in the last spot of newEntries:
newEntries[newEntries.length - 1] = newPropValue;
// Use the write method to save the new entries:
writeMethod.invoke(interceptor, new Object[]{newEntries});
// Save interceptors
interceptorManager.saveInterceptors();
// Done, so redirect
StringBuffer url = new StringBuffer();
url.append("interceptors.jsp?edit=true&pos=").append(interceptorIndex)
.append("&managerType=").append(managerType);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -