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/AddFileModalPanel.java b/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.java new file mode 100644 index 0000000..342259e --- /dev/null +++ b/src/main/java/org/github/etcd/viewer/html/node/AddFileModalPanel.java @@ -0,0 +1,131 @@ +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.upload.FileUpload; +import org.apache.wicket.markup.html.form.upload.FileUploadField; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.StringResourceModel; +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 AddFileModalPanel extends GenericModalPanel { + + private static final long serialVersionUID = -2070660918144252605L; + private FileUploadField uploadField; + private IModel updating; + private IModel registry; + + @Inject + private EtcdProxyFactory proxyFactory; + + + private Form form; + private Label title; + +// public addFileModalPanel(String id) { +// this(id, new CompoundPropertyModel(makeModel())); +// } + + public AddFileModalPanel(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..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,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..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,6 +74,8 @@ public int compare(EtcdNode o1, EtcdNode o2) { private EditNodeModalPanel editNodeModal; private DeleteNodeModalPanel deleteNodeModal; + private AddFileModalPanel addFileModalPanel; + 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,29 @@ protected void onNodeDeleted(AjaxRequestTarget target) { EtcdNodePanel.this.onNodedDeleted(target); } }); + + add(addFileModalPanel = new AddFileModalPanel("addFile", + 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(contents, breadcrumbAndActions); + + EtcdNodePanel.this.onFileSaved(target); + } + }); } private void createNodeActions() { @@ -298,6 +326,28 @@ protected void onModalTriggerClick(AjaxRequestTarget target) { actionModel.setObject(getModelObject()); } }); + + breadcrumbAndActions.add(new TriggerModalLink("addFile", getModel(), + addFileModalPanel) { + 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..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 @@ -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; @@ -136,9 +137,14 @@ protected void onNodedDeleted(AjaxRequestTarget target) { @Override protected void onNodeKeyUpdated(AjaxRequestTarget target) { super.onNodeKeyUpdated(target); - NavigationPage.this.updatePageTitle(target); } + + @Override + protected void onFileSaved(AjaxRequestTarget target) { + super.onFileSaved(target); + target.add(feedback); + } }); }