Browse Source

Fixing a bug in notifySubscribers

Sam Jaffe 8 years ago
parent
commit
aba84ad33e

+ 1 - 1
pom.xml

@@ -4,7 +4,7 @@
 
   <groupId>org.leumasjaffe</groupId>
   <artifactId>observer</artifactId>
-  <version>0.2</version>
+  <version>0.3</version>
   <packaging>jar</packaging>
 
   <name>observer</name>

+ 5 - 1
src/main/lombok/org/leumasjaffe/observer/IndirectObservableListener.java

@@ -25,11 +25,15 @@ public class IndirectObservableListener<C, T> {
 		model = obs;
 		updateComponent( );
 		for ( int i = 0; i < extra.length; ++i ) {
-			ObserverDispatch.subscribe( extra[i], this, () -> updateComponent( ) );
+			ObserverDispatch.subscribe( extra[i], this, this::updateComponent );
 		}
 	}
 
 	private void updateComponent() {
 		update.accept(component, model);
 	}
+
+	public void notifySubscribers(Observable obs) {
+		ObserverDispatch.notifySubscribers(obs, this);
+	}
 }

+ 1 - 1
src/main/lombok/org/leumasjaffe/observer/ObservableController.java

@@ -39,7 +39,7 @@ public class ObservableController<S extends JTextComponent, T extends Observable
 	private void accept() {
 		Objects.requireNonNull( impl.getModel() );
 		if ( update( ) ) {
-			ObserverDispatch.notifySubscribers( impl.getModel(), this );
+			impl.notifySubscribers(impl.getModel());
 		}
 	}
 }

+ 4 - 0
src/main/lombok/org/leumasjaffe/observer/ObservableListener.java

@@ -16,4 +16,8 @@ public class ObservableListener<C, T extends Observable> {
 	public void setObserved( T obs ) {
 		impl.setObserved(obs, obs);
 	}
+	
+	public void notifySubscribers(Observable obs) {
+		this.impl.notifySubscribers(obs);
+	}
 }

+ 8 - 4
src/main/lombok/org/leumasjaffe/observer/ObserverDispatch.java

@@ -29,11 +29,15 @@ public class ObserverDispatch {
 	
 	public void unsubscribeAll(Object src) {
 		if (src == null) return;
-		observers.entries().removeIf( e -> e.getValue().obj == src );
+		observers.entries().removeIf( e -> e.getValue().obj.get() == src );
 	}
 	
-	public void notifySubscribers(Observable target, Object src) {
-		observers.get(target.getObservableId()).stream().filter( p -> p.obj.get() != src ).forEach( 
-				p -> p.sub.notifyUpdate() );
+	void notifySubscribers(Observable target, IndirectObservableListener<?, ?> src) {
+		observers.get(target.getObservableId()).stream().filter(
+				p -> p.obj.get() != src).forEach( p -> p.sub.notifyUpdate() );
+	}
+
+	public void notifySubscribers(Observable target) {
+		observers.get(target.getObservableId()).stream().forEach( p -> p.sub.notifyUpdate() );
 	}
 }