diff --git a/src/main/java/com/knowledgepixels/nanodash/NanodashSession.java b/src/main/java/com/knowledgepixels/nanodash/NanodashSession.java index 5b5e0840..d27cded4 100644 --- a/src/main/java/com/knowledgepixels/nanodash/NanodashSession.java +++ b/src/main/java/com/knowledgepixels/nanodash/NanodashSession.java @@ -1,7 +1,6 @@ package com.knowledgepixels.nanodash; import com.knowledgepixels.nanodash.component.NanopubResults; -import com.knowledgepixels.nanodash.component.PublishForm; import com.knowledgepixels.nanodash.domain.User; import com.knowledgepixels.nanodash.page.OrcidLoginPage; import com.knowledgepixels.nanodash.page.ProfilePage; @@ -9,6 +8,7 @@ import jakarta.servlet.http.HttpSession; import jakarta.xml.bind.DatatypeConverter; import org.apache.commons.io.FileUtils; +import org.apache.wicket.PageReference; import org.apache.wicket.Session; import org.apache.wicket.protocol.http.WebSession; import org.apache.wicket.request.Request; @@ -28,8 +28,6 @@ import java.nio.charset.StandardCharsets; import java.security.KeyPair; import java.util.Date; -import java.util.Collections; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -86,59 +84,6 @@ public NanodashSession(Request request) { private Date lastTimeIntroPublished = null; - // We should store here some sort of form model and not the forms themselves, but I couldn't figure - // how to do it, so doing it like this for the moment... - private static final int MAX_FORMS = 20; - private final Map formMap = Collections.synchronizedMap(new LinkedHashMap<>(16, 0.75f, true) { - @Override - protected boolean removeEldestEntry(Map.Entry eldest) { - boolean evict = size() > MAX_FORMS; - if (evict) { - logger.info("Evicting form from session LRU (formobj={}, cap={})", eldest.getKey(), MAX_FORMS); - } - return evict; - } - }); - - /** - * Associates a form object with a specific ID. - * - * @param formObjId The ID of the form object. - * @param formObj The form object to associate. - */ - public void setForm(String formObjId, PublishForm formObj) { - formMap.put(formObjId, formObj); - } - - /** - * Checks if a form object with the given ID exists. - * - * @param formObjId The ID of the form object. - * @return True if the form object exists, false otherwise. - */ - public boolean hasForm(String formObjId) { - return formMap.containsKey(formObjId); - } - - /** - * Retrieves the form object associated with the given ID. - * - * @param formObjId The ID of the form object. - * @return The associated form object, or null if not found. - */ - public PublishForm getForm(String formObjId) { - return formMap.get(formObjId); - } - - /** - * Removes the form object associated with the given ID. - * - * @param formObjId The ID of the form object to remove. - */ - public void removeForm(String formObjId) { - formMap.remove(formObjId); - } - /** * Loads profile information for the user. * Initializes user-related data such as keys and introductions. @@ -499,18 +444,21 @@ public static class PreviewNanopub implements Serializable { private final PageParameters pageParams; private final Class confirmPageClass; private final boolean consentChecked; + private final PageReference sourcePageRef; - public PreviewNanopub(Nanopub nanopub, PageParameters pageParams, Class confirmPageClass, boolean consentChecked) { + public PreviewNanopub(Nanopub nanopub, PageParameters pageParams, Class confirmPageClass, boolean consentChecked, PageReference sourcePageRef) { this.nanopub = nanopub; this.pageParams = pageParams; this.confirmPageClass = confirmPageClass; this.consentChecked = consentChecked; + this.sourcePageRef = sourcePageRef; } public Nanopub getNanopub() { return nanopub; } public PageParameters getPageParams() { return pageParams; } public Class getConfirmPageClass() { return confirmPageClass; } public boolean isConsentChecked() { return consentChecked; } + public PageReference getSourcePageRef() { return sourcePageRef; } } private ConcurrentMap previewMap = new ConcurrentHashMap<>(); diff --git a/src/main/java/com/knowledgepixels/nanodash/component/PublishForm.java b/src/main/java/com/knowledgepixels/nanodash/component/PublishForm.java index 5a9dff40..d254cabf 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/PublishForm.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/PublishForm.java @@ -305,7 +305,7 @@ public PublishForm(String id, final PageParameters pageParams, Class("newversionlink", publishPageClass, params)); if ("latest".equals(pageParams.get("template-version").toString())) { throw new RestartResponseException(publishPageClass, params); @@ -775,7 +775,7 @@ public void onSubmit() { Nanopub signedNp = SignNanopub.signAndTransform(np, tc); String previewId = signedNp.getUri().stringValue(); NanodashSession.get().setPreviewNanopub(previewId, - new NanodashSession.PreviewNanopub(signedNp, pageParams, confirmPageClass, Boolean.TRUE.equals(consentCheck.getModelObject()))); + new NanodashSession.PreviewNanopub(signedNp, pageParams, confirmPageClass, Boolean.TRUE.equals(consentCheck.getModelObject()), getPage().getPageReference())); throw new RestartResponseException(PreviewPage.class, new PageParameters().set("id", previewId)); } catch (RestartResponseException ex) { throw ex; diff --git a/src/main/java/com/knowledgepixels/nanodash/connector/GenPublishPage.java b/src/main/java/com/knowledgepixels/nanodash/connector/GenPublishPage.java index 91aa5147..4ce08313 100644 --- a/src/main/java/com/knowledgepixels/nanodash/connector/GenPublishPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/connector/GenPublishPage.java @@ -1,10 +1,8 @@ package com.knowledgepixels.nanodash.connector; import com.knowledgepixels.nanodash.NanodashPageRef; -import com.knowledgepixels.nanodash.NanodashSession; import com.knowledgepixels.nanodash.component.PublishForm; import com.knowledgepixels.nanodash.component.TitleBar; -import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.basic.Label; @@ -13,18 +11,12 @@ import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.resource.PackageResourceReference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Random; /** * Page for publishing a nanopublication. */ public class GenPublishPage extends ConnectorPage { - private static final Logger logger = LoggerFactory.getLogger(GenPublishPage.class); - /** * Mount path for this page. */ @@ -47,7 +39,6 @@ public GenPublishPage(final PageParameters parameters) { super(parameters); add(new Label("pagetitle", getConfig().getJournalName() + ": Publish Nanopublication | nanodash")); - final NanodashSession session = NanodashSession.get(); PageParameters journalParam = new PageParameters().set("journal", getConnectorId()); add(new TitleBar("titlebar", this, "connectors", new NanodashPageRef(GenOverviewPage.class, journalParam, getConfig().getJournalName()), @@ -57,18 +48,8 @@ public GenPublishPage(final PageParameters parameters) { add(new Image("logo", new PackageResourceReference(getConfig().getClass(), getConfig().getLogoFileName()))); if (parameters.get("template").toString() != null) { - if (!parameters.contains("formobj")) { - throw new RestartResponseException(getClass(), parameters.set("formobj", Math.abs(new Random().nextLong()) + "")); - } parameters.set("template-version", "latest"); - String formObjId = parameters.get("formobj").toString(); - if (!session.hasForm(formObjId)) { - logger.warn("Form object not found in session (formobj={}, template={}); creating new form", - formObjId, parameters.get("template")); - PublishForm publishForm = new PublishForm("form", parameters, getClass(), GenConnectPage.class); - session.setForm(formObjId, publishForm); - } - add(session.getForm(formObjId)); + add(new PublishForm("form", parameters, getClass(), GenConnectPage.class)); } else { throw new RuntimeException("no template parameter"); } diff --git a/src/main/java/com/knowledgepixels/nanodash/page/PreviewPage.java b/src/main/java/com/knowledgepixels/nanodash/page/PreviewPage.java index 2c46c9ae..0724998e 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/PreviewPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/PreviewPage.java @@ -10,6 +10,8 @@ import com.knowledgepixels.nanodash.domain.IndividualAgent; import com.knowledgepixels.nanodash.repository.MaintainedResourceRepository; import com.knowledgepixels.nanodash.repository.SpaceRepository; +import org.apache.wicket.Page; +import org.apache.wicket.PageReference; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; @@ -72,10 +74,6 @@ protected void onSubmit() { logger.info("Nanopublication published from preview: {}", npUrl); Utils.cacheNanopub(signedNp); NanodashSession.get().removePreviewNanopub(previewId); - String formObjId = pageParams.get("formobj").toString(null); - if (formObjId != null) { - NanodashSession.get().removeForm(formObjId); - } if (!pageParams.get("refresh-upon-publish").isEmpty()) { String toRefresh = pageParams.get("refresh-upon-publish").toString(); @@ -138,7 +136,13 @@ public void validate(IValidatable validatable) { @Override public void onSubmit() { NanodashSession.get().removePreviewNanopub(previewId); - throw new RestartResponseException(PublishPage.class, new PageParameters(pageParams)); + PageReference ref = preview.getSourcePageRef(); + Page sourcePage = (ref != null) ? ref.getPage() : null; + if (sourcePage != null) { + setResponsePage(sourcePage); + } else { + throw new RestartResponseException(PublishPage.class, new PageParameters(pageParams)); + } } }; discardButton.setDefaultFormProcessing(false); diff --git a/src/main/java/com/knowledgepixels/nanodash/page/PublishPage.java b/src/main/java/com/knowledgepixels/nanodash/page/PublishPage.java index 9a150f88..aa81f5ee 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/PublishPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/PublishPage.java @@ -5,15 +5,10 @@ import com.knowledgepixels.nanodash.component.PublishForm; import com.knowledgepixels.nanodash.component.TemplateList; import com.knowledgepixels.nanodash.component.TitleBar; -import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.request.mapper.parameter.PageParameters; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Random; /** * The PublishPage class is responsible for rendering the application's publish page. @@ -21,8 +16,6 @@ */ public class PublishPage extends NanodashPage { - private static final Logger logger = LoggerFactory.getLogger(PublishPage.class); - /** * The mount path for the PublishPage. */ @@ -41,7 +34,7 @@ public String getMountPath() { /** * Constructs a new PublishPage with the given parameters. * - * @param parameters The parameters for the page, which may include template and form object identifiers. + * @param parameters The parameters for the page, which may include a template identifier. */ public PublishPage(final PageParameters parameters) { super(parameters); @@ -53,17 +46,7 @@ public PublishPage(final PageParameters parameters) { if (!parameters.get("sigkey").isNull() && !parameters.get("sigkey").toString().equals(session.getPubkeyString())) { add(new DifferentKeyErrorItem("form", parameters)); } else { - if (!parameters.contains("formobj")) { - throw new RestartResponseException(getClass(), parameters.set("formobj", Math.abs(new Random().nextLong()) + "")); - } - String formObjId = parameters.get("formobj").toString(); - if (!session.hasForm(formObjId)) { - logger.warn("Form object not found in session (formobj={}, template={}); creating new form", - formObjId, parameters.get("template")); - PublishForm publishForm = new PublishForm("form", parameters, getClass(), ExplorePage.class); - session.setForm(formObjId, publishForm); - } - add(session.getForm(formObjId)); + add(new PublishForm("form", parameters, getClass(), ExplorePage.class)); } add(new Label("templatelist").setVisible(false)); } else {