All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.event.Event Maven / Gradle / Ivy

There is a newer version: 1.6.17
Show newest version
package com.alogic.event;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang3.StringUtils;

import com.anysoft.stream.Flowable;
import com.anysoft.util.JsonSerializer;
import com.anysoft.util.JsonTools;

/**
 * 通用事件
 * 
 * @author yyduan
 * 
 * @version 1.6.11.3 [20171219 duanyy] 
* - 增加isAsync方法,用来标记数据是否允许异步处理
* */ public interface Event extends Comparable,Flowable,JsonSerializer{ /** * 获取事件类型 * * @return 事件类型 */ public String getEventType(); /** * 获取事件产生的时间 * * @return 生成时间 */ public long getCreateTime(); /** * 设置事件属性 * *

* 用于设置事件的属性值。当该属性已经存在时,如果overwrite为true,则更覆盖,反之放弃本次修改。 * * @param k 属性的key * @param v 属性的值 * @param overwrite 是否覆盖 */ public void setProperty(String k,String v,boolean overwrite); /** * 获取事件的属性 * @param k 属性的key * @param dftValue 缺省值 * @return 属性的值,当属性不存在时,返回为dftValue */ public String getProperty(String k,String dftValue); /** * 清除指定的属性 * @param key 属性的key */ public void removeProperty(String key); /** * 获取属性集的keys列表 * @return keys列表 */ public String [] getKeys(); /** * clone自身到另外一个对象 * @return clone出的对象 */ public Event copySelf(); /** * 拷贝自身到另外一个对象 *

* 用于将自身的信息复制到另外一个对象,仅copy属性 * @param another 另外一个对象 * * @return another */ public Event copyTo(Event another); /** * 虚基类 * @author yyduan * */ public abstract static class Abstract implements Event{ /** * 事件id,全局唯一 */ protected String id; /** * 事件类型 */ protected String eventType; /** * 是否可异步处理 */ protected boolean async = true; /** * 生成日期 */ protected long createTime = System.currentTimeMillis(); protected Abstract(String id,String type,boolean async){ this.id = id; this.eventType = type; this.async = async; } @Override public int compareTo(Event e) { return id().compareTo(e.id()); } @Override public String getStatsDimesion() { return getEventType(); } @Override public String id() { return id; } @Override public boolean isAsync(){ return async; } public void setId(final String id){ this.id = id; } public void setAsync(final boolean async){ this.async = async; } @Override public String getEventType() { return eventType; } public void setEventType(String type){ this.eventType = type; } @Override public long getCreateTime() { return createTime; } public void setCreateTime(long t){ this.createTime = t; } @Override public String getValue(String varName, Object context, String defaultValue) { return getRawValue(varName, context, defaultValue); } @Override public String getRawValue(String varName, Object context, String dftValue) { return getProperty(varName, dftValue); } @Override public Object getContext(String varName) { return this; } } /** * 缺省实现 * @author yyduan * */ public static class Default extends Abstract{ protected Map properties = null; public Default(String id, String type,boolean async) { super(id, type,async); } protected Map getMapObject(boolean create){ if (properties == null){ synchronized(this){ if (properties == null && create){ properties = new HashMap(); } } } return properties; } @Override public void setProperty(String k, String v, boolean overwrite) { Map map = getMapObject(true); if (map.containsKey(k)){ if (overwrite){ map.put(k, v); } }else{ map.put(k, v); } } @Override public String getProperty(String k, String dftValue) { Map map = getMapObject(false); if (map != null){ String value = map.get(k); return StringUtils.isNotEmpty(value) ? value : dftValue; }else{ return dftValue; } } @Override public void removeProperty(String key){ Map map = getMapObject(false); if (map != null){ map.remove(key); } } @Override public void toJson(Map json) { if (json != null){ JsonTools.setString(json, "id", id()); JsonTools.setString(json, "type", getEventType()); JsonTools.setLong(json, "t", getCreateTime()); JsonTools.setBoolean(json,"async",isAsync()); Map map = getMapObject(false); if (map != null){ Iterator> iter = map.entrySet().iterator(); Map propertiesMap = new HashMap(); while (iter.hasNext()){ Entry entry = iter.next(); JsonTools.setString(propertiesMap, entry.getKey(), entry.getValue()); } json.put("property", propertiesMap); } } } @SuppressWarnings("unchecked") @Override public void fromJson(Map json) { if (json != null){ setId(JsonTools.getString(json, "id", EventBus.newId())); setEventType(JsonTools.getString(json, "type", "")); setCreateTime(JsonTools.getLong(json, "t", System.currentTimeMillis())); setAsync(JsonTools.getBoolean(json,"async",isAsync())); Object found = json.get("property"); if (found != null && found instanceof Map){ Map map = (Map)found; Iterator> iter = map.entrySet().iterator(); while (iter.hasNext()){ Entry entry = iter.next(); setProperty(entry.getKey(), entry.getValue(), true); } } } } @Override public String [] getKeys(){ Map map = getMapObject(false); return map == null ? new String[0] : map.keySet().toArray(new String[0]); } @Override public Event copySelf(){ Default copied = new Default(id(),getEventType(),this.isAsync()); copied.setCreateTime(getCreateTime()); return copyTo(copied); } @Override public Event copyTo(Event another){ if (another != null){ Map map = getMapObject(false); if (map != null){ Iterator> iter = map.entrySet().iterator(); while (iter.hasNext()){ Entry entry = iter.next(); another.setProperty(entry.getKey(), entry.getValue(), true); } } } return another; } @Override public String toString(){ StringBuffer buf = new StringBuffer(String.format("%s-%s-%d-[", id(),getEventType(),getCreateTime())); Map map = getMapObject(false); if (map != null){ Iterator> iter = map.entrySet().iterator(); while (iter.hasNext()){ Entry entry = iter.next(); buf.append(String.format("%s=%s", entry.getKey(),entry.getValue())); if (iter.hasNext()){ buf.append(";"); } } } buf.append("]"); return buf.toString(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy