01: package org.drools.eclipse.flow.common.editor.core.command;
02:
03: /*
04: * Copyright 2005 JBoss Inc
05: *
06: * Licensed under the Apache License, Version 2.0 (the "License");
07: * you may not use this file except in compliance with the License.
08: * You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing, software
13: * distributed under the License is distributed on an "AS IS" BASIS,
14: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: * See the License for the specific language governing permissions and
16: * limitations under the License.
17: */
18:
19: import java.util.Iterator;
20: import java.util.List;
21:
22: import org.drools.eclipse.flow.common.editor.core.ElementConnection;
23: import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
24: import org.eclipse.gef.commands.Command;
25:
26: /**
27: * A command for creating an element.
28: *
29: * @author <a href="mailto:kris_verlaenen@hotmail.com">Kris Verlaenen</a>
30: */
31: public class ElementConnectionCreateCommand extends Command {
32:
33: private ElementConnection connection;
34: private ElementWrapper source;
35: private ElementWrapper target;
36:
37: public boolean canExecute() {
38: if (source.equals(target)) {
39: return false;
40: }
41:
42: // Check for existence of connection already
43: List connections = source.getOutgoingConnections(connection
44: .getType());
45: for (Iterator it = connections.iterator(); it.hasNext();) {
46: ElementConnection conn = (ElementConnection) it.next();
47: if (conn.getTarget().equals(target)) {
48: return false;
49: }
50: }
51: return source.acceptsOutgoingConnection(connection)
52: && target != null
53: && target.acceptsIncomingConnection(connection);
54: }
55:
56: public void execute() {
57: connection.connect(source, target);
58: }
59:
60: public ElementWrapper getSource() {
61: return source;
62: }
63:
64: public ElementWrapper getTarget() {
65: return target;
66: }
67:
68: public void redo() {
69: connection.connect(source, target);
70: }
71:
72: public void setSource(ElementWrapper source) {
73: this .source = source;
74: }
75:
76: public void setConnection(ElementConnection connection) {
77: this .connection = connection;
78: }
79:
80: public void setTarget(ElementWrapper target) {
81: this .target = target;
82: }
83:
84: public void undo() {
85: connection.disconnect();
86: }
87:
88: }
|