Skip to content

Commit b51c301

Browse files
committed
feat: implement JournalAbbreviationRepositoryManager for efficient repository caching
- Add singleton repository manager with proper thread safety to cache repo - Fix issue where abbreviation operations would ignore disabled journal lists - Fix issue where toggling journal lists would update preferences when dialog is canceled - Update both abbreviation and unabbreviation to respect disabled sources - Apply double-checked locking pattern to ensure thread safety while preserving performance
1 parent d9437e2 commit b51c301

15 files changed

+1570
-27
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5+
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
6+
<title>Test results - AbbreviateActionTest</title>
7+
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
8+
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
9+
<script src="../js/report.js" type="text/javascript"></script>
10+
</head>
11+
<body>
12+
<div id="content">
13+
<h1>AbbreviateActionTest</h1>
14+
<div class="breadcrumbs">
15+
<a href="../index.html">all</a> &gt;
16+
<a href="../packages/org.jabref.gui.journals.html">org.jabref.gui.journals</a> &gt; AbbreviateActionTest</div>
17+
<div id="summary">
18+
<table>
19+
<tr>
20+
<td>
21+
<div class="summaryGroup">
22+
<table>
23+
<tr>
24+
<td>
25+
<div class="infoBox" id="tests">
26+
<div class="counter">3</div>
27+
<p>tests</p>
28+
</div>
29+
</td>
30+
<td>
31+
<div class="infoBox" id="failures">
32+
<div class="counter">0</div>
33+
<p>failures</p>
34+
</div>
35+
</td>
36+
<td>
37+
<div class="infoBox" id="ignored">
38+
<div class="counter">0</div>
39+
<p>ignored</p>
40+
</div>
41+
</td>
42+
<td>
43+
<div class="infoBox" id="duration">
44+
<div class="counter">1.677s</div>
45+
<p>duration</p>
46+
</div>
47+
</td>
48+
</tr>
49+
</table>
50+
</div>
51+
</td>
52+
<td>
53+
<div class="infoBox success" id="successRate">
54+
<div class="percent">100%</div>
55+
<p>successful</p>
56+
</div>
57+
</td>
58+
</tr>
59+
</table>
60+
</div>
61+
<div class="tab-container">
62+
<ul class="tabLinks">
63+
<li>
64+
<a href="#">Tests</a>
65+
</li>
66+
<li>
67+
<a href="#">Standard error</a>
68+
</li>
69+
</ul>
70+
<div class="tab">
71+
<h2>Tests</h2>
72+
<table>
73+
<thead>
74+
<tr>
75+
<th>Test</th>
76+
<th>Duration</th>
77+
<th>Result</th>
78+
</tr>
79+
</thead>
80+
<tr>
81+
<td class="success">checksIfAnyJournalSourcesAreEnabled()</td>
82+
<td class="success">1.631s</td>
83+
<td class="success">passed</td>
84+
</tr>
85+
<tr>
86+
<td class="success">unabbreviateWithAllSourcesDisabledShowsNotification()</td>
87+
<td class="success">0.003s</td>
88+
<td class="success">passed</td>
89+
</tr>
90+
<tr>
91+
<td class="success">unabbreviateWithOneSourceEnabledExecutesTask()</td>
92+
<td class="success">0.043s</td>
93+
<td class="success">passed</td>
94+
</tr>
95+
</table>
96+
</div>
97+
<div class="tab">
98+
<h2>Standard error</h2>
99+
<span class="code">
100+
<pre>Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
101+
WARNING: A Java agent has been loaded dynamically (/Users/zhuzikun/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.15.11/a38b16385e867f59a641330f0362ebe742788ed8/byte-buddy-agent-1.15.11.jar)
102+
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
103+
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
104+
WARNING: Dynamic loading of agents will be disallowed by default in a future release
105+
Messages are not initialized before accessing key: Copy to
106+
</pre>
107+
</span>
108+
</div>
109+
</div>
110+
<div id="footer">
111+
<p>
112+
<div>
113+
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
114+
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
115+
</label>
116+
</div>Generated by
117+
<a href="https://www.gradle.org">Gradle 8.13</a> at Apr 27, 2025, 4:39:15 AM</p>
118+
</div>
119+
</div>
120+
</body>
121+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5+
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
6+
<title>Test results - UndoableUnabbreviatorTest</title>
7+
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
8+
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
9+
<script src="../js/report.js" type="text/javascript"></script>
10+
</head>
11+
<body>
12+
<div id="content">
13+
<h1>UndoableUnabbreviatorTest</h1>
14+
<div class="breadcrumbs">
15+
<a href="../index.html">all</a> &gt;
16+
<a href="../packages/org.jabref.gui.journals.html">org.jabref.gui.journals</a> &gt; UndoableUnabbreviatorTest</div>
17+
<div id="summary">
18+
<table>
19+
<tr>
20+
<td>
21+
<div class="summaryGroup">
22+
<table>
23+
<tr>
24+
<td>
25+
<div class="infoBox" id="tests">
26+
<div class="counter">4</div>
27+
<p>tests</p>
28+
</div>
29+
</td>
30+
<td>
31+
<div class="infoBox" id="failures">
32+
<div class="counter">0</div>
33+
<p>failures</p>
34+
</div>
35+
</td>
36+
<td>
37+
<div class="infoBox" id="ignored">
38+
<div class="counter">0</div>
39+
<p>ignored</p>
40+
</div>
41+
</td>
42+
<td>
43+
<div class="infoBox" id="duration">
44+
<div class="counter">0.497s</div>
45+
<p>duration</p>
46+
</div>
47+
</td>
48+
</tr>
49+
</table>
50+
</div>
51+
</td>
52+
<td>
53+
<div class="infoBox success" id="successRate">
54+
<div class="percent">100%</div>
55+
<p>successful</p>
56+
</div>
57+
</td>
58+
</tr>
59+
</table>
60+
</div>
61+
<div class="tab-container">
62+
<ul class="tabLinks">
63+
<li>
64+
<a href="#">Tests</a>
65+
</li>
66+
</ul>
67+
<div class="tab">
68+
<h2>Tests</h2>
69+
<table>
70+
<thead>
71+
<tr>
72+
<th>Test</th>
73+
<th>Duration</th>
74+
<th>Result</th>
75+
</tr>
76+
</thead>
77+
<tr>
78+
<td class="success">unabbreviateWithBothSourcesDisabled()</td>
79+
<td class="success">0.003s</td>
80+
<td class="success">passed</td>
81+
</tr>
82+
<tr>
83+
<td class="success">unabbreviateWithBothSourcesEnabled()</td>
84+
<td class="success">0.002s</td>
85+
<td class="success">passed</td>
86+
</tr>
87+
<tr>
88+
<td class="success">unabbreviateWithOnlyBuiltInSourceEnabled()</td>
89+
<td class="success">0.490s</td>
90+
<td class="success">passed</td>
91+
</tr>
92+
<tr>
93+
<td class="success">unabbreviateWithOnlyCustomSourceEnabled()</td>
94+
<td class="success">0.002s</td>
95+
<td class="success">passed</td>
96+
</tr>
97+
</table>
98+
</div>
99+
</div>
100+
<div id="footer">
101+
<p>
102+
<div>
103+
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
104+
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
105+
</label>
106+
</div>Generated by
107+
<a href="https://www.gradle.org">Gradle 8.13</a> at Apr 27, 2025, 4:39:15 AM</p>
108+
</div>
109+
</div>
110+
</body>
111+
</html>

0 commit comments

Comments
 (0)