Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.logicbus.models.servant.DefaultServiceDescription Maven / Gradle / Ivy
package com.logicbus.models.servant;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.anysoft.util.DefaultProperties;
import com.anysoft.util.JsonSerializer;
import com.anysoft.util.JsonTools;
import com.anysoft.util.Properties;
import com.anysoft.util.Settings;
import com.anysoft.util.XmlSerializer;
import com.anysoft.util.XmlTools;
/**
* ServiceDescription的缺省实现
*
* @author duanyy
*
* @since 1.2.5.4
*
* @version 1.2.8.2 [20141015 duanyy]
* - 实现Reportable
*
* @version 1.6.7.20
* - 改造ServantManager模型,增加服务配置监控机制
*
* @version 1.6.7.25
* - 增加配置参数规格功能
*
* @version 1.6.8.7 [20170412 duanyy]
* - DefaultProperties容器由Hashtable更改为HashMap
*
* @version 1.6.10.12 [20171211 duanyy]
* - 增加访问控制组和权限项属性
*/
public class DefaultServiceDescription implements ServiceDescription{
/**
* 服务ID
*/
private String serviceId;
/**
* 服务名称
*/
private String name = "";
/**
* 说明
*/
private String note = "";
/**
* module
*/
private String module = "";
/**
* 服务路径
*/
private String path = "";
/**
* 服务参数
*/
private DefaultProperties properties;
/**
* 服务参数规格
*/
private Map propertySpecs;
/**
* 服务的可见性(public,login,limited)
*/
private String visible = "public";
/**
* 是否纳入监管
*/
private boolean guard = false;
/**
* 日志类型
*/
private LogType logType = LogType.none;
/**
* 访问控制组id
*/
private String acGroupId = "default";
/**
* 所需要的权限项
*/
private String privilege = "default";
/**
* 服务所依赖的库文件
*/
private Vector modulesMaster = null;
/**
* constructor
* @param id 服务ID
*/
public DefaultServiceDescription(String id){
this.serviceId = id;
this.properties = new DefaultProperties("Default",Settings.get());
this.propertySpecs = new HashMap();
}
/**
* 获取日志类型
* @return 日志类型
*/
@Override
public LogType getLogType(){return logType;}
/**
* 设置日志类型
* @param type
*
* @since 1.2.4.4
*/
public void setLogType(LogType type){logType = type;}
/**
* 设置日志类型
* @param type
*
* @since 1.2.4.4
*/
public void setLogType(String type){logType = parseLogType(type);}
@Override
public boolean guard() {
return guard;
}
/**
* 设置Guard属性
* @param guard 是否监管
*/
public void setGuard(boolean guard){
this.guard = guard;
}
/**
* 获得服务ID
* @return 服务ID
*/
@Override
public String getServiceID(){return this.serviceId;}
/**
* 设置服务ID
* @param id 服务ID
*/
public void setServiceID(String id){this.serviceId = id;}
/**
* 获得服务的可见性
* @return 可见性
*/
@Override
public String getVisible(){return visible;}
/**
* 设置服务的可见性
* @param v 可见性
*/
public void setVisible(String v){this.visible = v;}
/**
* 获得服务名称
* @return name
*/
@Override
public String getName(){return name;}
/**
* 设置服务名称
* @param n name
*/
public void setName(String n){name = n;}
/**
* 获取服务说明
* @return 服务说明
*/
@Override
public String getNote(){return note;}
/**
* 设置服务说明
* @param n 服务说明
*/
public void setNote(String n){note = n;}
/**
* 获得服务路径
* @return 服务路径
*/
@Override
public String getPath(){return this.path;}
/**
* 设置服务路径
* @param p 服务路径
*/
public void setPath(String p){this.path = p;}
/**
* 获得服务实现模块
* @return 实现模块的类名
*/
@Override
public String getModule(){return module;}
/**
* 设置服务实现代码
* @param m module
*/
public void setModule(String m){module = m;}
@Override
public String getAcGroup() {
return this.acGroupId;
}
@Override
public String getPrivilege() {
return this.privilege;
}
/**
* 设置权限控制分组id
* @param group groupId
*/
public void setAcGroup(String group){
this.acGroupId = group;
}
/**
* 设置访问本服务所需的权限项
* @param p 权限项
*/
public void setPrivilege(String p){
this.privilege = p;
}
/**
* 获取参数变量集
* @return 参数变量集
*/
@Override
public Properties getProperties(){return this.properties;}
/**
* 获取服务依赖库文件列表
* @return 库文件列表
*/
@Override
public String [] getModules(){return modulesMaster == null ?
null : modulesMaster.toArray(new String[0]);}
/**
* 设置Properties
* @param props 属性集
*
* @since 1.2.4.4
*/
public void setProperties(DefaultProperties props){
this.properties.copyFrom(props);
}
/**
* 输出到打印流
* @param out 打印输出流
*/
public void List(PrintStream out)
{
out.println("Service ID:" + serviceId);
out.println("Name:" + name);
out.println("Module:" + module);
out.println("Note:" + note);
DefaultProperties props = (DefaultProperties)this.properties;
out.println("Parameters:");
props.list(out);
}
public void toXML(Element root){
Document doc = root.getOwnerDocument();
XmlTools.setString(root,"id",getServiceID());
XmlTools.setString(root,"name",getName());
XmlTools.setString(root,"note",getNote());
XmlTools.setString(root,"module",getModule());
XmlTools.setString(root,"visible",getVisible());
XmlTools.setString(root,"path",getPath());
XmlTools.setString(root, "log", logType.toString());
XmlTools.setString(root,"guard",Boolean.toString(guard));
XmlTools.setString(root,"acGroupId",getAcGroup());
XmlTools.setString(root,"privilege",getPrivilege());
{
DefaultProperties properties = (DefaultProperties) getProperties();
Iterator __keys = properties.keys().iterator();
if (__keys.hasNext()){
Element propertiesElem = doc.createElement("properties");
while (__keys.hasNext()){
String __name = (String)__keys.next();
String __value = properties.GetValue(__name,"",false,true);
Element e = doc.createElement("parameter");
e.setAttribute("id",__name);
e.setAttribute("value",__value);
PropertySpec spec = this.propertySpecs.get(__name);
if (spec != null){
spec.toXML(e);
}
propertiesElem.appendChild(e);
}
root.appendChild(propertiesElem);
}
}
if (modulesMaster != null && modulesMaster.size() > 0)
{
Element eModules = doc.createElement("modules");
for (String module:modulesMaster){
Element eModule = doc.createElement("module");
eModule.setAttribute("url", module);
eModules.appendChild(eModule);
}
root.appendChild(eModules);
}
}
private LogType parseLogType(String type){
LogType ret = LogType.none;
if (type != null){
if (type.equals("none")){
ret = LogType.none;
}else{
if (type.equals("brief")){
ret = LogType.brief;
}else{
if (type.equals("detail")){
ret = LogType.detail;
}else{
ret = LogType.brief;
}
}
}
}
return ret;
}
public void fromXML(Element root){
setServiceID(XmlTools.getString(root,"id",""));
setName(XmlTools.getString(root, "name", getName()));
setModule(XmlTools.getString(root, "module", getModule()));
setNote(XmlTools.getString(root,"note",getNote()));
setVisible(XmlTools.getString(root, "visible", visible));
setPath(XmlTools.getString(root, "path", getPath()));
setLogType(parseLogType(XmlTools.getString(root, "log", logType.toString())));
setGuard(XmlTools.getBoolean(root, "guard", guard()));
setAcGroup(XmlTools.getString(root,"acGroupId",getAcGroup()));
setPrivilege(XmlTools.getString(root,"privilege",getAcGroup()));
NodeList eProperties = XmlTools.getNodeListByPath(root, "properties/parameter");
if (eProperties != null){
for (int i = 0 ; i < eProperties.getLength() ; i ++){
Node n = eProperties.item(i);
if (n.getNodeType() != Node.ELEMENT_NODE){
continue;
}
Element e = (Element)n;
String _id = e.getAttribute("id");
String _value = e.getAttribute("value");
if (StringUtils.isNotEmpty(_id) && StringUtils.isNotEmpty(_value)){
PropertySpec spec = new PropertySpec();
spec.fromXML(e);
this.propertySpecs.put(_id, spec);
getProperties().SetValue(_id,_value);
}
}
}
NodeList eModules = XmlTools.getNodeListByPath(root, "modules/module");
if (eModules != null){
if (modulesMaster == null){
modulesMaster = new Vector();
}else{
modulesMaster.clear();
}
for (int i = 0 ; i < eModules.getLength() ; i ++){
Node n = eModules.item(i);
if (n.getNodeType() != Node.ELEMENT_NODE){
continue;
}
Element e = (Element)n;
String url = e.getAttribute("url");
if (url != null && url.length() > 0){
modulesMaster.add(url);
}
}
}
}
/**
* 从JSON对象中读入
* @param json
*/
@SuppressWarnings("unchecked")
public void fromJson(Map json){
setServiceID(JsonTools.getString(json, "id", ""));
setName(JsonTools.getString(json, "name", getName()));
setModule(JsonTools.getString(json, "module", getModule()));
setNote(JsonTools.getString(json, "note", getNote()));
setVisible(JsonTools.getString(json, "visible", getVisible()));
setPath(JsonTools.getString(json, "path", getPath()));
setAcGroup(JsonTools.getString(json,"acGroupId",getAcGroup()));
setPrivilege(JsonTools.getString(json,"privilege",getAcGroup()));
setGuard(JsonTools.getBoolean(json, "guard", guard()));
setLogType(parseLogType(JsonTools.getString(json, "log", getLogType().toString())));
Object propertiesObj = json.get("properties");
if (propertiesObj != null && propertiesObj instanceof List){
List propsList = (List)propertiesObj;
for (Object para:propsList){
if (!( para instanceof Map)){
continue;
}
try {
Map paraMap = (Map)para;
String id = (String)paraMap.get("id");
String value = (String)paraMap.get("value");
if (StringUtils.isNotEmpty(id) && StringUtils.isNotEmpty(value)){
PropertySpec spec = new PropertySpec();
spec.fromJson(paraMap);
this.propertySpecs.put(id, spec);
getProperties().SetValue(id,value);
}
}catch (Exception ex){
//如果类型转换错误,不管了
}
}
}
Object modulesObj = json.get("modules");
if (modulesObj != null && modulesObj instanceof List){
List modulesList = (List) modulesObj;
for (Object module:modulesList){
if (! (module instanceof String)){
continue;
}
modulesMaster.add((String)module);
}
}
}
/**
* 写出到JSON对象
* @param json
*/
public void toJson(Map json){
JsonTools.setString(json,"type","service");
JsonTools.setString(json, "id", getServiceID());
JsonTools.setString(json, "acGroupId",getAcGroup());
JsonTools.setString(json, "privilege", getPrivilege());
json.put("name",getName());
json.put("module",getModule());
json.put("note", getNote());
json.put("visible", getVisible());
json.put("path",getPath());
json.put("log", logType.toString());
json.put("guard",Boolean.toString(guard));
{
DefaultProperties properties = (DefaultProperties) getProperties();
Iterator __keys = properties.keys().iterator();
if (__keys.hasNext()){
List propertiesList = new Vector();
while (__keys.hasNext()){
String __name = (String)__keys.next();
String __value = properties.GetValue(__name,"",false,true);
Map pair = new HashMap();
pair.put("id", __name);
pair.put("value", __value);
PropertySpec spec = this.propertySpecs.get(__name);
if (spec != null){
spec.toJson(pair);
}
propertiesList.add(pair);
}
json.put("properties", propertiesList);
}
}
if (modulesMaster != null && modulesMaster.size() > 0)
{
List modulesList = new Vector();
for (String module:modulesMaster){
modulesList.add(module);
}
json.put("modules", modulesList);
}
}
public void report(Element xml) {
toXML(xml);
}
public void report(Map json) {
toJson(json);
}
/**
* 参数规格
* @author yyduan
*
*/
public static class PropertySpec implements JsonSerializer,XmlSerializer{
protected String editor = "Default";
protected String name = "";
protected String note = "";
protected String template = "";
@Override
public void toJson(Map json) {
if (json != null){
JsonTools.setString(json,"editor",editor);
JsonTools.setString(json,"name",name);
JsonTools.setString(json,"note",note);
JsonTools.setString(json,"template",template);
}
}
@Override
public void fromJson(Map json) {
if (json != null){
editor = JsonTools.getString(json,"editor","Default");
name = JsonTools.getString(json,"name","");
note = JsonTools.getString(json,"note","");
template = JsonTools.getString(json,"template","");
}
}
@Override
public void toXML(Element e) {
if (e != null){
XmlTools.setString(e,"editor",editor);
XmlTools.setString(e,"name",name);
XmlTools.setString(e,"note",note);
XmlTools.setString(e,"template",template);
}
}
@Override
public void fromXML(Element e) {
if (e != null){
editor = XmlTools.getString(e,"editor","Default");
name = XmlTools.getString(e,"name","");
note = XmlTools.getString(e,"note","");
template = XmlTools.getString(e,"template","");
}
}
}
}