package com.asolutions.scmsshd.commands.factories;
import java.util.Properties;
import org.apache.sshd.server.CommandFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.asolutions.scmsshd.commands.FilteredCommand;
import com.asolutions.scmsshd.commands.NoOpCommand;
import com.asolutions.scmsshd.commands.filters.BadCommandException;
import com.asolutions.scmsshd.commands.filters.IBadCommandFilter;
import com.asolutions.scmsshd.converters.path.IPathToProjectNameConverter;
import com.asolutions.scmsshd.sshd.IProjectAuthorizer;
public class CommandFactoryBase implements CommandFactory {
protected final Logger log = LoggerFactory.getLogger(getClass());
private IProjectAuthorizer projectAuthorizer;
private IBadCommandFilter badCommandFilter;
private ISCMCommandFactory scmCommandFactory;
private IPathToProjectNameConverter pathToProjectNameConverter;
private Properties configuration;
public CommandFactoryBase() {
}
public Command createCommand(String command) {
log.info("Creating command handler for {}", command);
try {
FilteredCommand fc = badCommandFilter.filterOrThrow(command);
return scmCommandFactory.create(fc, projectAuthorizer, pathToProjectNameConverter, getConfiguration());
} catch (BadCommandException e) {
log.error("Got Bad Command Exception For Command: [" + command
+ "]", e);
return new NoOpCommand();
}
}
public void setProjectAuthorizor(IProjectAuthorizer projectAuthorizer) {
this.projectAuthorizer = projectAuthorizer;
}
public void setBadCommandFilter(IBadCommandFilter badCommandFilter) {
this.badCommandFilter = badCommandFilter;
}
public void setScmCommandFactory(ISCMCommandFactory scmCommandFactory) {
this.scmCommandFactory = scmCommandFactory;
}
public IBadCommandFilter getBadCommandFilter() {
return this.badCommandFilter;
}
public ISCMCommandFactory getScmCommandFactory() {
return this.scmCommandFactory;
}
public void setPathToProjectNameConverter(IPathToProjectNameConverter pathToProjectNameConverter) {
this.pathToProjectNameConverter = pathToProjectNameConverter;
}
public IPathToProjectNameConverter getPathToProjectNameConverter() {
return pathToProjectNameConverter;
}
public void setConfiguration(Properties configuration) {
this.configuration = configuration;
}
public Properties getConfiguration() {
return configuration;
}
}