Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommitsAndMountPointsParser.java @ 999:1b1cc811e1b6 Jaipur-2018.1.x
Jaipur-2018.1.x branch created
author | pavel.sher |
---|---|
date | Thu, 21 Jun 2018 17:37:32 +0200 |
parents | 7bf4d943d5bb |
children | 10dc26b32c35 |
rev | line source |
---|---|
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
1 /* |
976 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
3 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
6 * You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
7 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
9 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
13 * See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
14 * limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
15 */ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
16 |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
18 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
19 import jetbrains.buildServer.util.FileUtil; |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
20 import org.apache.commons.codec.binary.Base64; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
21 import org.jetbrains.annotations.NotNull; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
22 import org.jetbrains.annotations.Nullable; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
23 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
24 import java.io.*; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
25 import java.text.ParseException; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
26 import java.text.SimpleDateFormat; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
27 import java.util.*; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
28 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
29 /** |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
30 * Created 09.01.14 17:10 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
31 * |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
32 * @author Eugene Petrenko (eugene.petrenko@jetbrains.com) |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
33 */ |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
34 public class CommitsAndMountPointsParser { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
35 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
36 public static void parseFileLog(@NotNull final File dump, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
37 @NotNull final ContentsConsumer consumer) throws IOException { |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
38 final BufferedReader st = new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(dump)), "utf-8")); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
39 try { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
40 final Decoder fileDecoder = new Decoder(5); |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
41 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
42 String line; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
43 while((line = st.readLine()) != null) { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
44 if (!line.startsWith("$$@@@@ ")) continue; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
45 final String[] items = line.split(" "); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
46 if (items.length != 1 + 2) continue; |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
47 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
48 final String commitId = items[1]; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
49 final String content = fileDecoder.decode(items[2]); |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
50 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
51 consumer.onCommit(commitId, content == null ? "" : content); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
52 } |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
53 } finally { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
54 FileUtil.close(st); |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
55 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
56 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
57 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
58 public interface ContentsConsumer { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
59 void onCommit( |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
60 @NotNull String fileNodeId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
61 @NotNull String content); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
62 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
63 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
64 public interface CommitsConsumer { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
65 void onCommit( |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
66 @NotNull String commitNum, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
67 @NotNull String commitId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
68 @NotNull String[] parents, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
69 @NotNull String branch, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
70 @NotNull String[] tags, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
71 @NotNull String author, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
72 @NotNull String message, |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
73 @NotNull Date timestamp, |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
74 @Nullable String hgsubNodeId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
75 @Nullable String hgsubstateNodeId); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
76 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
77 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
78 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
79 public static void parseCommits(@NotNull final File dump, @NotNull final CommitsConsumer consumer) throws IOException { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
80 final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'Z'HH:mm:ss'T'Z", Locale.ENGLISH); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
81 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
82 final Decoder branchDecoder = new Decoder(250); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
83 final Decoder tagsDecoder = new Decoder(250); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
84 final Decoder authorDecoder = new Decoder(200); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
85 final Decoder messageDecoder = new Decoder(210); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
86 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
87 final BufferedReader st = new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(dump)), "utf-8")); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
88 try { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
89 String line; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
90 while((line = st.readLine()) != null) { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
91 if (!line.startsWith("$$@@@@ ")) continue; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
92 final Iterator<String> items = Arrays.asList(line.split(" ")).iterator(); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
93 items.next(); //$$@@@@ |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
94 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
95 try { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
96 final String commitNum = items.next(); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
97 final String commitId = items.next(); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
98 final String[] parents = new String[Integer.parseInt(items.next())]; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
99 for (int i = 0; i < parents.length; i++) { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
100 parents[i] = items.next(); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
101 } |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
102 final String branch = branchDecoder.decode(items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
103 final String[] tags = new String[Integer.parseInt(items.next())]; |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
104 for (int i = 0; i < tags.length; i++) { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
105 tags[i] = tagsDecoder.decode(items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
106 } |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
107 |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
108 final String author = authorDecoder.decode(items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
109 final String message = messageDecoder.decode(items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
110 final Date time = parseTime(dateFormat, items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
111 final String hgsub = textOrNull(items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
112 final String hgsubstate = textOrNull(items.next()); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
113 |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
114 consumer.onCommit( |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
115 commitNum, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
116 commitId, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
117 parents, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
118 branch, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
119 tags, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
120 author == null ? "" : author, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
121 message == null ? "" : message, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
122 time, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
123 hgsub, |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
124 hgsubstate); |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
125 } catch (NoSuchElementException e) { |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
126 //NOP |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
127 } |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
128 } |
741
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
129 } finally{ |
fba173530aa6
close openned files. fix temp polution
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
130 FileUtil.close(st); |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
131 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
132 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
133 |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
134 @NotNull |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
135 private static Date parseTime(@NotNull final SimpleDateFormat dateFormat, |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
136 @NotNull final String time) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
137 try { |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
138 return dateFormat.parse(time); |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
139 } catch (ParseException e) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
140 throw new RuntimeException("Failed to parse datetime: " + time + ". " + e, e); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
141 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
142 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
143 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
144 @Nullable |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
145 private static String textOrNull(@NotNull final String text) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
146 if (text.equals("=====")) return null; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
147 return text; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
148 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
149 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
150 private static class Decoder { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
151 private final Map<String, String> myCache; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
152 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
153 public Decoder(final int SZ) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
154 myCache = new LinkedHashMap<String, String>(SZ, 0.9f) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
155 @Override |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
156 protected boolean removeEldestEntry(Map.Entry<String, String> eldest) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
157 return size() > SZ; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
158 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
159 }; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
160 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
161 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
162 public String decode(@NotNull final String base64) throws UnsupportedEncodingException { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
163 if (textOrNull(base64) == null) return null; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
164 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
165 final String result = myCache.get(base64); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
166 if (result != null) return result; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
167 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
168 final String value = new String(Base64.decodeBase64(base64), "utf-8"); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
169 //noinspection RedundantStringConstructorCall |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
170 myCache.put(new String(base64), value); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
171 return value; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
172 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
173 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
174 } |