package org.springframework.roo.addon.git;
import java.io.File;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.eclipse.jgit.lib.Constants;
import org.osgi.service.component.ComponentContext;
import org.springframework.roo.project.PathResolver;
import org.springframework.roo.shell.Shell;
import org.springframework.roo.shell.event.ShellStatus;
import org.springframework.roo.shell.event.ShellStatus.Status;
import org.springframework.roo.shell.event.ShellStatusListener;
/**
* Listener for Shell events to support automatic Git repository commits.
*
* @author Stefan Schmidt
* @since 1.1
*/
@Component(immediate = true)
@Service
public class GitShellEventListener implements ShellStatusListener {
@Reference private GitOperations gitOperations;
@Reference private PathResolver pathResolver;
@Reference private Shell shell;
protected void activate(final ComponentContext context) {
shell.addShellStatusListener(this);
}
protected void deactivate(final ComponentContext context) {
shell.removeShellStatusListener(this);
}
private boolean isGitEnabled() {
return new File(pathResolver.getRoot(), Constants.DOT_GIT)
.isDirectory();
}
public void onShellStatusChange(final ShellStatus oldStatus,
final ShellStatus newStatus) {
if (newStatus.getStatus().equals(Status.EXECUTION_SUCCESS)
&& isGitEnabled() && gitOperations.isAutomaticCommit()) {
gitOperations.commitAllChanges(newStatus.getMessage());
}
}
}