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(){
84 processHandler
.removeProcessListener(MyProcessAdapter
.this);
89 public void onTextAvailable(final ProcessEvent event
, final Key outputType
) {
90 ApplicationManager
.getApplication().invokeLater(new Runnable(){
92 final ConsoleViewContentType consoleViewType
= ConsoleViewContentType
.getConsoleViewType(outputType
);
93 if (mySourceFilter
.value(consoleViewType
)) {
94 myInputConsumer
.onOutput(event
.getText(), consoleViewType
);