最古版。新版→https://osdn.jp/users/tacticsrealize/pf/ChlorophyllUploader/wiki/FrontPage
Revision | 17b15692b7cd768400ce1fbe914d2b8576152f58 (tree) |
---|---|
Time | 2015-07-14 21:18:02 |
Author | MirrgieRiana Kurilab |
Commiter | MirrgieRiana Kurilab |
HLog: LoggerMirrgに実装を委譲
@@ -1,184 +1,73 @@ | ||
1 | 1 | package mirrg.ants.util; |
2 | 2 | |
3 | -import java.io.IOException; | |
4 | -import java.io.OutputStream; | |
5 | 3 | import java.io.PrintStream; |
6 | -import java.io.UnsupportedEncodingException; | |
7 | -import java.nio.charset.Charset; | |
8 | -import java.util.ArrayList; | |
9 | -import java.util.Iterator; | |
10 | -import java.util.function.Consumer; | |
11 | 4 | import java.util.function.Predicate; |
12 | 5 | |
6 | +import mirrg.ants.util.LoggerMirrg.EnumTypeLog; | |
7 | + | |
13 | 8 | public class HLog |
14 | 9 | { |
15 | 10 | |
11 | + public static final LoggerMirrg logger = new LoggerMirrg(); | |
12 | + | |
16 | 13 | public static void fine(String string) |
17 | 14 | { |
18 | - log(EnumTypeLog.FINE, string); | |
15 | + logger.fine(string); | |
19 | 16 | } |
20 | 17 | |
21 | 18 | public static void warning(String string) |
22 | 19 | { |
23 | - log(EnumTypeLog.WARNING, string); | |
20 | + logger.warning(string); | |
24 | 21 | } |
25 | 22 | |
26 | 23 | public static void error(String string) |
27 | 24 | { |
28 | - log(EnumTypeLog.ERROR, string); | |
25 | + logger.error(string); | |
29 | 26 | } |
30 | 27 | |
31 | 28 | public static void info(String string) |
32 | 29 | { |
33 | - log(EnumTypeLog.INFO, string); | |
34 | - } | |
35 | - | |
36 | - /////////////////////////////////////////////// | |
37 | - | |
38 | - private static PrintStream outFine; | |
39 | - | |
40 | - public static PrintStream fine() | |
41 | - { | |
42 | - if (outFine == null) { | |
43 | - outFine = createPrintStream(HLog::fine); | |
44 | - } | |
45 | - return outFine; | |
46 | - } | |
47 | - | |
48 | - private static PrintStream outWarning; | |
49 | - | |
50 | - public static PrintStream warning() | |
51 | - { | |
52 | - if (outWarning == null) { | |
53 | - outWarning = createPrintStream(HLog::warning); | |
54 | - } | |
55 | - return outWarning; | |
30 | + logger.info(string); | |
56 | 31 | } |
57 | 32 | |
58 | - private static PrintStream outError; | |
59 | - | |
60 | - public static PrintStream error() | |
61 | - { | |
62 | - if (outError == null) { | |
63 | - outError = createPrintStream(HLog::error); | |
64 | - } | |
65 | - return outError; | |
66 | - } | |
67 | - | |
68 | - private static PrintStream outInfo; | |
69 | - | |
70 | - public static PrintStream info() | |
71 | - { | |
72 | - if (outInfo == null) { | |
73 | - outInfo = createPrintStream(HLog::info); | |
74 | - } | |
75 | - return outInfo; | |
76 | - } | |
77 | - | |
78 | - /////////////////////////////////////////////// | |
79 | - | |
80 | - private static PrintStream createPrintStream(Consumer<String> consumer) | |
81 | - { | |
82 | - try { | |
83 | - return new PrintStream(new OutputStreamLogger(consumer), true, "UTF-8"); | |
84 | - } catch (UnsupportedEncodingException e) { | |
85 | - throw new RuntimeException(e); | |
86 | - } | |
87 | - } | |
88 | - | |
89 | - private static ArrayList<Tuple<EnumTypeLog, String>> messages = new ArrayList<>(); | |
90 | - | |
91 | - private static ArrayList<Predicate<Tuple<EnumTypeLog, String>>> listeners = new ArrayList<>(); | |
92 | - | |
93 | 33 | public static void log(EnumTypeLog typeLog, String string) |
94 | 34 | { |
95 | - Tuple<EnumTypeLog, String> message = new Tuple<>(typeLog, string); | |
96 | - | |
97 | - messages.add(message); | |
98 | - | |
99 | - Iterator<Predicate<Tuple<EnumTypeLog, String>>> iterator = listeners.iterator(); | |
100 | - while (iterator.hasNext()) { | |
101 | - Predicate<Tuple<EnumTypeLog, String>> next = iterator.next(); | |
102 | - | |
103 | - if (next.test(message)) { | |
104 | - iterator.remove(); | |
105 | - } | |
106 | - } | |
107 | - } | |
108 | - | |
109 | - /** | |
110 | - * @param listener | |
111 | - * イベントハンドラを削除する場合にtrueを返す。 | |
112 | - */ | |
113 | - public static void registerListener(Predicate<Tuple<EnumTypeLog, String>> listener) | |
114 | - { | |
115 | - listeners.add(listener); | |
116 | - } | |
117 | - | |
118 | - public static enum EnumTypeLog | |
119 | - { | |
120 | - FINE, | |
121 | - WARNING, | |
122 | - ERROR, | |
123 | - INFO, | |
35 | + logger.log(typeLog, string); | |
124 | 36 | } |
125 | 37 | |
126 | - private static class OutputStreamLogger extends OutputStream | |
38 | + public static PrintStream fine() | |
127 | 39 | { |
128 | - | |
129 | - private static final Charset charset = Charset.forName("UTF-8"); | |
130 | - | |
131 | - private Consumer<String> consumer; | |
132 | - | |
133 | - public OutputStreamLogger(Consumer<String> consumer) | |
134 | - { | |
135 | - this.consumer = consumer; | |
136 | - } | |
137 | - | |
138 | - private ArrayList<Byte> buffer = new ArrayList<>(); | |
139 | - private boolean afterR = false; | |
40 | + return logger.fine(); | |
41 | + } | |
140 | 42 | |
141 | - @Override | |
142 | - public void write(int b) throws IOException | |
143 | - { | |
144 | - if (b == '\r') { | |
145 | - flush2(); | |
146 | - } else { | |
147 | - if (b == '\n') { | |
148 | - if (afterR) { | |
43 | + public static PrintStream warning() | |
44 | + { | |
45 | + return logger.warning(); | |
46 | + } | |
149 | 47 | |
150 | - } else { | |
151 | - flush2(); | |
152 | - } | |
153 | - } else { | |
154 | - buffer.add(Byte.valueOf((byte) b)); | |
155 | - } | |
156 | - } | |
157 | - | |
158 | - afterR = b == '\r'; | |
159 | - } | |
48 | + public static PrintStream error() | |
49 | + { | |
50 | + return logger.error(); | |
51 | + } | |
160 | 52 | |
161 | - private void flush2() | |
162 | - { | |
163 | - byte[] bytes = new byte[buffer.size()]; | |
164 | - for (int i = 0; i < buffer.size(); i++) { | |
165 | - bytes[i] = buffer.get(i); | |
166 | - } | |
167 | - | |
168 | - consumer.accept(new String(bytes, charset)); | |
169 | - buffer.clear(); | |
170 | - } | |
171 | - | |
53 | + public static PrintStream info() | |
54 | + { | |
55 | + return logger.info(); | |
172 | 56 | } |
173 | 57 | |
174 | 58 | public static int getMessageCount() |
175 | 59 | { |
176 | - return messages.size(); | |
60 | + return logger.getMessageCount(); | |
177 | 61 | } |
178 | 62 | |
179 | 63 | public static Tuple<EnumTypeLog, String> getMessage(int index) |
180 | 64 | { |
181 | - return messages.get(index); | |
65 | + return logger.getMessage(index); | |
66 | + } | |
67 | + | |
68 | + public static void registerListener(Predicate<Tuple<EnumTypeLog, String>> listener) | |
69 | + { | |
70 | + logger.registerListener(listener); | |
182 | 71 | } |
183 | 72 | |
184 | 73 | } |
@@ -0,0 +1,184 @@ | ||
1 | +package mirrg.ants.util; | |
2 | + | |
3 | +import java.io.IOException; | |
4 | +import java.io.OutputStream; | |
5 | +import java.io.PrintStream; | |
6 | +import java.io.UnsupportedEncodingException; | |
7 | +import java.nio.charset.Charset; | |
8 | +import java.util.ArrayList; | |
9 | +import java.util.Iterator; | |
10 | +import java.util.function.Consumer; | |
11 | +import java.util.function.Predicate; | |
12 | + | |
13 | +public class LoggerMirrg | |
14 | +{ | |
15 | + | |
16 | + public void fine(String string) | |
17 | + { | |
18 | + log(EnumTypeLog.FINE, string); | |
19 | + } | |
20 | + | |
21 | + public void warning(String string) | |
22 | + { | |
23 | + log(EnumTypeLog.WARNING, string); | |
24 | + } | |
25 | + | |
26 | + public void error(String string) | |
27 | + { | |
28 | + log(EnumTypeLog.ERROR, string); | |
29 | + } | |
30 | + | |
31 | + public void info(String string) | |
32 | + { | |
33 | + log(EnumTypeLog.INFO, string); | |
34 | + } | |
35 | + | |
36 | + public void log(EnumTypeLog typeLog, String string) | |
37 | + { | |
38 | + Tuple<EnumTypeLog, String> message = new Tuple<>(typeLog, string); | |
39 | + | |
40 | + messages.add(message); | |
41 | + | |
42 | + Iterator<Predicate<Tuple<EnumTypeLog, String>>> iterator = listeners.iterator(); | |
43 | + while (iterator.hasNext()) { | |
44 | + Predicate<Tuple<EnumTypeLog, String>> next = iterator.next(); | |
45 | + | |
46 | + if (next.test(message)) { | |
47 | + iterator.remove(); | |
48 | + } | |
49 | + } | |
50 | + } | |
51 | + | |
52 | + /////////////////////////////////////////////// | |
53 | + | |
54 | + private PrintStream outFine; | |
55 | + | |
56 | + public PrintStream fine() | |
57 | + { | |
58 | + if (outFine == null) { | |
59 | + outFine = createPrintStream(this::fine); | |
60 | + } | |
61 | + return outFine; | |
62 | + } | |
63 | + | |
64 | + private PrintStream outWarning; | |
65 | + | |
66 | + public PrintStream warning() | |
67 | + { | |
68 | + if (outWarning == null) { | |
69 | + outWarning = createPrintStream(this::warning); | |
70 | + } | |
71 | + return outWarning; | |
72 | + } | |
73 | + | |
74 | + private PrintStream outError; | |
75 | + | |
76 | + public PrintStream error() | |
77 | + { | |
78 | + if (outError == null) { | |
79 | + outError = createPrintStream(this::error); | |
80 | + } | |
81 | + return outError; | |
82 | + } | |
83 | + | |
84 | + private PrintStream outInfo; | |
85 | + | |
86 | + public PrintStream info() | |
87 | + { | |
88 | + if (outInfo == null) { | |
89 | + outInfo = createPrintStream(this::info); | |
90 | + } | |
91 | + return outInfo; | |
92 | + } | |
93 | + | |
94 | + private PrintStream createPrintStream(Consumer<String> consumer) | |
95 | + { | |
96 | + try { | |
97 | + return new PrintStream(new OutputStreamLogger(consumer), true, "UTF-8"); | |
98 | + } catch (UnsupportedEncodingException e) { | |
99 | + throw new RuntimeException(e); | |
100 | + } | |
101 | + } | |
102 | + | |
103 | + /////////////////////////////////////////////// | |
104 | + | |
105 | + private ArrayList<Tuple<EnumTypeLog, String>> messages = new ArrayList<>(); | |
106 | + | |
107 | + public int getMessageCount() | |
108 | + { | |
109 | + return messages.size(); | |
110 | + } | |
111 | + | |
112 | + public Tuple<EnumTypeLog, String> getMessage(int index) | |
113 | + { | |
114 | + return messages.get(index); | |
115 | + } | |
116 | + | |
117 | + private ArrayList<Predicate<Tuple<EnumTypeLog, String>>> listeners = new ArrayList<>(); | |
118 | + | |
119 | + /** | |
120 | + * @param listener | |
121 | + * イベントハンドラを削除する場合にtrueを返す。 | |
122 | + */ | |
123 | + public void registerListener(Predicate<Tuple<EnumTypeLog, String>> listener) | |
124 | + { | |
125 | + listeners.add(listener); | |
126 | + } | |
127 | + | |
128 | + public static enum EnumTypeLog | |
129 | + { | |
130 | + FINE, | |
131 | + WARNING, | |
132 | + ERROR, | |
133 | + INFO, | |
134 | + } | |
135 | + | |
136 | + private static class OutputStreamLogger extends OutputStream | |
137 | + { | |
138 | + | |
139 | + private static final Charset charset = Charset.forName("UTF-8"); | |
140 | + | |
141 | + private Consumer<String> consumer; | |
142 | + | |
143 | + public OutputStreamLogger(Consumer<String> consumer) | |
144 | + { | |
145 | + this.consumer = consumer; | |
146 | + } | |
147 | + | |
148 | + private ArrayList<Byte> buffer = new ArrayList<>(); | |
149 | + private boolean afterR = false; | |
150 | + | |
151 | + @Override | |
152 | + public void write(int b) throws IOException | |
153 | + { | |
154 | + if (b == '\r') { | |
155 | + flush2(); | |
156 | + } else { | |
157 | + if (b == '\n') { | |
158 | + if (afterR) { | |
159 | + | |
160 | + } else { | |
161 | + flush2(); | |
162 | + } | |
163 | + } else { | |
164 | + buffer.add(Byte.valueOf((byte) b)); | |
165 | + } | |
166 | + } | |
167 | + | |
168 | + afterR = b == '\r'; | |
169 | + } | |
170 | + | |
171 | + private void flush2() | |
172 | + { | |
173 | + byte[] bytes = new byte[buffer.size()]; | |
174 | + for (int i = 0; i < buffer.size(); i++) { | |
175 | + bytes[i] = buffer.get(i); | |
176 | + } | |
177 | + | |
178 | + consumer.accept(new String(bytes, charset)); | |
179 | + buffer.clear(); | |
180 | + } | |
181 | + | |
182 | + } | |
183 | + | |
184 | +} |