// Path: traction/src/main/java/traction/mvc/interfaces/IObjectListener.java
// public interface IObjectListener
// {
//     public static class Utility
//     {
//         public static String generatePropagationId(String currentPropagationId, String currentSource)
//         {
//             if (currentSource == null || currentSource.equals(""))
//                 return currentPropagationId;
//             else if (currentPropagationId == null || currentPropagationId.equals(""))
//                 return currentSource;
//             else
//                 return currentSource + "." + currentPropagationId;
//         }
//     }
// 
// 	/**
// 	 * Fired when listener is signalled of something, anything really.
// 	 */
//     void onEvent(String propagationId);
// }


import traction.mvc.interfaces.IObjectListener;
package traction.mvc.observables;


//package visibility
interface IObservable
{
    /**
     * Registers a listener to the IObservable
     * @param sourceName : name of source property to track changes and bubble up to inventory
     */
// Path: traction/src/main/java/traction/mvc/interfaces/IObjectListener.java
// public interface IObjectListener
// {
//     public static class Utility
//     {
//         public static String generatePropagationId(String currentPropagationId, String currentSource)
//         {
//             if (currentSource == null || currentSource.equals(""))
//                 return currentPropagationId;
//             else if (currentPropagationId == null || currentPropagationId.equals(""))
//                 return currentSource;
//             else
//                 return currentSource + "." + currentPropagationId;
//         }
//     }
// 
// 	/**
// 	 * Fired when listener is signalled of something, anything really.
// 	 */
//     void onEvent(String propagationId);
// }


// Path: traction/src/main/java/traction/mvc/observables/IObservable.java
import traction.mvc.interfaces.IObjectListener;

package traction.mvc.observables;


//package visibility
interface IObservable
{
    /**
     * Registers a listener to the IObservable
     * @param sourceName : name of source property to track changes and bubble up to inventory
     */
    void registerListener(String sourceName, IObjectListener listener);