From ac133cf619f04834c575b1f289bd4989873a9f4f Mon Sep 17 00:00:00 2001 From: car031 Date: Wed, 7 Jun 2023 15:38:32 +0200 Subject: [PATCH] #1193 Environment panel inside the administration --- .../gui/common/client/data/EnvironmentDS.java | 23 ++++++ .../client/system/EnvironmentPanel.java | 70 +++++++++++++++++++ .../web/data/EnvironmentDataServlet.java | 65 +++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EnvironmentDS.java create mode 100644 logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/system/EnvironmentPanel.java create mode 100644 logicaldoc-webapp/src/main/java/com/logicaldoc/web/data/EnvironmentDataServlet.java diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EnvironmentDS.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EnvironmentDS.java new file mode 100644 index 000000000..696b352a7 --- /dev/null +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/common/client/data/EnvironmentDS.java @@ -0,0 +1,23 @@ +package com.logicaldoc.gui.common.client.data; + +import com.smartgwt.client.data.DataSource; +import com.smartgwt.client.data.fields.DataSourceTextField; + +/** + * Datasource get the environment variables + * + * @author Marco Meschieri - LogicalDOC + * @since 8.8.4 + */ +public class EnvironmentDS extends DataSource { + public EnvironmentDS() { + setRecordXPath("/list/entry"); + DataSourceTextField name = new DataSourceTextField("name"); + DataSourceTextField scope = new DataSourceTextField("scope"); + DataSourceTextField value = new DataSourceTextField("value"); + + setFields(name, value, scope); + setClientOnly(true); + setDataURL("data/environment.xml"); + } +} \ No newline at end of file diff --git a/logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/system/EnvironmentPanel.java b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/system/EnvironmentPanel.java new file mode 100644 index 000000000..1f8ddb66c --- /dev/null +++ b/logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/system/EnvironmentPanel.java @@ -0,0 +1,70 @@ +package com.logicaldoc.gui.frontend.client.system; + +import com.logicaldoc.gui.common.client.data.EnvironmentDS; +import com.logicaldoc.gui.common.client.i18n.I18N; +import com.logicaldoc.gui.common.client.util.LD; +import com.logicaldoc.gui.common.client.widgets.grid.RefreshableListGrid; +import com.smartgwt.client.types.SelectionStyle; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.layout.VLayout; + +/** + * This panel shows the list of environment variables + * + * @author Marco Meschieri - LogicalDOC + * @since 8.8.5 + */ +public class EnvironmentPanel extends VLayout { + + private static final String VALUE = "value"; + + private static final String SCOPE = "scope"; + + private RefreshableListGrid grid; + + public EnvironmentPanel() { + setWidth100(); + setHeight100(); + } + + @Override + public void onDraw() { + ListGridField name = new ListGridField("name", I18N.message("setting"), 210); + name.setCanFilter(true); + name.setCanSort(true); + + ListGridField value = new ListGridField(VALUE, I18N.message(VALUE), 280); + value.setCanFilter(true); + value.setCanSort(true); + + ListGridField scope = new ListGridField(SCOPE, I18N.message(SCOPE), 80); + scope.setCanFilter(true); + scope.setCanSort(true); + + grid = new RefreshableListGrid(); + grid.setWidth100(); + grid.setHeight100(); + grid.setEmptyMessage(I18N.message("notitemstoshow")); + grid.setCanExpandRecords(false); + grid.setShowRecordComponents(true); + grid.setShowRecordComponentsByCell(true); + grid.setCanFreezeFields(true); + grid.setAutoFetchData(true); + grid.setSelectionType(SelectionStyle.MULTIPLE); + grid.setFilterOnKeypress(true); + grid.setShowFilterEditor(true); + grid.setDataSource(new EnvironmentDS()); + grid.setFields(name, value, scope); + grid.addDoubleClickHandler(event -> { + LD.askForValue(I18N.message(VALUE), I18N.message(VALUE), + grid.getSelectedRecord().getAttributeAsString("name") + " = " + + grid.getSelectedRecord().getAttributeAsString(VALUE), + 350, val -> { + // Nothing to do + }); + event.cancel(); + }); + + setMembers(grid); + } +} \ No newline at end of file diff --git a/logicaldoc-webapp/src/main/java/com/logicaldoc/web/data/EnvironmentDataServlet.java b/logicaldoc-webapp/src/main/java/com/logicaldoc/web/data/EnvironmentDataServlet.java new file mode 100644 index 000000000..dfa132960 --- /dev/null +++ b/logicaldoc-webapp/src/main/java/com/logicaldoc/web/data/EnvironmentDataServlet.java @@ -0,0 +1,65 @@ +package com.logicaldoc.web.data; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Locale; +import java.util.Map; +import java.util.Properties; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.logicaldoc.core.PersistenceException; +import com.logicaldoc.core.document.dao.DocumentDAO; +import com.logicaldoc.core.security.Session; +import com.logicaldoc.util.Context; + +/** + * This servlet is responsible for retrieving all the environmen variable + * + * @author Marco Meschieri - LogicalDOC + * @since 8.8.5 + */ +public class EnvironmentDataServlet extends AbstractDataServlet { + + private static final String ENTRY_CLOSE = ""; + + private static final String ENTRY_SCOPE_DATABASE_SCOPE = "database"; + + private static final long serialVersionUID = 1L; + + @Override + protected void service(HttpServletRequest request, HttpServletResponse response, Session session, Integer max, + Locale locale) throws PersistenceException, IOException { + + PrintWriter writer = response.getWriter(); + writer.write(""); + + Map env = System.getenv(); + for (Map.Entry entry : env.entrySet()) { + writer.print("system"); + writer.print(""); + writer.print(""); + writer.print(ENTRY_CLOSE); + } + + Properties props = System.getProperties(); + for (Map.Entry entry : props.entrySet()) { + writer.print("java"); + writer.print(""); + writer.print(""); + writer.print(ENTRY_CLOSE); + } + + DocumentDAO dao = (DocumentDAO) Context.get().getBean("DocumentDAO"); + Map meta = dao.getDatabaseMetadata(); + for (Map.Entry entry : meta.entrySet()) { + writer.print(ENTRY_SCOPE_DATABASE_SCOPE); + writer.print("" + entry.getKey() + ""); + writer.print(""); + writer.print(ENTRY_CLOSE); + } + + writer.write(""); + } +} \ No newline at end of file