update copyright
[fedora-idea.git] / plugins / junit / src / com / intellij / execution / junit2 / InputRouter.java
blobf0f9d74f67d8a9fc9cf3deac7c959f5922ab180d
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.intellij.execution.junit2;
19 import com.intellij.execution.junit2.segments.InputConsumer;
20 import com.intellij.execution.junit2.segments.ObjectReader;
21 import com.intellij.execution.junit2.segments.PacketConsumer;
22 import com.intellij.execution.process.ProcessAdapter;
23 import com.intellij.execution.process.ProcessEvent;
24 import com.intellij.execution.process.ProcessHandler;
25 import com.intellij.execution.ui.ConsoleViewContentType;
26 import com.intellij.openapi.application.ApplicationManager;
27 import com.intellij.openapi.util.Condition;
28 import com.intellij.openapi.util.Conditions;
29 import com.intellij.openapi.util.Key;
30 import com.intellij.rt.execution.junit.segments.PoolOfDelimiters;
32 public class InputRouter implements PacketConsumer {
33 private InputConsumer myInputConsumer = InputConsumer.DEAF;
34 private static final Condition<ConsoleViewContentType> ANY_EXCEPT_ERR = new Condition<ConsoleViewContentType>() {
35 public boolean value(final ConsoleViewContentType consoleViewContentType) {
36 return consoleViewContentType != ConsoleViewContentType.ERROR_OUTPUT;
39 private static final Condition<ConsoleViewContentType> ERR = Conditions.not(ANY_EXCEPT_ERR);
40 private final Condition<ConsoleViewContentType> mySourceFilter;
42 private InputRouter(final Condition<ConsoleViewContentType> sourceFilter) {
43 mySourceFilter = sourceFilter;
46 public void readPacketFrom(final ObjectReader reader) {
47 myInputConsumer = reader.readObject();
50 public void setInputConsumer(final InputConsumer inputConsumer) {
51 myInputConsumer = inputConsumer;
54 public void onFinished() {
57 public String getPrefix() {
58 return PoolOfDelimiters.INPUT_COSUMER;
61 public void attachTo(final ProcessHandler process) {
62 process.addProcessListener(new MyProcessAdapter(mySourceFilter));
65 public static InputRouter createOutRouter() {
66 return new InputRouter(ANY_EXCEPT_ERR);
69 public static InputRouter createErrRouter() {
70 return new InputRouter(ERR);
73 private class MyProcessAdapter extends ProcessAdapter {
74 private final Condition<ConsoleViewContentType> mySourceFilter;
76 public MyProcessAdapter(final Condition<ConsoleViewContentType> sourceFilter) {
77 mySourceFilter = sourceFilter;
80 public void processTerminated(ProcessEvent event) {
81 final ProcessHandler processHandler = event.getProcessHandler();
82 ApplicationManager.getApplication().invokeLater(new Runnable(){
83 public void run() {
84 processHandler.removeProcessListener(MyProcessAdapter.this);
86 });
89 public void onTextAvailable(final ProcessEvent event, final Key outputType) {
90 ApplicationManager.getApplication().invokeLater(new Runnable(){
91 public void run() {
92 final ConsoleViewContentType consoleViewType = ConsoleViewContentType.getConsoleViewType(outputType);
93 if (mySourceFilter.value(consoleViewType)) {
94 myInputConsumer.onOutput(event.getText(), consoleViewType);
97 });