package com.fourinone;
import java.util.Iterator;
import java.util.regex.Pattern;
import java.util.List;
import java.util.ArrayList;
public class ParkObjValue extends ObjValue
{
public ObjValue getNodeWidely(String nodekey){
ObjValue obj = new ObjValue();
Object getobj = this.getObj(nodekey);
if(getobj!=null)
{
obj.put(nodekey, this.getObj(nodekey));
for(Iterator iter=this.keySet().iterator();iter.hasNext();){
String curkey = (String)iter.next();
if(Pattern.matches(nodekey+"\\..*", curkey))
obj.put(curkey, this.getObj(curkey));
}
}
return obj;
}
public ObjValue getNode(String domain, String node)
{
ObjValue ov = new ObjValue();
if(domain!=null)
{
if(node!=null)
{
String domainnodekey = getDomainnodekey(domain, node);
Object obj = this.getObj(domainnodekey);
Object version = this.getObj(ParkMeta.getYBB(domainnodekey));
Object createby = this.getObj(ParkMeta.getYCJZ(domainnodekey));
Object auth = this.getObj(ParkMeta.getYQX(domainnodekey));
Object creatip = this.getObj(ParkMeta.getYCIP(domainnodekey));
Object creattime = this.getObj(ParkMeta.getYCSJ(domainnodekey));
Object prop = this.getObj(ParkMeta.getYSX(domainnodekey));
Object updateby = this.getObj(ParkMeta.getYGXZ(domainnodekey));
Object updateip = this.getObj(ParkMeta.getYGIP(domainnodekey));
Object updatetime = this.getObj(ParkMeta.getYGSJ(domainnodekey));
if(obj!=null)
ov.setObj(domainnodekey, obj);
if(version!=null)
ov.setObj(ParkMeta.getYBB(domainnodekey), version);
if(createby!=null)
ov.setObj(ParkMeta.getYCJZ(domainnodekey), createby);
if(auth!=null)
ov.setObj(ParkMeta.getYQX(domainnodekey), auth);
if(creatip!=null)
ov.setObj(ParkMeta.getYCIP(domainnodekey), creatip);
if(creattime!=null)
ov.setObj(ParkMeta.getYCSJ(domainnodekey), creattime);
if(prop!=null)
ov.setObj(ParkMeta.getYSX(domainnodekey), prop);
if(updateby!=null)
ov.setObj(ParkMeta.getYGXZ(domainnodekey), updateby);
if(updateip!=null)
ov.setObj(ParkMeta.getYGIP(domainnodekey), updateip);
if(updatetime!=null)
ov.setObj(ParkMeta.getYGSJ(domainnodekey), updatetime);
}
else
ov = getNodeWidely(domain);
}
return ov;
}
public ObjValue getParkInfo(){
ParkObjValue obj = (ParkObjValue)this.clone();
/*ArrayList<String> hbkeylist = new ArrayList<String>();
for(Iterator iter=obj.keySet().iterator();iter.hasNext();){
String curkey = (String)iter.next();
if(curkey.indexOf(ParkMeta.getYSX())!=-1&&obj.get(curkey).equals(ParkMeta.getSXXT()))
hbkeylist.add(curkey.substring(0,curkey.indexOf(ParkMeta.getYSX())));//creattime
}
for(String hbkey:hbkeylist)
obj.removeNodeWidely(hbkey);*/
return obj;
}
public List<String[]> getParkInfoExp(long exp)
{
//System.out.println("exp:"+exp);
ArrayList<String[]> keyexplist = new ArrayList<String[]>();
for(Iterator iter=this.keySet().iterator();iter.hasNext();){
String curkey = (String)iter.next();
if(curkey.indexOf(ParkMeta.getYCSJ())!=-1)
{
String domainnodekey = curkey.substring(0,curkey.indexOf(ParkMeta.getYCSJ()));
String[] keyarr = getDomainNode(domainnodekey);
if(keyarr!=null&&keyarr.length==2)
{
String propvalue = this.getString(ParkMeta.getYSX(domainnodekey));
//System.out.println("propvalue:"+propvalue);
if(propvalue==null||!propvalue.equals(ParkMeta.getSXXT()))
if(System.currentTimeMillis()-(Long)this.get(curkey)>=exp)
keyexplist.add(keyarr);
}
}
}
//System.out.println("keyexplist:"+keyexplist);
return keyexplist;
}
public ObjValue removeNodeWidely(String nodekey){
ObjValue obj = new ObjValue();
Object node = this.remove(nodekey);
if(node!=null)
{
obj.put(nodekey, node);
List<String> keylist = new ArrayList<String>();
for(Iterator iter=this.keySet().iterator();iter.hasNext();){
String curkey = (String)iter.next();
if(Pattern.matches(nodekey+"\\..*", curkey))
keylist.add(curkey);
}
for(String ck:keylist){
Object rvobj = this.remove(ck);
if(rvobj!=null)obj.put(ck, rvobj);
}
}
return obj;
}
public ObjValue removeDomain(String domain)
{
ObjValue ov = new ObjValue();
if(domain!=null)
{
Object obj = this.remove(domain);
Object version = this.remove(ParkMeta.getYBB(domain));
Object createby = this.remove(ParkMeta.getYCJZ(domain));
Object creatip = this.remove(ParkMeta.getYCIP(domain));
Object creattime = this.remove(ParkMeta.getYCSJ(domain));
if(obj!=null)
ov.setObj(domain, obj);
if(version!=null)
ov.setObj(ParkMeta.getYBB(domain), version);
if(createby!=null)
ov.setObj(ParkMeta.getYCJZ(domain), createby);
if(creatip!=null)
ov.setObj(ParkMeta.getYCIP(domain), creatip);
if(creattime!=null)
ov.setObj(ParkMeta.getYCSJ(domain), creattime);
}
return ov;
}
public ObjValue removeNode(String domain, String node)
{
ObjValue ov = new ObjValue();
if(domain!=null)
{
if(node!=null)
{
String domainnodekey = getDomainnodekey(domain, node);
Object obj = this.remove(domainnodekey);
Object version = this.remove(ParkMeta.getYBB(domainnodekey));
Object createby = this.remove(ParkMeta.getYCJZ(domainnodekey));
Object auth = this.remove(ParkMeta.getYQX(domainnodekey));
Object creatip = this.remove(ParkMeta.getYCIP(domainnodekey));
Object creattime = this.remove(ParkMeta.getYCSJ(domainnodekey));
Object prop = this.remove(ParkMeta.getYSX(domainnodekey));
Object updateby = this.remove(ParkMeta.getYGXZ(domainnodekey));
Object updateip = this.remove(ParkMeta.getYGIP(domainnodekey));
Object updatetime = this.remove(ParkMeta.getYGSJ(domainnodekey));
if(obj!=null)
ov.setObj(domainnodekey, obj);
if(version!=null)
ov.setObj(ParkMeta.getYBB(domainnodekey), version);
if(createby!=null)
ov.setObj(ParkMeta.getYCJZ(domainnodekey), createby);
if(auth!=null)
ov.setObj(ParkMeta.getYQX(domainnodekey), auth);
if(creatip!=null)
ov.setObj(ParkMeta.getYCIP(domainnodekey), creatip);
if(creattime!=null)
ov.setObj(ParkMeta.getYCSJ(domainnodekey), creattime);
if(prop!=null)
ov.setObj(ParkMeta.getYSX(domainnodekey), prop);
if(updateby!=null)
ov.setObj(ParkMeta.getYGXZ(domainnodekey), updateby);
if(updateip!=null)
ov.setObj(ParkMeta.getYGIP(domainnodekey), updateip);
if(updatetime!=null)
ov.setObj(ParkMeta.getYGSJ(domainnodekey), updatetime);
}
else
ov = removeNodeWidely(domain);
}
return ov;
}
public static boolean checkGrammar(String keyname){
if(keyname!=null&&Pattern.matches("^[a-z0-9A-Z_-]+$", keyname))
return true;
else{
LogUtil.info("[KeyName]", "[error domain or node name]", keyname);
return false;
}
}
public static boolean checkGrammar(String domain, String node){
return checkGrammar(domain)&&checkGrammar(node);
}
public static boolean checkGrammar(String domain, String node, Object obj){
if(obj==null)
LogUtil.info("[checkGrammar]", "[error]", obj);
return checkGrammar(domain, node)&&obj!=null;
}
public static String getDomainnodekey(String domain, String node){
String domainnodekey = node==null?domain:domain+"."+node;
return domainnodekey;
}
public static String[] getDomainNode(String domainnodekey){
//String[] keyarr = domainnodekey.split("\\.");
//System.out.println("getDomainNode domainnodekey:"+domainnodekey);
return domainnodekey.split("\\.");
}
public static void main(String[] args)
{
//String[] keyarr = getDomainNode("aaa.bbb");
//System.out.println("getDomainNode keyarr.length:"+keyarr.length);
ParkObjValue ob = new ParkObjValue();
ob.checkGrammar("d","a.b");
//System.out.println(Pattern.matches("^[a-z0-9A-Z_-]+$", " d "));
ob.setString("a"+ParkMeta.getYBB(),"0");
ob.setString("a.b"+ParkMeta.getYBB(),"0");
ob.setString("a.c"+ParkMeta.getYBB(),"0");
System.out.println(ob.getWidely(ParkMeta.getYBB("a"+"\\..+")));
}
}