|
From: <fd...@us...> - 2007-04-15 19:44:42
|
Revision: 3161
http://jnode.svn.sourceforge.net/jnode/?rev=3161&view=rev
Author: fduminy
Date: 2007-04-15 12:44:40 -0700 (Sun, 15 Apr 2007)
Log Message:
-----------
update of JPartition : refactor around stamps-mvc for better separation
of model, view and controller
Added Paths:
-----------
trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/BaseCommand.java
trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/Command.java
trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandException.java
trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandProcessor.java
trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandStatus.java
Added: trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/BaseCommand.java
===================================================================
--- trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/BaseCommand.java (rev 0)
+++ trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/BaseCommand.java 2007-04-15 19:44:40 UTC (rev 3161)
@@ -0,0 +1,52 @@
+package org.jnode.apps.jpartition.commands.framework;
+
+import org.apache.log4j.Logger;
+
+abstract public class BaseCommand implements Command
+{
+ private static final Logger log = Logger.getLogger(BaseCommand.class);
+
+ private CommandStatus status = CommandStatus.NOT_RUNNING;
+ protected String name;
+
+ protected BaseCommand(String name)
+ {
+ this.name = name;
+ }
+
+ final public void execute(CommandProcessor processor) throws CommandException
+ {
+ try
+ {
+ status = CommandStatus.RUNNING;
+ processor.commandStarted(this);
+
+ doExecute();
+ status = CommandStatus.SUCCESS;
+ }
+ catch(CommandException e)
+ {
+ log.error("command failed", e);
+ status = CommandStatus.FAILED;
+ throw e;
+ }
+ catch(Throwable t)
+ {
+ log.error("command failed", t);
+ status = CommandStatus.FAILED;
+ throw new CommandException("command failed", t);
+ }
+ }
+
+ public CommandStatus getStatus()
+ {
+ return status;
+ }
+
+ abstract protected void doExecute() throws CommandException;
+
+ @Override
+ public String toString() {
+ return status + " - " + name;
+ }
+}
Added: trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/Command.java
===================================================================
--- trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/Command.java (rev 0)
+++ trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/Command.java 2007-04-15 19:44:40 UTC (rev 3161)
@@ -0,0 +1,6 @@
+package org.jnode.apps.jpartition.commands.framework;
+
+public interface Command {
+ public void execute(CommandProcessor processor) throws CommandException;
+ public CommandStatus getStatus();
+}
Added: trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandException.java
===================================================================
--- trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandException.java (rev 0)
+++ trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandException.java 2007-04-15 19:44:40 UTC (rev 3161)
@@ -0,0 +1,16 @@
+package org.jnode.apps.jpartition.commands.framework;
+
+public class CommandException extends Exception {
+ public CommandException(String s, Throwable cause) {
+ super(s, cause);
+ }
+
+ public CommandException(String s) {
+ super(s);
+ }
+
+ public CommandException(Throwable cause) {
+ super(cause);
+ }
+
+}
Added: trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandProcessor.java
===================================================================
--- trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandProcessor.java (rev 0)
+++ trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandProcessor.java 2007-04-15 19:44:40 UTC (rev 3161)
@@ -0,0 +1,118 @@
+package org.jnode.apps.jpartition.commands.framework;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+import org.apache.log4j.Logger;
+
+public class CommandProcessor {
+ private static final Logger log = Logger.getLogger(CommandProcessor.class);
+
+ private Stack<Command> commands = new Stack<Command>();
+ private List<CommandProcessorListener> listeners = new ArrayList<CommandProcessorListener>();
+
+ private boolean running = false;
+
+ public synchronized void process()
+ {
+ if(!running)
+ {
+ running = true;
+
+ while(!commands.isEmpty())
+ {
+ Command command = null;
+ try
+ {
+ command = peekCommand();
+
+ command.execute(this);
+ }
+ catch(CommandException e)
+ {
+ log.error("error in command processing", e);
+ break;
+ }
+ catch(Throwable t)
+ {
+ log.error("unexpected error in command processing", t);
+ break;
+ }
+ finally
+ {
+ if(command != null)
+ {
+ for(CommandProcessorListener l : listeners)
+ {
+ l.commandFinished(this, command);
+ }
+
+ try {
+ removeCommand();
+ }
+ catch(Throwable t)
+ {
+ log.error("error in removeCommand", t);
+ }
+ }
+ }
+ }
+
+ running = false;
+ }
+ }
+
+ public void addCommand(Command command)
+ {
+ if(command.getStatus() != CommandStatus.NOT_RUNNING)
+ {
+ throw new IllegalArgumentException("command must be in status NOT_RUNNING");
+ }
+
+ commands.push(command);
+
+ for(CommandProcessorListener l : listeners)
+ {
+ l.commandAdded(this, command);
+ }
+ }
+
+ protected Command peekCommand() throws Exception
+ {
+ Command command = commands.peek();
+ if(command.getStatus() != CommandStatus.NOT_RUNNING)
+ {
+ throw new Exception("command already started : "+command);
+ }
+ return command;
+ }
+
+ protected void removeCommand()
+ {
+ Command command = commands.pop();
+
+ for(CommandProcessorListener l : listeners)
+ {
+ l.commandRemoved(this, command);
+ }
+ }
+
+ public void commandStarted(Command command)
+ {
+ for(CommandProcessorListener l : listeners)
+ {
+ l.commandStarted(this, command);
+ }
+ }
+
+ public void addListener(CommandProcessorListener listener)
+ {
+ listeners.add(listener);
+ }
+
+ public void removeListener(CommandProcessorListener listener)
+ {
+ listeners.remove(listener);
+ }
+}
Added: trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandStatus.java
===================================================================
--- trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandStatus.java (rev 0)
+++ trunk/distr/src/apps/org/jnode/apps/jpartition/commands/framework/CommandStatus.java 2007-04-15 19:44:40 UTC (rev 3161)
@@ -0,0 +1,19 @@
+package org.jnode.apps.jpartition.commands.framework;
+
+public enum CommandStatus {
+ NOT_RUNNING("not running"),
+ RUNNING("running"),
+ SUCCESS("success"),
+ FAILED("failed");
+
+
+ private final String name;
+ private CommandStatus(String name)
+ {
+ this.name = name;
+ }
+
+ final public String toString(){
+ return name;
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|