summaryrefslogtreecommitdiffstats
path: root/sched/src/com/android/sched/util/file/OutputStreamFile.java
diff options
context:
space:
mode:
Diffstat (limited to 'sched/src/com/android/sched/util/file/OutputStreamFile.java')
-rw-r--r--sched/src/com/android/sched/util/file/OutputStreamFile.java69
1 files changed, 63 insertions, 6 deletions
diff --git a/sched/src/com/android/sched/util/file/OutputStreamFile.java b/sched/src/com/android/sched/util/file/OutputStreamFile.java
index 59fa2474..055869b1 100644
--- a/sched/src/com/android/sched/util/file/OutputStreamFile.java
+++ b/sched/src/com/android/sched/util/file/OutputStreamFile.java
@@ -18,6 +18,9 @@ package com.android.sched.util.file;
import com.android.sched.util.ConcurrentIOException;
import com.android.sched.util.RunnableHooks;
+import com.android.sched.util.location.Location;
+import com.android.sched.util.location.StandardErrorLocation;
+import com.android.sched.util.location.StandardOutputLocation;
import com.android.sched.util.stream.UncloseableOutputStream;
import com.android.sched.util.stream.UncloseablePrintStream;
@@ -35,6 +38,9 @@ import javax.annotation.Nonnull;
public class OutputStreamFile extends AbstractStreamFile {
private final boolean append;
+ @CheckForNull
+ private PrintStream printer;
+
public OutputStreamFile(@Nonnull String name,
@CheckForNull RunnableHooks hooks,
@Nonnull Existence existence,
@@ -77,16 +83,67 @@ public class OutputStreamFile extends AbstractStreamFile {
this.append = false;
}
- public OutputStreamFile() {
- super(Permission.WRITE);
+ @Nonnull
+ private static final Location STANDARD_OUTPUT_LOCATION = new StandardOutputLocation();
+ @Nonnull
+ private static final Location STANDARD_ERROR_LOCATION = new StandardErrorLocation();
+
+ /**
+ * Standard output stream kinds
+ */
+ public enum StandardOutputKind {
+
+ STANDARD_OUTPUT {
+ @Override
+ @Nonnull
+ public PrintStream getPrintStream() {
+ return System.out;
+ }
+
+ @Override
+ @Nonnull
+ public Location getLocation() {
+ return STANDARD_OUTPUT_LOCATION;
+ }
+ },
+
+ STANDARD_ERROR {
+ @Override
+ @Nonnull
+ public PrintStream getPrintStream() {
+ return System.err;
+ }
+
+ @Override
+ @Nonnull
+ public Location getLocation() {
+ return STANDARD_ERROR_LOCATION;
+ }
+ };
+
+ @Nonnull
+ public abstract PrintStream getPrintStream();
+
+ @Nonnull
+ public abstract Location getLocation();
+ }
+
+ public OutputStreamFile(@Nonnull StandardOutputKind standardOutputKind) {
+ super(standardOutputKind.getLocation());
+ this.printer = standardOutputKind.getPrintStream();
+ this.append = true;
+ }
+ public OutputStreamFile(@Nonnull PrintStream printer, @Nonnull Location location) {
+ super(location);
+ this.printer = printer;
this.append = true;
}
@Nonnull
public OutputStream getOutputStream() {
- if (file == null) {
- return new UncloseableOutputStream(System.out);
+ if (printer != null) {
+ return new UncloseableOutputStream(printer);
} else {
clearRemover();
try {
@@ -99,8 +156,8 @@ public class OutputStreamFile extends AbstractStreamFile {
@Nonnull
public PrintStream getPrintStream() {
- if (file == null) {
- return new UncloseablePrintStream(System.out);
+ if (printer != null) {
+ return new UncloseablePrintStream(printer);
} else {
clearRemover();
try {