Revision 3513 branches/FMap_CAD/libraries/libFMap/src/com/iver/cit/gvsig/fmap/edition/MemoryCommandRecord.java

View differences:

MemoryCommandRecord.java
40 40
 */
41 41
package com.iver.cit.gvsig.fmap.edition;
42 42

  
43
import java.util.ArrayList;
43
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
44 44

  
45
import java.io.IOException;
45 46

  
47
import java.util.Stack;
48

  
49

  
46 50
/**
47
 * DOCUMENT ME!
51
 * Clase en memoria para registrar y gestionar los comandos que vamos
52
 * realizando. La forma en que ha sido implementada esta clase, en vez de una
53
 * ?nica lista para albergar los comandos de deshacer(undos) y los de
54
 * rehacer(redos), se ha optado por dos pilas una para deshacer(undos) y otra
55
 * para rehacer(redos), de esta forma :  Cuando se a?ade un nuevo comando, se
56
 * inserta este a la pila de deshacer(undos) y se borra de la de
57
 * rehacer(redos). Si se realiza un deshacer se desapila este comando de la
58
 * pila deshacer(undos) y se apila en la de rehacer(redos). Y de la misma
59
 * forma cuando se realiza un rehacer se desapila este comando de la pila de
60
 * rehacer(redos) y pasa a la de deshacer(undos).
48 61
 *
49
 * @author Fernando Gonz?lez Cort?s
62
 * @author Vicente Caballero Navarro
50 63
 */
51 64
public class MemoryCommandRecord implements CommandRecord {
52
	ArrayList commands = new ArrayList();
65
	Stack undos = new Stack();
66
	Stack redos = new Stack();
53 67

  
54 68
	/**
69
	 * A?ade el comando a la pila de deshacer y borra todo el contenido de la
70
	 * pila rehacer.
71
	 *
72
	 * @param command Comando a a?adir.
73
	 *
74
	 * @throws IOException
75
	 * @throws DriverIOException
76
	 *
55 77
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#addCommand(com.iver.cit.gvsig.fmap.edition.Command)
56 78
	 */
57
	public boolean addCommand(Command command) {
58
		commands.add(command);
59

  
60
		return true;
79
	public void pushCommand(Command command)
80
		throws IOException, DriverIOException {
81
		undos.add(command);
82
		redos.clear();
61 83
	}
62 84

  
63 85
	/**
86
	 * Realiza la operaci?n del ?ltimo comando de deshacer y lo apila en los de
87
	 * rehacer.
88
	 *
89
	 * @throws DriverIOException
90
	 * @throws IOException
91
	 *
64 92
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#delCommand(com.iver.cit.gvsig.fmap.edition.Command)
65 93
	 */
66
	public boolean delCommand(Command command) {
67
		commands.remove(command);
68

  
69
		return true;
94
	public void undoCommand() throws DriverIOException, IOException {
95
		Command command = (Command) undos.pop();
96
		command.undo();
97
		redos.add(command);
70 98
	}
71 99

  
72 100
	/**
73
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#clear()
101
	 * Realiza la operaci?n de rehacer el ?ltimo comando apilado y lo a?ade a
102
	 * la pila deshacer.
103
	 *
104
	 * @throws DriverIOException
105
	 * @throws IOException
106
	 *
107
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#redoCommand()
74 108
	 */
75
	public boolean clear() {
76
		commands.clear();
77

  
78
		return true;
109
	public void redoCommand() throws DriverIOException, IOException {
110
		Command command = (Command) redos.pop();
111
		command.redo();
112
		undos.add(command);
79 113
	}
80 114

  
81 115
	/**
82
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#execute()
116
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#moreUndoCommands()
83 117
	 */
84
	public boolean execute() {
85
		for (int i = 0; i < commands.size(); i++) {
86
			((Command) commands.get(i)).execute();
87
		}
88

  
89
		return true;
118
	public boolean moreUndoCommands() {
119
		return (!undos.isEmpty());
90 120
	}
91 121

  
92 122
	/**
93
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#start()
123
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#moreRedoCommands()
94 124
	 */
95
	public boolean start() {
96
		return true;
125
	public boolean moreRedoCommands() {
126
		return (!redos.isEmpty());
97 127
	}
98

  
99
	/**
100
	 * @see com.iver.cit.gvsig.fmap.edition.CommandRecord#stop()
101
	 */
102
	public boolean stop() {
103
		return true;
104
	}
105 128
}

Also available in: Unified diff