// Path: traction/src/main/java/traction/mvc/implementations/CommandArgument.java
// public class CommandArgument
// {
//     private String commandName;
//     private boolean eventCancelled;
//     private JSONObject tagProperties;
// 
//     public boolean isEventCancelled()
//     {
//         return eventCancelled;
//     }
// 
//     public void setEventCancelled(boolean isCancelled)
//     {
//         eventCancelled = isCancelled;
//     }
// 
//     public CommandArgument(String commandName)
//     {
//         this(commandName, null);
//     }
// 
//     public CommandArgument(String commandName, JSONObject tagProperties)
//     {
//         this.commandName = commandName;
//         this.eventCancelled = false;
//         this.tagProperties = tagProperties;
//     }
// 
//     public JSONObject getEventData()
//     {
//         return tagProperties;
//     }
// 
//     public String getCommandName()
//     {
//         return commandName;
//     }
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IObservableCommand.java
// public interface IObservableCommand
// extends IObservableObject
// {
//     /**
//      * call to execute command
//      * @param arg
//      */
//     void execute(CommandArgument arg);
// 
//     void setExecuteListener(IOnExecuteListener listener);
// 
//     /**
//      *
//      * @return : true if command can execute
//      */
//     boolean getCanExecute();
// 
//     /**
//      * set whether command can execute
//      * @param b
//      */
//     void setCanExecute(boolean b);
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IOnExecuteListener.java
// public interface IOnExecuteListener
// {
//     void onExecuted(CommandArgument arg);
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IPropertyStore.java
// public interface IPropertyStore
// {
//     Property<?,?> getProperty(String name);
// }


import android.util.Property;
import traction.mvc.implementations.CommandArgument;
import traction.mvc.interfaces.IObservableCommand;
import traction.mvc.interfaces.IOnExecuteListener;
import traction.mvc.interfaces.IPropertyStore;
		if (name.equals("CanExecute") && getSource() != null)
			return (Property<Object, Object>) Property.of(getSource().getClass(), c, name);
		return null;
	}

	@Override
	public boolean getCanExecute()
	{
		return canExecute;
	}
	
	@Override
	public void setCanExecute(boolean b)
	{
		if (canExecute == b)
			return;
		notifyListener("CanExecute", canExecute, canExecute = b);
	}

	/**
	 * Is fired when execute(TArg) is called and CanExecute() is true
	 * @param arg : argument passed to execute method. Could very well be null.
	 */
	protected void onExecuted(CommandArgument arg)
    {
        if (executeListener != null)
            executeListener.onExecuted(arg);
    }

	@Override
// Path: traction/src/main/java/traction/mvc/implementations/CommandArgument.java
// public class CommandArgument
// {
//     private String commandName;
//     private boolean eventCancelled;
//     private JSONObject tagProperties;
// 
//     public boolean isEventCancelled()
//     {
//         return eventCancelled;
//     }
// 
//     public void setEventCancelled(boolean isCancelled)
//     {
//         eventCancelled = isCancelled;
//     }
// 
//     public CommandArgument(String commandName)
//     {
//         this(commandName, null);
//     }
// 
//     public CommandArgument(String commandName, JSONObject tagProperties)
//     {
//         this.commandName = commandName;
//         this.eventCancelled = false;
//         this.tagProperties = tagProperties;
//     }
// 
//     public JSONObject getEventData()
//     {
//         return tagProperties;
//     }
// 
//     public String getCommandName()
//     {
//         return commandName;
//     }
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IObservableCommand.java
// public interface IObservableCommand
// extends IObservableObject
// {
//     /**
//      * call to execute command
//      * @param arg
//      */
//     void execute(CommandArgument arg);
// 
//     void setExecuteListener(IOnExecuteListener listener);
// 
//     /**
//      *
//      * @return : true if command can execute
//      */
//     boolean getCanExecute();
// 
//     /**
//      * set whether command can execute
//      * @param b
//      */
//     void setCanExecute(boolean b);
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IOnExecuteListener.java
// public interface IOnExecuteListener
// {
//     void onExecuted(CommandArgument arg);
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IPropertyStore.java
// public interface IPropertyStore
// {
//     Property<?,?> getProperty(String name);
// }


// Path: traction/src/main/java/traction/mvc/observables/Command.java
import android.util.Property;
import traction.mvc.implementations.CommandArgument;
import traction.mvc.interfaces.IObservableCommand;
import traction.mvc.interfaces.IOnExecuteListener;
import traction.mvc.interfaces.IPropertyStore;

		if (name.equals("CanExecute") && getSource() != null)
			return (Property<Object, Object>) Property.of(getSource().getClass(), c, name);
		return null;
	}

	@Override
	public boolean getCanExecute()
	{
		return canExecute;
	}
	
	@Override
	public void setCanExecute(boolean b)
	{
		if (canExecute == b)
			return;
		notifyListener("CanExecute", canExecute, canExecute = b);
	}

	/**
	 * Is fired when execute(TArg) is called and CanExecute() is true
	 * @param arg : argument passed to execute method. Could very well be null.
	 */
	protected void onExecuted(CommandArgument arg)
    {
        if (executeListener != null)
            executeListener.onExecuted(arg);
    }

	@Override
	public void execute(CommandArgument arg)