Skip to content

Commit 6b0622c

Browse files
authored
Lazy getting of settings layout from Artipie server (#113)
fix: lazy getting of layout setting
1 parent bca22fd commit 6b0622c

7 files changed

Lines changed: 60 additions & 62 deletions

File tree

src/main/java/com/artipie/front/Service.java

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -155,48 +155,24 @@ void start(final int port, final String rest) {
155155
}
156156
);
157157
final RepositoryService repository = new RepositoryService(rest);
158-
final Layout layout = new SettingsService(rest).layout();
158+
final SettingsService settings = new SettingsService(rest);
159159
this.ignite.path(
160160
"/repository", () -> {
161161
this.ignite.get(
162162
"/list",
163-
new RepoList(repository, layout),
163+
new RepoList(repository, settings),
164164
this.engine
165165
);
166-
this.ignite.get("/create", new RepoCreate(layout), this.engine);
167-
if (layout == Layout.FLAT) {
168-
this.ignite.get(
169-
"/edit/:repo",
170-
new RepoEdit(repository, layout, info),
171-
this.engine
172-
);
173-
this.ignite.post(
174-
"/update/:repo",
175-
new RepoSave(repository, layout),
176-
this.engine
177-
);
178-
this.ignite.post(
179-
"/remove/:repo",
180-
new RepoRemove(repository, layout),
181-
this.engine
182-
);
183-
} else {
184-
this.ignite.get(
185-
"/edit/:user/:repo",
186-
new RepoEdit(repository, layout, info),
187-
this.engine
188-
);
189-
this.ignite.post(
190-
"/update/:user/:repo",
191-
new RepoSave(repository, layout),
192-
this.engine
193-
);
194-
this.ignite.post(
195-
"/remove/:user/:repo",
196-
new RepoRemove(repository, layout),
197-
this.engine
198-
);
199-
}
166+
this.ignite.get("/create", new RepoCreate(settings), this.engine);
167+
final RepoEdit edit = new RepoEdit(repository, settings, info);
168+
this.ignite.get("/edit/:repo", edit, this.engine);
169+
this.ignite.get("/edit/:user/:repo", edit, this.engine);
170+
final RepoSave save = new RepoSave(repository, settings);
171+
this.ignite.post("/update/:repo", save, this.engine);
172+
this.ignite.post("/update/:user/:repo", save, this.engine);
173+
final RepoRemove remove = new RepoRemove(repository, settings);
174+
this.ignite.post("/remove/:repo", remove, this.engine);
175+
this.ignite.post("/remove/:user/:repo", remove, this.engine);
200176
}
201177
);
202178
}

src/main/java/com/artipie/front/rest/SettingsService.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.artipie.front.Layout;
88
import java.util.Optional;
9+
import java.util.concurrent.atomic.AtomicReference;
910
import javax.json.JsonObject;
1011

1112
/**
@@ -19,25 +20,36 @@ public class SettingsService extends BaseService {
1920
*/
2021
private static final String LAYOUT_PATH = "/api/v1/settings/layout";
2122

23+
/**
24+
* Layout.
25+
*/
26+
@SuppressWarnings("PMD.AvoidFieldNameMatchingMethodName")
27+
private final AtomicReference<Layout> layout;
28+
2229
/**
2330
* Ctor.
2431
* @param rest Artipie rest endpoint.
2532
*/
2633
public SettingsService(final String rest) {
2734
super(rest);
35+
this.layout = new AtomicReference<>();
2836
}
2937

3038
/**
3139
* Obtain Artipie layout.
3240
* @return Artipie layout
3341
*/
3442
public Layout layout() {
35-
return BaseService.handle(
36-
this.httpGet(Optional.empty(), SettingsService.LAYOUT_PATH),
37-
res -> {
38-
final JsonObject json = BaseService.jsonObject(res);
39-
return Layout.byName(json.getString("layout"));
40-
}
41-
);
43+
if (this.layout.get() == null) {
44+
final Layout value = BaseService.handle(
45+
this.httpGet(Optional.empty(), SettingsService.LAYOUT_PATH),
46+
res -> {
47+
final JsonObject json = BaseService.jsonObject(res);
48+
return Layout.byName(json.getString("layout"));
49+
}
50+
);
51+
this.layout.compareAndSet(null, value);
52+
}
53+
return this.layout.get();
4254
}
4355
}

src/main/java/com/artipie/front/ui/repository/RepoCreate.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*/
55
package com.artipie.front.ui.repository;
66

7-
import com.artipie.front.Layout;
87
import com.artipie.front.misc.RouteWrap;
8+
import com.artipie.front.rest.SettingsService;
99
import com.artipie.front.ui.HbPage;
1010
import java.util.Map;
1111

@@ -18,16 +18,16 @@
1818
public final class RepoCreate extends RouteWrap.TemplateViewRoute {
1919
/**
2020
* Add repository info page.
21-
* @param layout Repository layout
21+
* @param settings Settings service
2222
*/
23-
public RepoCreate(final Layout layout) {
23+
public RepoCreate(final SettingsService settings) {
2424
super(
2525
new HbPage(
2626
"repository/create",
2727
req -> Map.of(
2828
"title", "Create repository",
2929
"uid", req.session().attribute("uid"),
30-
"layout", layout
30+
"layout", settings.layout()
3131
)
3232
)
3333
);

src/main/java/com/artipie/front/ui/repository/RepoEdit.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
import com.amihaiemil.eoyaml.Yaml;
88
import com.amihaiemil.eoyaml.YamlMapping;
9-
import com.artipie.front.Layout;
109
import com.artipie.front.misc.RouteWrap;
1110
import com.artipie.front.rest.RepositoryName;
1211
import com.artipie.front.rest.RepositoryService;
12+
import com.artipie.front.rest.SettingsService;
1313
import com.artipie.front.ui.HbPage;
1414
import java.io.IOException;
1515
import java.util.Map;
@@ -27,16 +27,19 @@ public final class RepoEdit extends RouteWrap.TemplateViewRoute {
2727
* Repository editor page.
2828
*
2929
* @param repository Repository service.
30-
* @param layout Layout.
30+
* @param settings Settings service.
3131
* @param info Repository info templates.
3232
*/
33-
public RepoEdit(final RepositoryService repository, final Layout layout,
33+
public RepoEdit(final RepositoryService repository, final SettingsService settings,
3434
final RepositoryInfo info) {
3535
super(
3636
new HbPage(
3737
"repository/edit",
3838
req -> {
39-
final RepositoryName rname = new RepositoryName.FromRequest(req, layout);
39+
final RepositoryName rname = new RepositoryName.FromRequest(
40+
req,
41+
settings.layout()
42+
);
4043
final String repo = req.params(":repo");
4144
final String uid = req.session().attribute("uid");
4245
final String conf = repository.repo(

src/main/java/com/artipie/front/ui/repository/RepoList.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.artipie.front.Layout;
88
import com.artipie.front.misc.RouteWrap;
99
import com.artipie.front.rest.RepositoryService;
10+
import com.artipie.front.rest.SettingsService;
1011
import com.artipie.front.ui.HbPage;
1112
import java.util.List;
1213
import java.util.Map;
@@ -23,17 +24,17 @@ public final class RepoList extends RouteWrap.TemplateViewRoute {
2324
* List of repositories page.
2425
*
2526
* @param repository Repository service.
26-
* @param layout Layout.
27+
* @param settings Settings service.
2728
*/
28-
public RepoList(final RepositoryService repository, final Layout layout) {
29+
public RepoList(final RepositoryService repository, final SettingsService settings) {
2930
super(
3031
new HbPage(
3132
"repository/list",
3233
req -> {
3334
final String uid = req.session().attribute("uid");
3435
final String token = req.session().attribute("token");
3536
final List<String> repos;
36-
if (layout == Layout.FLAT) {
37+
if (settings.layout() == Layout.FLAT) {
3738
repos = repository.list(token);
3839
} else {
3940
repos = repository.list(token, uid);

src/main/java/com/artipie/front/ui/repository/RepoRemove.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
*/
55
package com.artipie.front.ui.repository;
66

7-
import com.artipie.front.Layout;
87
import com.artipie.front.misc.RouteWrap;
98
import com.artipie.front.rest.RepositoryName;
109
import com.artipie.front.rest.RepositoryService;
10+
import com.artipie.front.rest.SettingsService;
1111
import com.artipie.front.ui.HbPage;
1212
import java.util.Map;
1313

@@ -23,14 +23,17 @@ public final class RepoRemove extends RouteWrap.TemplateViewRoute {
2323
* Repository delete.
2424
*
2525
* @param repository Repository service.
26-
* @param layout Layout.
26+
* @param settings Settings service.
2727
*/
28-
public RepoRemove(final RepositoryService repository, final Layout layout) {
28+
public RepoRemove(final RepositoryService repository, final SettingsService settings) {
2929
super(
3030
new HbPage(
3131
"repository/result",
3232
req -> {
33-
final RepositoryName rname = new RepositoryName.FromRequest(req, layout);
33+
final RepositoryName rname = new RepositoryName.FromRequest(
34+
req,
35+
settings.layout()
36+
);
3437
return Map.of(
3538
"title", String.format("Repository %s", rname),
3639
"result", repository.remove(req.session().attribute("token"), rname),

src/main/java/com/artipie/front/ui/repository/RepoSave.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
*/
55
package com.artipie.front.ui.repository;
66

7-
import com.artipie.front.Layout;
87
import com.artipie.front.misc.RouteWrap;
98
import com.artipie.front.rest.RepositoryName;
109
import com.artipie.front.rest.RepositoryService;
10+
import com.artipie.front.rest.SettingsService;
1111
import com.artipie.front.ui.HbPage;
1212
import java.util.Map;
1313

@@ -23,14 +23,17 @@ public final class RepoSave extends RouteWrap.TemplateViewRoute {
2323
* List of repositories page.
2424
*
2525
* @param repository Repository service.
26-
* @param layout Layout.
26+
* @param settings Settings service.
2727
*/
28-
public RepoSave(final RepositoryService repository, final Layout layout) {
28+
public RepoSave(final RepositoryService repository, final SettingsService settings) {
2929
super(
3030
new HbPage(
3131
"repository/result",
3232
req -> {
33-
final RepositoryName rname = new RepositoryName.FromRequest(req, layout);
33+
final RepositoryName rname = new RepositoryName.FromRequest(
34+
req,
35+
settings.layout()
36+
);
3437
return Map.of(
3538
"title", String.format("Repository %s", rname),
3639
"result", repository.save(

0 commit comments

Comments
 (0)