Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lazy getting of settings layout from Artipie server #113

Merged
merged 1 commit into from
Nov 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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