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: /**
20: * A Command in uDig describes an action that modifies the system's model.
21: * <p>
22: * Commands are single fire objects. They cannot be used more than once. This is to allow undoable
23: * commands to be a normal command, not a special case command.
24: * </p>
25: * <p>
26: * <p>
27: * Commands normally have factories associated with them, but they are also prototypes. The copy
28: * method returns a new Command without the undo data. The new Command can safely be executed with
29: * no negative side-effects.
30: * </p>
31: *
32: * @see net.refractions.udig.project.command.factory.NavigationCommandFactory A set of possible command
33: * categories are: zoom, pan, cut, paste, addVertex, etc.. Most commands are associated with
34: * tool whose job is to construct the commands. A Command object describes an concrete change,
35: * for example: setBBox(0,0,1,1); setBBox(2,2,3,3) would be a seperate object.
36: * @author jeichar
37: */
38: public interface ProjectCommand {
39: /**
40: * The method that performs the work of the command.
41: * <p>
42: * Run is called by UDIG when the command is received.
43: * </p>
44: * API how is this associated with a Thread? is it a Thread?
45: *
46: * @throws Exception
47: */
48: public void run() throws Exception;
49:
50: /**
51: * Instantiates a new copy of the command that will operate in the same manner as the original
52: * command. API isn't this cloneable?
53: *
54: * @return A copy of the current command. The new command must run the same way as the current
55: * object.
56: * <p>
57: * If the current command has already executed it cannot be used again, but a copy may
58: * because a copy should contain none of the state side-effect that execution has on a
59: * command
60: * </p>
61: */
62: public ProjectCommand copy();
63:
64: /**
65: * Returns the name of the Command
66: *
67: * @return The name of the command.
68: */
69: public String getName();
70:
71: }
|