From 29787b0edf72913274f05ed47d45617461fcdbe9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Fri, 13 Jul 2018 08:24:58 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31156 --- .../user/jobengine/zk/model/IndexModel.java | 113 ++++++++++++++++-- .../user/jobengine/zk/model/LoginModel.java | 7 +- .../user/jobengine/zk/model/MenuModel.java | 10 +- 3 files changed, 120 insertions(+), 10 deletions(-) diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java index a9ff2543..a6a6c52f 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java @@ -4,40 +4,137 @@ import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.AfterCompose; +import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.ContextParam; import org.zkoss.bind.annotation.ContextType; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Execution; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.select.Selectors; +import org.zkoss.zk.ui.util.Clients; + +import com.ibm.nosql.json.api.BasicDBObject; import user.commons.ListUtils; +import user.jobengine.zk.util.SessionUtil; public class IndexModel extends BaseModel { private static final Logger logger = LogManager.getLogger(); + + static public void redirect(String path) { + String query = IndexModel.toQueryString(Executions.getCurrent().getParameterMap()); + if (query != null) + path += query; + logger.info("Redirecting to {}", path); + Executions.sendRedirect(path); + } + + static public BasicDBObject toParamObject(Map parameters) { + BasicDBObject result = null; + if (parameters != null && parameters.size() > 0) { + result = new BasicDBObject(); + for (String key : parameters.keySet()) { + result.put(key, parameters.get(key)[0]); + //logger.info("{}:{}", key, parameters.get(key)[0]); + } + } + return result; + } + + static public String toQueryString(Map parameters) { + String result = null; + if (parameters != null && parameters.size() > 0) { + StringBuilder sb = new StringBuilder("?"); + for (String key : parameters.keySet()) { + if (sb.length() > 1) + sb.append("&"); + sb.append(key); + sb.append("="); + sb.append(parameters.get(key)[0]); + //logger.info("{}:{}", key, parameters.get(key)[0]); + } + result = sb.toString(); + } + return result; + } + private String page; + private Map pathMap = ListUtils.asMap("/", "searchitems", "jobs", "joblist", "missingmaterials", "missingmaterials", "newshistory", + "newshistory", "statistics", "statistics"); + @AfterCompose public void afterCompose(@ContextParam(ContextType.VIEW) Component view) { Selectors.wireComponents(view, this, false); Selectors.wireEventListeners(view, this); - Map pathMap = ListUtils.asMap("jobs", "joblist", "missingmaterials", "missingmaterials"); - String parameter = Executions.getCurrent().getParameter("action"); - String action = (String) pathMap.get(parameter); - if ("null".equals(parameter) || action == null) { - setPage("/pages/searchitems.zul"); - } else { - setPage(String.format("/pages/%s.zul", action)); - } + Execution execution = Executions.getCurrent(); + String action = execution.getParameter("action"); + Map parameters = execution.getParameterMap(); + route(action, toQueryString(parameters), true); + + SessionUtil.setAttribute(IndexModel.class.getCanonicalName(), this); } public String getPage() { return page; } + @Command + public void popHistory(@ContextParam(ContextType.TRIGGER_EVENT) Event evt) { + BasicDBObject h = SessionUtil.popHistory(); + if (h == null) + return; + route(h.getString("action"), h.getString("query"), h.getBoolean("useQueryString")); + // JSONObject data = (JSONObject) evt.getData(); + // if (data != null) { + // JSONObject location = (JSONObject) data.get("location"); + // if (location != null) { + // String pathName = (String) location.get("pathname"); + // if (pathName != null) { + // Path path = Paths.get(pathName); + // Path action = path.getFileName(); + // if (action != null) { + // route(action.toString(), null); + // return; + // } + // } + // + // } + // } + // route(null, null); + } + + public void pushClientHistory(String action, String query, boolean useQueryString) { + if (!action.equals("/")) + action = "/actions/" + action; + if (useQueryString && query != null) + action += query; + Clients.evalJavaScript(String.format("window.history.pushState('%s', null, '%s');", query, action)); + logger.info("Pushed to client: {} {}", action, query); + } + + public void route(String action, String query, boolean useQueryString) { + String actionString = action == null ? "/" : action; + String page = (String) pathMap.get(actionString); + if (useQueryString && query != null) + page = String.format("/pages/%s.zul?%s", page, query); + else + page = String.format("/pages/%s.zul", page); + setPage(page); + pushClientHistory(actionString, query, useQueryString); + SessionUtil.pushHistory(actionString, query, useQueryString); + } + public void setPage(String page) { + if (page.equals(this.page)) + return; this.page = page; + BindUtils.postNotifyChange(null, null, this, "page"); + logger.info("Page set to {}", getPage()); } } \ No newline at end of file diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/LoginModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/LoginModel.java index d4481eb9..6688cfcf 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/LoginModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/LoginModel.java @@ -17,9 +17,11 @@ public class LoginModel extends BaseModel { private String account; private String password; private String message; + private String query; @AfterCompose public void afterCompose(@ContextParam(ContextType.VIEW) Component view) { + query = IndexModel.toQueryString(Executions.getCurrent().getParameterMap()); } @Command @@ -29,7 +31,10 @@ public class LoginModel extends BaseModel { setMessage("Hibás fiókadatok!"); return; } - Executions.sendRedirect("/"); + String path = "/"; + if (query != null) + path += query; + Executions.sendRedirect(path); } public String getAccount() { diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java index c3c02606..ec5c5a87 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java @@ -9,6 +9,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.AfterCompose; +import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.ContextParam; import org.zkoss.bind.annotation.ContextType; @@ -62,6 +63,14 @@ public class MenuModel extends BaseModel { return basketMenuLabel; } + @Command + public void navigate(@BindingParam("action") String action) { + IndexModel indexModel = (IndexModel) SessionUtil.getAttribute(IndexModel.class.getCanonicalName()); + if (indexModel != null) { + indexModel.route(action, null, false); + } + } + public void removeBasketItems(List items) { basketItems.removeAll(items); updateBasketLabel(); @@ -99,5 +108,4 @@ public class MenuModel extends BaseModel { basketMenuLabel = String.format("(%d)", basketItems.size()); BindUtils.postNotifyChange(null, null, this, "basketMenuLabel"); } - } \ No newline at end of file -- 2.54.0