📄 ajaxservicecontainer.java.svn-base
字号:
package com.easyjf.web.ajax;
import java.util.Set;
import java.util.regex.Pattern;
import com.easyjf.container.Container;
/**
* Ajax容器服务类,主要用于存放AjaxService配置信息,并通过该类获取远程调用相关的Ajax远程服务Bean
* @author 大峡
*
*/
public class AjaxServiceContainer{
private Container container;
private AjaxConfigManager configManager;
public AjaxServiceContainer()
{
this(AjaxConfigManager.getInstance(),null);
}
public AjaxServiceContainer(Container container)
{
this(AjaxConfigManager.getInstance(),container);
}
public AjaxServiceContainer(AjaxConfigManager configManager)
{
this(configManager,null);
}
public AjaxServiceContainer(AjaxConfigManager configManager,Container container)
{
this.configManager=configManager;
this.container=container;
}
/**
* 检测指定的远程调用服务是否可用
* @param name
* @return 若指定名称的远程服务可用则返回true,否则返回false
*/
public boolean isAllow(String name) {
return checkAllow(name)&&(!checkDeny(name));
}
/**
* 检测指定服务的指定方法是否可用
* @param serviceName
* @param methodName
* @return 指定方法可用,则返回true,否则返回false
*/
public boolean isAllowMethod(String serviceName,String methodName)
{
RemoteService service=(RemoteService)configManager.getServices().get(serviceName);
if(service==null)return true;
boolean defineAllow=service.getAllowNames().size()<1 ||matcher(service.getAllowNames(),methodName);
return defineAllow&& (! matcher(service.getDenyNames(),methodName));
}
/**
* 检测指定ConvertBean的指定属性是否需要转换
* @param clz
* @param property
* @return 指定的属性可对远程可见则返回true,否则返回false
*/
public boolean isAllowProperty(Class clz,String property)
{
RemoteService service=(RemoteService)configManager.getConvertBeans().get(clz.getName());
if(service==null)return true;
boolean defineAllow=service.getAllowNames().size()<1 ||matcher(service.getAllowNames(),property);
return defineAllow&& (! matcher(service.getDenyNames(),property));
}
/**
* 从容器中调用指定服务的
* @param name
* @return 返回指定的业务对象
*/
public Object getService(String name) {
if(isAllow(name))
return container.getBean(name);
else throw new ServiceNotAvailableException(name);
}
public boolean checkAllow(String name)
{
//if(allowNames.size()<1)return true;
return matcher(configManager.getAllowNames(),name);
}
public boolean checkDeny(String name)
{
return matcher(configManager.getDenyNames(),name);
}
private boolean matcher(Set patterns,String name)
{
java.util.Iterator it=patterns.iterator();
while(it.hasNext())
{
String t=(String)it.next();
if(Pattern.matches(t,name))
{
return true;
}
}
return false;
}
public void addService(String serviceName,RemoteService service)
{
configManager.getServices().put(serviceName, service);
}
public void addConvertBean(String className,RemoteService service)
{
configManager.getConvertBeans().put(className,service);
}
public void addAllowName(String name)
{
String theName=name;
if(theName.charAt(0)=='*')theName="."+name;
configManager.getAllowNames().add(theName);
}
public void addDenyName(String name)
{
String theName=name;
if(theName.charAt(0)=='*')theName="."+name;
configManager.getDenyNames().add(theName);
}
public void setContainer(Container container) {
this.container = container;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -