ansi colors: extend ConsoleViewContentType instead of TextAttributes (http://crucible...
[idea/community.git] / platform / platform-api / src / com / intellij / execution / ui / ConsoleViewContentType.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package com.intellij.execution.ui;
17
18 import com.intellij.execution.process.ProcessOutputTypes;
19 import com.intellij.openapi.editor.colors.ColorKey;
20 import com.intellij.openapi.editor.colors.EditorColorsManager;
21 import com.intellij.openapi.editor.colors.TextAttributesKey;
22 import com.intellij.openapi.editor.markup.TextAttributes;
23 import com.intellij.openapi.util.Key;
24 import com.intellij.util.containers.HashMap;
25 import org.jetbrains.annotations.NonNls;
26 import org.jetbrains.annotations.NotNull;
27
28 import java.util.Collection;
29 import java.util.Map;
30
31 /**
32  * @author Alexey Kudravtsev
33  */
34 public class ConsoleViewContentType {
35   private final String myName;
36   private final TextAttributes myTextAttributes;
37   private final TextAttributesKey myTextAttributesKey;
38
39   private static final Map<Key, ConsoleViewContentType> ourRegisteredTypes = new HashMap<>();
40
41   public static final ColorKey CONSOLE_BACKGROUND_KEY = ColorKey.createColorKey("CONSOLE_BACKGROUND_KEY");
42
43   public static final TextAttributesKey NORMAL_OUTPUT_KEY = TextAttributesKey.createTextAttributesKey("CONSOLE_NORMAL_OUTPUT");
44   public static final TextAttributesKey LOG_WARNING_OUTPUT_KEY = TextAttributesKey.createTextAttributesKey("LOG_WARNING_OUTPUT");
45   public static final TextAttributesKey ERROR_OUTPUT_KEY = TextAttributesKey.createTextAttributesKey("CONSOLE_ERROR_OUTPUT");
46   public static final TextAttributesKey LOG_ERROR_OUTPUT_KEY = TextAttributesKey.createTextAttributesKey("LOG_ERROR_OUTPUT");
47   public static final TextAttributesKey LOG_EXPIRED_ENTRY = TextAttributesKey.createTextAttributesKey("LOG_EXPIRED_ENTRY");
48   public static final TextAttributesKey USER_INPUT_KEY = TextAttributesKey.createTextAttributesKey("CONSOLE_USER_INPUT");
49   public static final TextAttributesKey SYSTEM_OUTPUT_KEY = TextAttributesKey.createTextAttributesKey("CONSOLE_SYSTEM_OUTPUT");
50
51   public static final ConsoleViewContentType NORMAL_OUTPUT = new ConsoleViewContentType("NORMAL_OUTPUT", NORMAL_OUTPUT_KEY);
52   public static final ConsoleViewContentType ERROR_OUTPUT = new ConsoleViewContentType("ERROR_OUTPUT", ERROR_OUTPUT_KEY);
53   public static final ConsoleViewContentType USER_INPUT = new ConsoleViewContentType("USER_OUTPUT", USER_INPUT_KEY);
54   public static final ConsoleViewContentType SYSTEM_OUTPUT = new ConsoleViewContentType("SYSTEM_OUTPUT", SYSTEM_OUTPUT_KEY);
55
56   public static final ConsoleViewContentType[] OUTPUT_TYPES = {NORMAL_OUTPUT, ERROR_OUTPUT, USER_INPUT, SYSTEM_OUTPUT};
57
58   static {
59     ourRegisteredTypes.put(ProcessOutputTypes.SYSTEM, SYSTEM_OUTPUT);
60     ourRegisteredTypes.put(ProcessOutputTypes.STDOUT, NORMAL_OUTPUT);
61     ourRegisteredTypes.put(ProcessOutputTypes.STDERR, ERROR_OUTPUT);
62   }
63
64   public ConsoleViewContentType(@NonNls final String name, final TextAttributes textAttributes) {
65     myName = name;
66     myTextAttributes = textAttributes;
67     myTextAttributesKey = null;
68   }
69
70   public ConsoleViewContentType(@NonNls String name, TextAttributesKey textAttributesKey) {
71     myName = name;
72     myTextAttributes = null;
73     myTextAttributesKey = textAttributesKey;
74   }
75
76   public String toString() {
77     return myName;
78   }
79
80   /**
81    * Returns {@code TextAttributes} instance defining the visual representation of text.
82    * <p> A subclass might override this method.
83    *
84    * @return not-null TextAttributes instance
85    */
86   public TextAttributes getAttributes() {
87     if (myTextAttributesKey != null) {
88       return EditorColorsManager.getInstance().getGlobalScheme().getAttributes(myTextAttributesKey);
89     }
90     return myTextAttributes;
91   }
92
93   public static ConsoleViewContentType registerNewConsoleViewType(@NotNull Key key, @NotNull TextAttributesKey attributesKey) {
94     ConsoleViewContentType type = new ConsoleViewContentType(key.toString(), attributesKey);
95     registerNewConsoleViewType(key, type);
96     return type;
97   }
98
99   public static synchronized void registerNewConsoleViewType(final Key processOutputType, final ConsoleViewContentType attributes) {
100     ourRegisteredTypes.put(processOutputType, attributes);
101   }
102
103   public static synchronized ConsoleViewContentType getConsoleViewType(final Key processOutputType) {
104     if (ourRegisteredTypes.containsKey(processOutputType)) {
105       return ourRegisteredTypes.get(processOutputType);
106     }
107     else {
108       return SYSTEM_OUTPUT;
109     }
110   }
111
112   public static synchronized Collection<ConsoleViewContentType> getRegisteredTypes() {
113     return ourRegisteredTypes.values();
114   }
115
116 }