Skip to content

Commit

Permalink
Lazy getting of settings layout from Artipie server (#113)
Browse files Browse the repository at this point in the history
fix: lazy getting of layout setting
  • Loading branch information
andpopov committed Nov 8, 2022
1 parent bca22fd commit 6b0622c
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 62 deletions.
48 changes: 12 additions & 36 deletions src/main/java/com/artipie/front/Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -155,48 +155,24 @@ void start(final int port, final String rest) {
}
);
final RepositoryService repository = new RepositoryService(rest);
final Layout layout = new SettingsService(rest).layout();
final SettingsService settings = new SettingsService(rest);
this.ignite.path(
"/repository", () -> {
this.ignite.get(
"/list",
new RepoList(repository, layout),
new RepoList(repository, settings),
this.engine
);
this.ignite.get("/create", new RepoCreate(layout), this.engine);
if (layout == Layout.FLAT) {
this.ignite.get(
"/edit/:repo",
new RepoEdit(repository, layout, info),
this.engine
);
this.ignite.post(
"/update/:repo",
new RepoSave(repository, layout),
this.engine
);
this.ignite.post(
"/remove/:repo",
new RepoRemove(repository, layout),
this.engine
);
} else {
this.ignite.get(
"/edit/:user/:repo",
new RepoEdit(repository, layout, info),
this.engine
);
this.ignite.post(
"/update/:user/:repo",
new RepoSave(repository, layout),
this.engine
);
this.ignite.post(
"/remove/:user/:repo",
new RepoRemove(repository, layout),
this.engine
);
}
this.ignite.get("/create", new RepoCreate(settings), this.engine);
final RepoEdit edit = new RepoEdit(repository, settings, info);
this.ignite.get("/edit/:repo", edit, this.engine);
this.ignite.get("/edit/:user/:repo", edit, this.engine);
final RepoSave save = new RepoSave(repository, settings);
this.ignite.post("/update/:repo", save, this.engine);
this.ignite.post("/update/:user/:repo", save, this.engine);
final RepoRemove remove = new RepoRemove(repository, settings);
this.ignite.post("/remove/:repo", remove, this.engine);
this.ignite.post("/remove/:user/:repo", remove, this.engine);
}
);
}
Expand Down
26 changes: 19 additions & 7 deletions src/main/java/com/artipie/front/rest/SettingsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import com.artipie.front.Layout;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import javax.json.JsonObject;

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

/**
* Layout.
*/
@SuppressWarnings("PMD.AvoidFieldNameMatchingMethodName")
private final AtomicReference<Layout> layout;

/**
* Ctor.
* @param rest Artipie rest endpoint.
*/
public SettingsService(final String rest) {
super(rest);
this.layout = new AtomicReference<>();
}

/**
* Obtain Artipie layout.
* @return Artipie layout
*/
public Layout layout() {
return BaseService.handle(
this.httpGet(Optional.empty(), SettingsService.LAYOUT_PATH),
res -> {
final JsonObject json = BaseService.jsonObject(res);
return Layout.byName(json.getString("layout"));
}
);
if (this.layout.get() == null) {
final Layout value = BaseService.handle(
this.httpGet(Optional.empty(), SettingsService.LAYOUT_PATH),
res -> {
final JsonObject json = BaseService.jsonObject(res);
return Layout.byName(json.getString("layout"));
}
);
this.layout.compareAndSet(null, value);
}
return this.layout.get();
}
}
8 changes: 4 additions & 4 deletions src/main/java/com/artipie/front/ui/repository/RepoCreate.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
*/
package com.artipie.front.ui.repository;

import com.artipie.front.Layout;
import com.artipie.front.misc.RouteWrap;
import com.artipie.front.rest.SettingsService;
import com.artipie.front.ui.HbPage;
import java.util.Map;

Expand All @@ -18,16 +18,16 @@
public final class RepoCreate extends RouteWrap.TemplateViewRoute {
/**
* Add repository info page.
* @param layout Repository layout
* @param settings Settings service
*/
public RepoCreate(final Layout layout) {
public RepoCreate(final SettingsService settings) {
super(
new HbPage(
"repository/create",
req -> Map.of(
"title", "Create repository",
"uid", req.session().attribute("uid"),
"layout", layout
"layout", settings.layout()
)
)
);
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/com/artipie/front/ui/repository/RepoEdit.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

import com.amihaiemil.eoyaml.Yaml;
import com.amihaiemil.eoyaml.YamlMapping;
import com.artipie.front.Layout;
import com.artipie.front.misc.RouteWrap;
import com.artipie.front.rest.RepositoryName;
import com.artipie.front.rest.RepositoryService;
import com.artipie.front.rest.SettingsService;
import com.artipie.front.ui.HbPage;
import java.io.IOException;
import java.util.Map;
Expand All @@ -27,16 +27,19 @@ public final class RepoEdit extends RouteWrap.TemplateViewRoute {
* Repository editor page.
*
* @param repository Repository service.
* @param layout Layout.
* @param settings Settings service.
* @param info Repository info templates.
*/
public RepoEdit(final RepositoryService repository, final Layout layout,
public RepoEdit(final RepositoryService repository, final SettingsService settings,
final RepositoryInfo info) {
super(
new HbPage(
"repository/edit",
req -> {
final RepositoryName rname = new RepositoryName.FromRequest(req, layout);
final RepositoryName rname = new RepositoryName.FromRequest(
req,
settings.layout()
);
final String repo = req.params(":repo");
final String uid = req.session().attribute("uid");
final String conf = repository.repo(
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/artipie/front/ui/repository/RepoList.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.artipie.front.Layout;
import com.artipie.front.misc.RouteWrap;
import com.artipie.front.rest.RepositoryService;
import com.artipie.front.rest.SettingsService;
import com.artipie.front.ui.HbPage;
import java.util.List;
import java.util.Map;
Expand All @@ -23,17 +24,17 @@ public final class RepoList extends RouteWrap.TemplateViewRoute {
* List of repositories page.
*
* @param repository Repository service.
* @param layout Layout.
* @param settings Settings service.
*/
public RepoList(final RepositoryService repository, final Layout layout) {
public RepoList(final RepositoryService repository, final SettingsService settings) {
super(
new HbPage(
"repository/list",
req -> {
final String uid = req.session().attribute("uid");
final String token = req.session().attribute("token");
final List<String> repos;
if (layout == Layout.FLAT) {
if (settings.layout() == Layout.FLAT) {
repos = repository.list(token);
} else {
repos = repository.list(token, uid);
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/com/artipie/front/ui/repository/RepoRemove.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
*/
package com.artipie.front.ui.repository;

import com.artipie.front.Layout;
import com.artipie.front.misc.RouteWrap;
import com.artipie.front.rest.RepositoryName;
import com.artipie.front.rest.RepositoryService;
import com.artipie.front.rest.SettingsService;
import com.artipie.front.ui.HbPage;
import java.util.Map;

Expand All @@ -23,14 +23,17 @@ public final class RepoRemove extends RouteWrap.TemplateViewRoute {
* Repository delete.
*
* @param repository Repository service.
* @param layout Layout.
* @param settings Settings service.
*/
public RepoRemove(final RepositoryService repository, final Layout layout) {
public RepoRemove(final RepositoryService repository, final SettingsService settings) {
super(
new HbPage(
"repository/result",
req -> {
final RepositoryName rname = new RepositoryName.FromRequest(req, layout);
final RepositoryName rname = new RepositoryName.FromRequest(
req,
settings.layout()
);
return Map.of(
"title", String.format("Repository %s", rname),
"result", repository.remove(req.session().attribute("token"), rname),
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/com/artipie/front/ui/repository/RepoSave.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
*/
package com.artipie.front.ui.repository;

import com.artipie.front.Layout;
import com.artipie.front.misc.RouteWrap;
import com.artipie.front.rest.RepositoryName;
import com.artipie.front.rest.RepositoryService;
import com.artipie.front.rest.SettingsService;
import com.artipie.front.ui.HbPage;
import java.util.Map;

Expand All @@ -23,14 +23,17 @@ public final class RepoSave extends RouteWrap.TemplateViewRoute {
* List of repositories page.
*
* @param repository Repository service.
* @param layout Layout.
* @param settings Settings service.
*/
public RepoSave(final RepositoryService repository, final Layout layout) {
public RepoSave(final RepositoryService repository, final SettingsService settings) {
super(
new HbPage(
"repository/result",
req -> {
final RepositoryName rname = new RepositoryName.FromRequest(req, layout);
final RepositoryName rname = new RepositoryName.FromRequest(
req,
settings.layout()
);
return Map.of(
"title", String.format("Repository %s", rname),
"result", repository.save(
Expand Down

0 comments on commit 6b0622c

Please sign in to comment.