From 59958f54831a8f34563acf13c74155ffc0888b85 Mon Sep 17 00:00:00 2001 From: "abhi0710@gmail.com" Date: Tue, 18 Sep 2018 14:28:29 +0530 Subject: [PATCH 1/3] Added support for add entries in a directore node from properties file. --- .../html/node/AddPropertyFileModalPanel.html | 29 ++++ .../html/node/AddPropertyFileModalPanel.java | 135 ++++++++++++++++++ .../etcd/viewer/html/node/EtcdNodePanel.html | 2 + .../etcd/viewer/html/node/EtcdNodePanel.java | 54 +++++++ .../viewer/html/pages/NavigationPage.java | 7 + 5 files changed, 227 insertions(+) create mode 100644 src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html create mode 100644 src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java diff --git a/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html b/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html new file mode 100644 index 0000000..807f55f --- /dev/null +++ b/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html @@ -0,0 +1,29 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java b/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java new file mode 100644 index 0000000..83309b0 --- /dev/null +++ b/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java @@ -0,0 +1,135 @@ +package org.github.etcd.viewer.html.node; + +import com.fasterxml.jackson.databind.annotation.JsonAppend.Prop; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import javax.inject.Inject; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.form.upload.FileUpload; +import org.apache.wicket.markup.html.form.upload.FileUploadField; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.StringResourceModel; +import org.apache.wicket.util.value.ValueMap; +import org.github.etcd.service.EtcdProxyFactory; +import org.github.etcd.service.api.EtcdException; +import org.github.etcd.service.api.EtcdNode; +import org.github.etcd.service.api.EtcdProxy; +import org.github.etcd.viewer.html.modal.GenericModalPanel; + +public class AddPropertyFileModalPanel extends GenericModalPanel { + + private static final long serialVersionUID = -2070660918144252605L; + private FileUploadField uploadField; + private IModel updating; + private IModel registry; + + @Inject + private EtcdProxyFactory proxyFactory; + + + Form form; + Label title; + +// public AddPropertyFileModalPanel(String id) { +// this(id, new CompoundPropertyModel(makeModel())); +// } + + public AddPropertyFileModalPanel(String id, IModel model, + IModel registry, IModel updating) { + super(id, null); + + this.updating = updating; + this.registry = registry; + + add(title = new Label("title", + new StringResourceModel("editModal.title.updating.${}", updating, "Upload from Properties file"))); + title.setOutputMarkupId(true); + + form = new Form("form"); + + form.add(new AjaxFormSubmitBehavior("onSubmit") { + @Override + protected void onSubmit(AjaxRequestTarget target) { + } + }); + + AjaxButton ab = new AjaxButton("submit") { + protected void onSubmit(AjaxRequestTarget target, Form form) { + + super.onSubmit(target, form); +// final ValueMap map = getModelObject(); + // to show when model is updated +// map.put("textSeen", map.get("text")); +// map.put("submitSeen", "true"); + final FileUpload upload = uploadField.getFileUpload(); +// map.put("haveUpload", upload != null); + if (upload != null) { + + String fileName = upload.getClientFileName(); + if (fileName.endsWith(".properties")) { + + Properties properties = new Properties(); + try (EtcdProxy p = proxyFactory.getEtcdProxy(registry.getObject())) { + properties.load(upload.getInputStream()); + + List entries = new ArrayList<>(); + + properties.forEach((key, value) -> { + + p.saveNode( + new EtcdNode((String) model.getObject().getKey() + "/" + key, + (String) value)); + }); + + success("Added keys: " + properties); + + } catch (EtcdException e) { + System.err.println("Caught error: " + e); + error(e.toString()); + error(" - API error: " + e.getApiError()); + error(" - " + e.getCause()); + } catch (Exception e) { + System.err.println("Caught error: " + e); + error(e.toString()); + error("error: " + e.getMessage()); + error(" - " + e.getCause()); + } + } + } + + onFileSaved(target); + + modalHide(target); + } + }; + + form.add(ab); + add(form); + + uploadField = new FileUploadField("file"); + form.add(uploadField); + form.setMultiPart(true); + } + + @Override + public void beforeModalShow(AjaxRequestTarget target) { + target.add(title, form); + + form.clearInput(); + } + + protected void onFileSaved(AjaxRequestTarget properties) { + } +} diff --git a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html index 3802942..1168e44 100644 --- a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html +++ b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html @@ -122,6 +122,7 @@

+ @@ -207,6 +208,7 @@

+
diff --git a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java index f947bc9..d08aa10 100644 --- a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java +++ b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java @@ -74,6 +74,8 @@ public int compare(EtcdNode o1, EtcdNode o2) { private EditNodeModalPanel editNodeModal; private DeleteNodeModalPanel deleteNodeModal; + private AddPropertyFileModalPanel addPropertyFileModalPanel; + private WebMarkupContainer breadcrumbAndActions; private WebMarkupContainer contents; @@ -195,6 +197,9 @@ protected void onNodeKeyUpdated(AjaxRequestTarget target) { protected void onNodedSaved(AjaxRequestTarget target) { } + protected void onFileSaved(AjaxRequestTarget target) { + } + protected void onNodedDeleted(AjaxRequestTarget target) { } @@ -233,6 +238,33 @@ protected void onNodeDeleted(AjaxRequestTarget target) { EtcdNodePanel.this.onNodedDeleted(target); } }); + + add(addPropertyFileModalPanel = new AddPropertyFileModalPanel("addPropertyFile", + actionModel, + registry, updating) { + private static final long serialVersionUID = 1L; + + @Override + protected void onFileSaved(AjaxRequestTarget target) { + + super.onFileSaved(target); + + PageParameters params = ConvertUtils.getPageParameters(key.getObject()); + params.add("cluster", registry.getObject()); + + setResponsePage(NavigationPage.class, params); + + key.setObject(key.getObject()); + +// target.add(EtcdNodePanel.this); + + onNodeKeyUpdated(target); + + target.add(contents, breadcrumbAndActions); + + EtcdNodePanel.this.onFileSaved(target); + } + }); } private void createNodeActions() { @@ -298,6 +330,28 @@ protected void onModalTriggerClick(AjaxRequestTarget target) { actionModel.setObject(getModelObject()); } }); + + breadcrumbAndActions.add(new TriggerModalLink("addPropertyFile", getModel(), + addPropertyFileModalPanel) { + private static final long serialVersionUID = 1L; + + @Override + protected void onConfigure() { + super.onConfigure(); + if (EtcdNodePanel.this.getModelObject() != null && EtcdNodePanel.this + .getModelObject().isDir()) { + add(AttributeModifier.remove("disabled")); + } else { + add(AttributeAppender.append("disabled", "disabled")); + } + } + + @Override + protected void onModalTriggerClick(AjaxRequestTarget target) { + updating.setObject(false); + actionModel.setObject(getModelObject()); + } + }); } private void createBreadcrumb() { diff --git a/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java b/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java index 8320c79..9df2bab 100644 --- a/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java +++ b/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java @@ -3,6 +3,7 @@ */ package org.github.etcd.viewer.html.pages; +import java.util.Properties; import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.feedback.FeedbackMessage; @@ -139,6 +140,12 @@ protected void onNodeKeyUpdated(AjaxRequestTarget target) { NavigationPage.this.updatePageTitle(target); } + + @Override + protected void onFileSaved(AjaxRequestTarget target) { + super.onFileSaved(target); + target.add(feedback); + } }); } From 76ad29491a12f153e22b7009bd9208b1be0dec8c Mon Sep 17 00:00:00 2001 From: "abhi0710@gmail.com" Date: Tue, 18 Sep 2018 14:53:05 +0530 Subject: [PATCH 2/3] fixed feedback messages on properties upload. --- .../etcd/viewer/html/node/EtcdNodePanel.java | 18 +++++++----------- .../etcd/viewer/html/pages/NavigationPage.java | 1 - 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java index d08aa10..aa68d41 100644 --- a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java +++ b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java @@ -248,17 +248,13 @@ protected void onNodeDeleted(AjaxRequestTarget target) { protected void onFileSaved(AjaxRequestTarget target) { super.onFileSaved(target); - - PageParameters params = ConvertUtils.getPageParameters(key.getObject()); - params.add("cluster", registry.getObject()); - - setResponsePage(NavigationPage.class, params); - - key.setObject(key.getObject()); - -// target.add(EtcdNodePanel.this); - - onNodeKeyUpdated(target); +// +// PageParameters params = ConvertUtils.getPageParameters(key.getObject()); +// params.add("cluster", registry.getObject()); +// +// setResponsePage(NavigationPage.class, params); +// +// key.setObject(key.getObject()); target.add(contents, breadcrumbAndActions); diff --git a/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java b/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java index 9df2bab..bd1ecd9 100644 --- a/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java +++ b/src/main/java/org/github/etcd/viewer/html/pages/NavigationPage.java @@ -137,7 +137,6 @@ protected void onNodedDeleted(AjaxRequestTarget target) { @Override protected void onNodeKeyUpdated(AjaxRequestTarget target) { super.onNodeKeyUpdated(target); - NavigationPage.this.updatePageTitle(target); } From 13f5a6f21e6ce828dd536c73f71c0059b5b196d4 Mon Sep 17 00:00:00 2001 From: "abhi0710@gmail.com" Date: Tue, 18 Sep 2018 15:33:26 +0530 Subject: [PATCH 3/3] cleanup --- .../viewer/html/node/AddFileModalPanel.html | 31 +++++++++++++++++++ ...ModalPanel.java => AddFileModalPanel.java} | 16 ++++------ .../html/node/AddPropertyFileModalPanel.html | 29 ----------------- .../etcd/viewer/html/node/EtcdNodePanel.html | 4 +-- .../etcd/viewer/html/node/EtcdNodePanel.java | 8 ++--- 5 files changed, 43 insertions(+), 45 deletions(-) create mode 100644 src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.html rename src/main/java/org/github/etcd/viewer/html/node/{AddPropertyFileModalPanel.java => AddFileModalPanel.java} (89%) delete mode 100644 src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html diff --git a/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.html b/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.html new file mode 100644 index 0000000..c605481 --- /dev/null +++ b/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.html @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java b/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.java similarity index 89% rename from src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java rename to src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.java index 83309b0..342259e 100644 --- a/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.java +++ b/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.java @@ -14,21 +14,17 @@ import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.form.upload.FileUpload; import org.apache.wicket.markup.html.form.upload.FileUploadField; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; -import org.apache.wicket.util.value.ValueMap; import org.github.etcd.service.EtcdProxyFactory; import org.github.etcd.service.api.EtcdException; import org.github.etcd.service.api.EtcdNode; import org.github.etcd.service.api.EtcdProxy; import org.github.etcd.viewer.html.modal.GenericModalPanel; -public class AddPropertyFileModalPanel extends GenericModalPanel { +public class AddFileModalPanel extends GenericModalPanel { private static final long serialVersionUID = -2070660918144252605L; private FileUploadField uploadField; @@ -39,15 +35,15 @@ public class AddPropertyFileModalPanel extends GenericModalPanel { private EtcdProxyFactory proxyFactory; - Form form; - Label title; + private Form form; + private Label title; -// public AddPropertyFileModalPanel(String id) { +// public addFileModalPanel(String id) { // this(id, new CompoundPropertyModel(makeModel())); // } - public AddPropertyFileModalPanel(String id, IModel model, - IModel registry, IModel updating) { + public AddFileModalPanel(String id, IModel model, + IModel registry, IModel updating) { super(id, null); this.updating = updating; diff --git a/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html b/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html deleted file mode 100644 index 807f55f..0000000 --- a/src/main/java/org/github/etcd/viewer/html/node/AddPropertyFileModalPanel.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html index 1168e44..56b1d85 100644 --- a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html +++ b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.html @@ -122,7 +122,7 @@

- + @@ -208,7 +208,7 @@

-
+
diff --git a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java index aa68d41..fc31a08 100644 --- a/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java +++ b/src/main/java/org/github/etcd/viewer/html/node/EtcdNodePanel.java @@ -74,7 +74,7 @@ public int compare(EtcdNode o1, EtcdNode o2) { private EditNodeModalPanel editNodeModal; private DeleteNodeModalPanel deleteNodeModal; - private AddPropertyFileModalPanel addPropertyFileModalPanel; + private AddFileModalPanel addFileModalPanel; private WebMarkupContainer breadcrumbAndActions; @@ -239,7 +239,7 @@ protected void onNodeDeleted(AjaxRequestTarget target) { } }); - add(addPropertyFileModalPanel = new AddPropertyFileModalPanel("addPropertyFile", + add(addFileModalPanel = new AddFileModalPanel("addFile", actionModel, registry, updating) { private static final long serialVersionUID = 1L; @@ -327,8 +327,8 @@ protected void onModalTriggerClick(AjaxRequestTarget target) { } }); - breadcrumbAndActions.add(new TriggerModalLink("addPropertyFile", getModel(), - addPropertyFileModalPanel) { + breadcrumbAndActions.add(new TriggerModalLink("addFile", getModel(), + addFileModalPanel) { private static final long serialVersionUID = 1L; @Override