package org.openslx.taskmanager.tasks; import java.util.Map; import org.openslx.taskmanager.api.SystemCommandTask; import com.google.gson.annotations.Expose; public class AptUpgrade extends SystemCommandTask { private static enum Mode { UPDATE, UPGRADE, FULL_UPGRADE, FIX, AUTOREMOVE; } @Expose private Mode mode; private final Output status = new Output(); @Override protected boolean initTask() { this.timeoutSeconds = 600; this.setStatusObject( status ); if ( mode == null ) { this.status.error = "Invalid mode selected"; return false; } return true; } @Override protected String[] initCommandLine() { if ( mode == Mode.UPDATE ) return new String[] { "sudo", "-n", "apt-get", "-y", "update" }; if ( mode == Mode.UPGRADE ) return new String[] { "sudo", "-n", "apt-get", "-y", "upgrade" }; if ( mode == Mode.AUTOREMOVE ) return new String[] { "sudo", "-n", "apt-get", "-y", "autoremove" }; if ( mode == Mode.FULL_UPGRADE ) return new String[] { "sudo", "-n", "apt-get", "-y", "full-upgrade" }; if ( mode == Mode.FIX ) return new String[] { "sudo", "-n", "apt-get", "-y", "install", "-f" }; return null; } @Override protected void initEnvironment( Map environment ) { environment.put( "LANG", "C.UTF-8" ); environment.put( "LC_ALL", "C.UTF-8" ); environment.put( "DEBIAN_FRONTEND", "noninteractive" ); } @Override protected boolean processEnded( int exitCode ) { return exitCode == 0; } @Override protected void processStdOut( String line ) { this.status.output.append( line ); this.status.output.append( '\n' ); while ( this.status.output.length() > 20000 ) { this.status.output.delete( 0, 1000 ); } } @Override protected void processStdErr( String line ) { if ( status.error == null ) { status.error = line; } else { status.error += "\n" + line; } } private static class Output { private String error; private StringBuilder output = new StringBuilder(); } }