001 /*
002 * JBoss, Home of Professional Open Source.
003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
004 * as indicated by the @author tags. See the copyright.txt file in the
005 * distribution for a full listing of individual contributors.
006 *
007 * This is free software; you can redistribute it and/or modify it
008 * under the terms of the GNU Lesser General Public License as
009 * published by the Free Software Foundation; either version 2.1 of
010 * the License, or (at your option) any later version.
011 *
012 * This software is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this software; if not, write to the Free
019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021 */
022 package org.jboss.dna.graph.commands.executor;
023
024 import org.jboss.dna.graph.commands.CompositeCommand;
025 import org.jboss.dna.graph.commands.CopyBranchCommand;
026 import org.jboss.dna.graph.commands.CopyNodeCommand;
027 import org.jboss.dna.graph.commands.CreateNodeCommand;
028 import org.jboss.dna.graph.commands.DeleteBranchCommand;
029 import org.jboss.dna.graph.commands.GetChildrenCommand;
030 import org.jboss.dna.graph.commands.GetNodeCommand;
031 import org.jboss.dna.graph.commands.GetPropertiesCommand;
032 import org.jboss.dna.graph.commands.GraphCommand;
033 import org.jboss.dna.graph.commands.MoveBranchCommand;
034 import org.jboss.dna.graph.commands.RecordBranchCommand;
035 import org.jboss.dna.graph.commands.SetPropertiesCommand;
036 import org.jboss.dna.graph.connectors.RepositorySourceException;
037
038 /**
039 * @author Randall Hauch
040 */
041 public interface CommandExecutor {
042
043 /**
044 * Execute a graph command. This method should examine the command's types to determine which other <code>execute</code>
045 * methods should be called, and should then call those methods. This method should also do nothing if the command is null.
046 *
047 * @param command the command to be executed
048 * @throws RepositorySourceException if there is an error executing the command
049 */
050 void execute( GraphCommand command ) throws RepositorySourceException;
051
052 /**
053 * Execute a composite command that contains other commands. This method should simply obtain and execute each of the nested
054 * commands.
055 *
056 * @param command the command to be executed; may not be null
057 * @throws RepositorySourceException if there is an error executing the command
058 */
059 void execute( CompositeCommand command ) throws RepositorySourceException;
060
061 /**
062 * Execute a command to get the properties and children of a node. {@link GetNodeCommand} is a subtype of both
063 * {@link GetPropertiesCommand} and {@link GetChildrenCommand}, so this method will be called in place of the
064 * {@link #execute(GetPropertiesCommand)} and {@link #execute(GetChildrenCommand)} methods.
065 *
066 * @param command the command to be executed; may not be null
067 * @throws RepositorySourceException if there is an error executing the command
068 */
069 void execute( GetNodeCommand command ) throws RepositorySourceException;
070
071 /**
072 * Execute a command to get the properties of a node.
073 *
074 * @param command the command to be executed; may not be null
075 * @throws RepositorySourceException if there is an error executing the command
076 */
077 void execute( GetPropertiesCommand command ) throws RepositorySourceException;
078
079 /**
080 * Execute a command to get the children of a node.
081 *
082 * @param command the command to be executed; may not be null
083 * @throws RepositorySourceException if there is an error executing the command
084 */
085 void execute( GetChildrenCommand command ) throws RepositorySourceException;
086
087 /**
088 * Execute a command to create a node and set the node's properties.
089 *
090 * @param command the command to be executed; may not be null
091 * @throws RepositorySourceException if there is an error executing the command
092 */
093 void execute( CreateNodeCommand command ) throws RepositorySourceException;
094
095 /**
096 * Execute a command to set some (or all) of the properties on a node.
097 *
098 * @param command the command to be executed; may not be null
099 * @throws RepositorySourceException if there is an error executing the command
100 */
101 void execute( SetPropertiesCommand command ) throws RepositorySourceException;
102
103 /**
104 * Execute a command to copy a node to a new location.
105 *
106 * @param command the command to be executed; may not be null
107 * @throws RepositorySourceException if there is an error executing the command
108 */
109 void execute( CopyNodeCommand command ) throws RepositorySourceException;
110
111 /**
112 * Execute a command to copy an entire branch to a new location.
113 *
114 * @param command the command to be executed; may not be null
115 * @throws RepositorySourceException if there is an error executing the command
116 */
117 void execute( CopyBranchCommand command ) throws RepositorySourceException;
118
119 /**
120 * Execute a command to record the structure of a branch.
121 *
122 * @param command the command to be executed; may not be null
123 * @throws RepositorySourceException if there is an error executing the command
124 */
125 void execute( RecordBranchCommand command ) throws RepositorySourceException;
126
127 /**
128 * Execute a command to delete an entire branch.
129 *
130 * @param command the command to be executed; may not be null
131 * @throws RepositorySourceException if there is an error executing the command
132 */
133 void execute( DeleteBranchCommand command ) throws RepositorySourceException;
134
135 /**
136 * Execute a command to move a branch from one location to another.
137 *
138 * @param command the command to be executed; may not be null
139 * @throws RepositorySourceException if there is an error executing the command
140 */
141 void execute( MoveBranchCommand command ) throws RepositorySourceException;
142
143 /**
144 * Close this executor, allowing it to clean up any open resources.
145 */
146 void close();
147 }