Skip to content

Commit

Permalink
New jobs interface
Browse files Browse the repository at this point in the history
  • Loading branch information
marigostra committed Feb 29, 2024
1 parent f30159b commit 94c7758
Showing 1 changed file with 23 additions and 11 deletions.
34 changes: 23 additions & 11 deletions src/main/java/org/luwrain/linux/lib/SysJob.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2012-2022 Michael Pozhidaev <[email protected]>
Copyright 2012-2024 Michael Pozhidaev <[email protected]>
This file is part of LUWRAIN.
Expand All @@ -22,36 +22,48 @@
import org.luwrain.core.*;
import org.luwrain.linux.*;

import static org.luwrain.core.NullCheck.*;

public final class SysJob implements Job
{

@Override public Instance launch(Listener listener, String[] args, String dir)
{
NullCheck.notNull(listener, "listener");
NullCheck.notNullItems(args, "args");
notNull(listener, "listener");
notNullItems(args, "args");
if (args.length == 0 || args[0].isEmpty())
return new ErrorJob("sys", "No command");
return new ErrorJobInstance("sys", "No command");
final Data data = new Data();
final Instance ins = new Instance(){
@Override public void stop() { if (data.stopProc != null) data.stopProc.run(); }
@Override public String getInstanceName() { return args[0]; }
@Override public Status getStatus() { return data.finished?Status.FINISHED:Status.RUNNING; }
@Override public int getExitCode() { return data.exitCode; }
@Override public boolean isFinishedSuccessfully() { return data.finished && data.exitCode == 0; }
@Override public String getSingleLineState() { return data.state; }
@Override public String[] getMultilineState() { return data.mlState.toArray(new String[data.mlState.size()]); }
@Override public String[] getNativeState() { return data.mlState.toArray(new String[data.mlState.size()]); }
};
@Override public List<String> getInfo(String type)
{
notEmpty(type, "type");
switch(type)
{
case "brief":
return Arrays.asList(data.state);
case "main":
return data.mlState;
default:
return Arrays.asList();
}
}
};
final BashProcess p = new BashProcess(buildCmd(args), dir, EnumSet.noneOf(BashProcess.Flags.class), new BashProcess.Listener(){
@Override public void onOutputLine(String line)
{
data.mlState.add(line);
listener.onMultilineStateChange(ins);
listener.onInfoChange(ins, "main", data.mlState);
}
@Override public void onErrorLine(String line)
{
data.mlState.add(line);
listener.onMultilineStateChange(ins);
listener.onInfoChange(ins, "main", data.mlState);
}
@Override public void onFinishing(int exitCode)
{
Expand All @@ -65,7 +77,7 @@ public final class SysJob implements Job
}
catch(IOException e)
{
return new ErrorJob(args[0], e.getMessage());
return new ErrorJobInstance(args[0], e.getMessage());
}
data.stopProc = ()->p.stop();
return ins;
Expand Down

0 comments on commit 94c7758

Please sign in to comment.