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.ExecutionContext; 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.GetPropertiesCommand; 031 import org.jboss.dna.graph.commands.MoveBranchCommand; 032 import org.jboss.dna.graph.commands.RecordBranchCommand; 033 import org.jboss.dna.graph.commands.SetPropertiesCommand; 034 import org.jboss.dna.graph.connectors.RepositoryConnection; 035 import org.jboss.dna.graph.connectors.RepositoryConnectionFactory; 036 import org.jboss.dna.graph.connectors.RepositorySource; 037 import org.jboss.dna.graph.connectors.RepositorySourceException; 038 import org.jboss.dna.graph.properties.DateTime; 039 040 /** 041 * @author Randall Hauch 042 */ 043 public class SingleSourceCommandExecutor extends AbstractCommandExecutor { 044 045 private RepositoryConnection connection; 046 private final RepositoryConnectionFactory connectionFactory; 047 048 /** 049 * Create a command executor that does nothing. 050 * 051 * @param context the execution context in which the executor will be run; may not be null 052 * @param sourceName the name of the {@link RepositorySource} that is making use of this executor; may not be null or empty 053 * @param connectionFactory the factory for {@link RepositoryConnection} instances 054 */ 055 public SingleSourceCommandExecutor( ExecutionContext context, 056 057 String sourceName, 058 RepositoryConnectionFactory connectionFactory ) { 059 this(context, sourceName, null, connectionFactory); 060 } 061 062 /** 063 * Create a command executor that does nothing. 064 * 065 * @param context the execution context in which the executor will be run; may not be null 066 * @param sourceName the name of the {@link RepositorySource} that is making use of this executor; may not be null or empty 067 * @param now the current time; may be null if the system time is to be used 068 * @param connectionFactory the factory for {@link RepositoryConnection} instances 069 */ 070 public SingleSourceCommandExecutor( ExecutionContext context, 071 String sourceName, 072 DateTime now, 073 RepositoryConnectionFactory connectionFactory ) { 074 super(context, sourceName, now); 075 assert connectionFactory != null; 076 this.connectionFactory = connectionFactory; 077 } 078 079 protected RepositoryConnection getConnection() throws RepositorySourceException { 080 if (connection == null) { 081 // Create a connection ... 082 connection = this.connectionFactory.createConnection(getSourceName()); 083 } 084 return connection; 085 } 086 087 /** 088 * {@inheritDoc} 089 * 090 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#close() 091 */ 092 @Override 093 public void close() { 094 if (this.connection != null) { 095 try { 096 this.connection.close(); 097 } finally { 098 this.connection = null; 099 } 100 } 101 super.close(); 102 } 103 104 /** 105 * {@inheritDoc} 106 * 107 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.CopyBranchCommand) 108 */ 109 @Override 110 public void execute( CopyBranchCommand command ) throws RepositorySourceException { 111 getConnection().execute(this.getExecutionContext(), command); 112 } 113 114 /** 115 * {@inheritDoc} 116 * 117 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.CopyNodeCommand) 118 */ 119 @Override 120 public void execute( CopyNodeCommand command ) throws RepositorySourceException { 121 getConnection().execute(this.getExecutionContext(), command); 122 } 123 124 /** 125 * {@inheritDoc} 126 * 127 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.CreateNodeCommand) 128 */ 129 @Override 130 public void execute( CreateNodeCommand command ) throws RepositorySourceException { 131 getConnection().execute(this.getExecutionContext(), command); 132 } 133 134 /** 135 * {@inheritDoc} 136 * 137 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.DeleteBranchCommand) 138 */ 139 @Override 140 public void execute( DeleteBranchCommand command ) throws RepositorySourceException { 141 getConnection().execute(this.getExecutionContext(), command); 142 } 143 144 /** 145 * {@inheritDoc} 146 * 147 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.GetChildrenCommand) 148 */ 149 @Override 150 public void execute( GetChildrenCommand command ) throws RepositorySourceException { 151 getConnection().execute(this.getExecutionContext(), command); 152 } 153 154 /** 155 * {@inheritDoc} 156 * 157 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.GetPropertiesCommand) 158 */ 159 @Override 160 public void execute( GetPropertiesCommand command ) throws RepositorySourceException { 161 getConnection().execute(this.getExecutionContext(), command); 162 } 163 164 /** 165 * {@inheritDoc} 166 * 167 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.MoveBranchCommand) 168 */ 169 @Override 170 public void execute( MoveBranchCommand command ) throws RepositorySourceException { 171 getConnection().execute(this.getExecutionContext(), command); 172 } 173 174 /** 175 * {@inheritDoc} 176 * 177 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.RecordBranchCommand) 178 */ 179 @Override 180 public void execute( RecordBranchCommand command ) throws RepositorySourceException { 181 getConnection().execute(this.getExecutionContext(), command); 182 } 183 184 /** 185 * {@inheritDoc} 186 * 187 * @see org.jboss.dna.graph.commands.executor.AbstractCommandExecutor#execute(org.jboss.dna.graph.commands.SetPropertiesCommand) 188 */ 189 @Override 190 public void execute( SetPropertiesCommand command ) throws RepositorySourceException { 191 getConnection().execute(this.getExecutionContext(), command); 192 } 193 }