From 0ec8481c10cd8277d84c7c1a785483a0a739e5a0 Mon Sep 17 00:00:00 2001 From: abranson Date: Thu, 4 Aug 2011 00:42:34 +0200 Subject: More code cleanup: Refactored Entity Proxy Subscription to handle generics better Rewrote RemoteMap to use TreeMap instead of the internal array for order. It now sorts its keys by number if they parse, else as strings. Removed a no-longer-in-progress outcome form class --- .../c2kernel/entity/proxy/MemberSubscription.java | 72 +++++++++++----------- 1 file changed, 36 insertions(+), 36 deletions(-) (limited to 'source/com/c2kernel/entity/proxy/MemberSubscription.java') diff --git a/source/com/c2kernel/entity/proxy/MemberSubscription.java b/source/com/c2kernel/entity/proxy/MemberSubscription.java index ba2d725..157297f 100644 --- a/source/com/c2kernel/entity/proxy/MemberSubscription.java +++ b/source/com/c2kernel/entity/proxy/MemberSubscription.java @@ -8,31 +8,33 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.utils.Logger; -public class MemberSubscription implements Runnable { +public class MemberSubscription implements Runnable { + public static final String ERROR = "Error"; + public static final String END = "theEND"; + EntityProxy subject; String interest; // keep the subscriber by weak reference, so it is not kept from the garbage collector if no longer used - WeakReference observerReference; + WeakReference> observerReference; ArrayList contents = new ArrayList(); boolean preLoad; - public MemberSubscription(EntityProxy subject, String interest, - EntityProxyObserver observer, boolean preLoad) { + public MemberSubscription(EntityProxyObserver observer, String interest, boolean preLoad) { setObserver(observer); this.interest = interest; - this.subject = subject; this.preLoad = preLoad; } - public void run() { + @Override + public void run() { Thread.currentThread().setName("Member Subscription: "+subject.getSystemKey()+":"+interest); if (preLoad) loadChildren(); } - + private void loadChildren() { - C2KLocalObject newMember; - EntityProxyObserver observer = getObserver(); - if (observer == null) return; //reaped + C newMember; + EntityProxyObserver observer = getObserver(); + if (observer == null) return; //reaped try { // fetch contents of path String children = subject.queryData(interest+"/all"); @@ -40,22 +42,17 @@ public class MemberSubscription implements Runnable { ArrayList newContents = new ArrayList(); while (tok.hasMoreTokens()) newContents.add(tok.nextToken()); - + // look to see what's new for (String newChild: newContents) { - + // load child object try { - newMember = subject.getObject(interest+"/"+newChild); + newMember = (C)subject.getObject(interest+"/"+newChild); contents.remove(newChild); - } catch (ObjectNotFoundException ex) { - newMember = new MemberControl(MemberControl.ERROR, "Listed member "+newChild+" was not found."); - } - try { observer.add(newMember); - } catch (Throwable ex) { - Logger.error("Error publishing member to "+observer); - Logger.error(ex); + } catch (ObjectNotFoundException ex) { + observer.control(ERROR, "Listed member "+newChild+" was not found."); } } // report what's left in old contents as deleted @@ -65,24 +62,24 @@ public class MemberSubscription implements Runnable { //replace contents arraylist contents = newContents; //report that we're done - observer.add(MemberControl.theEND); + observer.control(END, null); } catch (Exception ex) { - observer.add(new MemberControl(MemberControl.ERROR, "Query on "+interest+" failed with "+ex)); - } + observer.control(ERROR, "Query on "+interest+" failed with "+ex); + } } - + public boolean isRelevant(String path) { Logger.msg(7, "Checking relevance of "+path+" to "+interest); return (path.startsWith(interest)); } - + public void update(String path, boolean deleted) { - EntityProxyObserver observer = getObserver(); + EntityProxyObserver observer = getObserver(); if (observer == null) return; //reaped Logger.msg(7, "Processing proxy message path "+path +" for "+observer+". Interest: "+interest+" Was Deleted:"+deleted); if (!path.startsWith(interest)) // doesn't concern us return; - + if (path.equals(interest)) // refresh contents loadChildren(); else { @@ -92,9 +89,9 @@ public class MemberSubscription implements Runnable { contents.remove(name); observer.remove(name); } - else { + else { try { - C2KLocalObject newMember = subject.getObject(path); + C newMember = (C)subject.getObject(path); Logger.msg(4, "Adding "+path); contents.add(name); observer.add(newMember); @@ -102,17 +99,20 @@ public class MemberSubscription implements Runnable { Logger.error("Member Subscription: could not load "+path); Logger.error(e); } - } + } } } - - public void setObserver(EntityProxyObserver observer) { - observerReference = new WeakReference(observer); + + public void setObserver(EntityProxyObserver observer) { + observerReference = new WeakReference>(observer); } - public EntityProxyObserver getObserver() { - EntityProxyObserver observer = (EntityProxyObserver)observerReference.get(); - return observer; + public void setSubject(EntityProxy subject) { + this.subject = subject; + } + + public EntityProxyObserver getObserver() { + return observerReference.get(); } } -- cgit v1.2.3