01: /*
02: * uDig - User Friendly Desktop Internet GIS client
03: * http://udig.refractions.net
04: * (C) 2004, Refractions Research Inc.
05: *
06: * This library is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation;
09: * version 2.1 of the License.
10: *
11: * This library is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: */
17: package net.refractions.udig.project.command;
18:
19: import org.eclipse.core.runtime.IProgressMonitor;
20:
21: /**
22: * A MapCommand in uDig describes an action that modifies the system's model.
23: * <p>
24: * Commands are single fire objects. They cannot be used more than once. This is to allow undoable
25: * commands to be a normal command, not a special case command.
26: * </p>
27: * <p>
28: * <p>
29: * Commands normally have factories associated with them, but they are also prototypes. The copy
30: * method returns a new MapCommand without the undo data. The new MapCommand can safely be executed
31: * with no negative side-effects.
32: * </p>
33: *
34: * @see net.refractions.udig.project.command.factory.NavigationCommandFactory A set of possible command
35: * categories are: zoom, pan, cut, paste, addVertex, etc.. Most commands are associated with
36: * tool whose job is to construct the commands. A MapCommand object describes an concrete
37: * change, for example: setBBox(0,0,1,1); setBBox(2,2,3,3) would be a seperate object.
38: * @author jeichar
39: */
40: public interface Command {
41: /**
42: * The method that performs the work of the command.
43: * <p>
44: * Run is called by UDIG when the command is received. Commands are run in a seperate thread.
45: * </p>
46: *
47: * @param monitor A progress monitor used by the command to report on its internal state. API
48: * how is this associated with a Thread? is it a Thread?
49: * @throws Exception
50: */
51: public void run(IProgressMonitor monitor) throws Exception;
52:
53: /**
54: * Instantiates a new copy of the command that will operate in the same manner as the original
55: * command. API isn't this cloneable?
56: *
57: * @return A copy of the current command. The new command must run the same way as the current
58: * object.
59: * <p>
60: * If the current command has already executed it cannot be used again, but a copy may
61: * because a copy should contain none of the state side-effect that execution has on a
62: * command
63: * </p>
64: * @deprecated
65: */
66: public Command copy();
67:
68: /**
69: * Returns the name of the MapCommand
70: *
71: * @return The name of the command.
72: */
73: public String getName();
74:
75: }
|