package org.openslx.taskmanager.tasks; import java.util.ArrayList; import java.util.List; import org.openslx.taskmanager.api.SystemCommandTask; import com.google.gson.annotations.Expose; public class Systemctl extends SystemCommandTask { /** * What to do: start, stop... */ @Expose private String operation; @Expose String service; private StatusObject status = new StatusObject(); @Override protected String[] initCommandLine() { switch ( operation ) { case "start": case "stop": case "enable": case "disable": case "restart": break; default: status.addMsg( "Unknown operation: " + operation ); return null; } switch ( service ) { case "dmsd": break; case "taskmanager": if ( !operation.equals( "restart" ) ) { status.addMsg( "Error: Service taskmanager can only be restarted." ); return null; } break; default: status.addMsg( "Unknown service: " + operation ); return null; } List params = new ArrayList<>(); params.add( "/usr/bin/sudo" ); params.add( "-n" ); params.add( "-u" ); params.add( "root" ); params.add( "/bin/systemctl" ); params.add( operation ); params.add( service ); this.timeoutSeconds = 10; return params.toArray( new String[ params.size() ] ); } private boolean errorIfNull( String check, String message ) { if ( check == null ) status.addMsg( message ); return check == null; } @Override protected boolean processEnded( int exitCode ) { return exitCode == 0; } @Override protected void processStdOut( String line ) { status.addMsg( line ); } @Override protected void processStdErr( String line ) { status.addMsg( line ); } @Override protected boolean initTask() { this.setStatusObject( this.status ); return !errorIfNull( operation, "No operation given" ); } class StatusObject { private String messages = ""; public void addMsg( String str ) { messages = messages + "\n" + str; } } }