From c13de336b023c3f4a385766c0083167d648cbbad Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 5 Dec 2018 16:46:13 +0800 Subject: [PATCH 001/196] =?UTF-8?q?REPORT-13276=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=92=8C=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=B8=86=E8=BD=AF=E9=80=9A=E8=A1=8C=E8=AF=81=E9=80=82?= =?UTF-8?q?=E9=85=8DFinePassportManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/bbs/BBSLoginUtils.java | 60 +------------- .../com/fr/design/extra/LoginWebBridge.java | 83 +++---------------- .../com/fr/design/extra/PluginWebBridge.java | 4 +- 3 files changed, 17 insertions(+), 130 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java b/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java index ea24c49da..9e2ba9a73 100644 --- a/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java +++ b/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java @@ -1,14 +1,8 @@ package com.fr.design.bbs; -import com.fr.config.BBSAttr; -import com.fr.config.Configuration; -import com.fr.config.MarketConfig; +import com.fr.base.passport.FinePassportManager; import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import com.fr.transaction.Configurations; -import com.fr.transaction.Worker; -import java.util.List; /** * Created by ibm on 2017/8/21. @@ -16,62 +10,14 @@ import java.util.List; public class BBSLoginUtils { public static void bbsLogin(final String username, final String password) { - final BBSAttr bbsAttr = new BBSAttr(); - bbsAttr.setBbsUsername(username); - bbsAttr.setBbsPassword(password); try { - Configurations.update(new Worker() { - @Override - public void run() { - MarketConfig.getInstance().setBBsAttr(bbsAttr); - } - @Override - public Class[] targets() { - return new Class[]{MarketConfig.class}; - } - }); - - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - public static void bbsLogin(List list) { - try { - String uid = list.get(0); - String username = list.get(1); - String password = list.get(2); - final BBSAttr bbsAttr = new BBSAttr(); - bbsAttr.setBbsUsername(username); - bbsAttr.setBbsPassword(password); - bbsAttr.setBbsUid(Integer.parseInt(uid)); - bbsAttr.setInShowBBsName(username); - Configurations.update(new Worker() { - @Override - public void run() { - MarketConfig.getInstance().setBBsAttr(bbsAttr); - } - @Override - public Class[] targets() { - return new Class[]{MarketConfig.class}; - } - }); - + FinePassportManager.getInstance().login(username, password); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } public static void bbsLogout() { - final BBSAttr bbsAttr = new BBSAttr(); - bbsAttr.setBbsUsername(StringUtils.EMPTY); - bbsAttr.setBbsPassword(StringUtils.EMPTY); - bbsAttr.setBbsUid(0); - bbsAttr.setInShowBBsName(StringUtils.EMPTY); - try { - MarketConfig.getInstance().setBBsAttr(bbsAttr); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + FinePassportManager.getInstance().logout(); } } diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java index a89a4df03..43bb8131a 100644 --- a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java @@ -1,23 +1,18 @@ package com.fr.design.extra; -import com.fr.base.FRContext; +import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; -import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.PluginLoginExecutor; -import com.fr.design.extra.ucenter.Client; -import com.fr.design.extra.ucenter.XMLHelper; import com.fr.design.gui.ilable.UILabel; import com.fr.general.CloudCenter; -import com.fr.general.ComparatorUtils; import com.fr.general.http.HttpClient; -import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; import javafx.concurrent.Task; import javafx.scene.web.WebEngine; import netscape.javascript.JSObject; - import javax.swing.JDialog; import javax.swing.SwingUtilities; import java.awt.Color; @@ -25,8 +20,6 @@ import java.awt.Desktop; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; -import java.util.LinkedList; -import java.util.List; /** * @author vito @@ -150,7 +143,7 @@ public class LoginWebBridge { try { Thread.sleep(millis); } catch (InterruptedException e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -161,7 +154,7 @@ public class LoginWebBridge { try { Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.register"))); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -172,7 +165,7 @@ public class LoginWebBridge { try { Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -202,35 +195,16 @@ public class LoginWebBridge { if (!testConnection()) { return NET_FAILED; } - List loginResult = frPassport(userInfo, password); - String uid = loginResult.get(0); - String username = loginResult.get(1); - if (Integer.parseInt(uid) > 0) { - loginSuccess(username); - } - return uid; - } - - private List frPassport(String username, String password) { - LinkedList list = new LinkedList<>(); + int uid = 0; try { - Client uc = new Client(); - String result = uc.ucUserLogin(username, password); - result = new String(result.getBytes("iso-8859-1"), "gbk"); - list = XMLHelper.ucUnserialize(result); - if (list.size() > 0) { - int uid = Integer.parseInt(list.get(0)); - if (uid > 0) { - BBSLoginUtils.bbsLogin(list); - } - } else { - list.push(NET_FAILED); - } + uid = FinePassportManager.getInstance().login(userInfo, password); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - list.push(UNKNOWN_ERROR); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (uid > 0) { + loginSuccess(MarketConfig.getInstance().getBbsUsername()); } - return list; + return String.valueOf(uid); } /** @@ -276,39 +250,6 @@ public class LoginWebBridge { } } - /** - * 获取用户信息 - * - * @param userInfo - */ - public void getLoginInfo(String userInfo) { - try { - JSONObject jo = new JSONObject(userInfo); - String status = jo.get("status").toString(); - if (ComparatorUtils.equals(status, LOGIN_SUCCESS)) { - String username = jo.get("username").toString(); - int uid = Integer.parseInt(jo.get("uid") == null ? StringUtils.EMPTY : jo.get("uid").toString()); - closeQQWindow(); - loginSuccess(username); - - LinkedList list = new LinkedList<>(); - list.add(String.valueOf(uid)); - list.add(username); - list.add(StringUtils.EMPTY); - BBSLoginUtils.bbsLogin(list); - } else if (ComparatorUtils.equals(status, LOGIN_FAILED)) { - //账号没有QQ授权 - closeQQWindow(); - try { - Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("QQ_binding"))); - } catch (Exception ignored) { - // ignored - } - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { if (url.indexOf("qqLogin.html") > 0) { diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java index 33d527645..903418ec9 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java @@ -1,8 +1,8 @@ package com.fr.design.extra; +import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; import com.fr.design.RestartHelper; -import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.GetInstalledPluginsExecutor; import com.fr.design.extra.exe.GetPluginCategoriesExecutor; @@ -554,7 +554,7 @@ public class PluginWebBridge { */ public void clearUserInfo() { MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); - BBSLoginUtils.bbsLogout(); + FinePassportManager.getInstance().logout(); uiLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); } From ed58d82beeceae0af699890e1e5041fa469e1199 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 5 Dec 2018 16:59:57 +0800 Subject: [PATCH 002/196] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/extra/ucenter/AbstractClient.java | 120 -------- .../com/fr/design/extra/ucenter/Client.java | 264 ------------------ .../fr/design/extra/ucenter/XMLHelper.java | 41 --- 3 files changed, 425 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java delete mode 100644 designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java delete mode 100644 designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java diff --git a/designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java b/designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java deleted file mode 100644 index 855e5a96e..000000000 --- a/designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.fr.design.extra.ucenter; - -import com.fr.base.Base64; -import com.fr.base.FRContext; -import com.fr.stable.StringUtils; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -/** - * @author lp - * @date 2016/9/9 - */ -public abstract class AbstractClient { - - static final String UC_API_MYSQL = "ucApiMysql"; - static final String UC_API_POST = "ucApiPost"; - - protected String urlEncode(String value) { - return URLEncoder.encode(value); - } - - protected String md5(String input) { - MessageDigest md; - try { - md = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException e) { - FRContext.getLogger().info(e.getMessage()); - return ""; - } - return byte2hex(md.digest(input.getBytes())); - } - - protected String md5(long input) { - return md5(String.valueOf(input)); - } - - protected String base64Decode(String input) { - try { - return new String(Base64.decode(input)); - } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - return ""; - } - } - - protected String base64Encode(String input) { - try { - return Base64.encode(input.getBytes("iso-8859-1")); - } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - return ""; - } - } - - protected String byte2hex(byte[] b) { - StringBuilder hs = new StringBuilder(); - String stmp = ""; - for (byte aB : b) { - stmp = (Integer.toHexString(aB & 0XFF)); - if (stmp.length() == 1) { - hs.append("0").append(stmp); - } else { - hs.append(stmp); - } - } - return hs.toString(); - } - - protected String subStr(String input, int begin, int length) { - return input.substring(begin, begin + length); - } - - protected String subStr(String input, int begin) { - if (begin > 0) { - return input.substring(begin); - } else { - return input.substring(input.length() + begin); - } - } - - protected long microTime() { - return System.currentTimeMillis(); - } - - protected long time() { - return System.currentTimeMillis() / 1000; - } - - protected String sprintf(String format, long input) { - String temp = "0000000000" + input; - return temp.substring(temp.length() - 10); - } - - protected String callUserFunc(String function, String model, String action, Map args) { - if (UC_API_MYSQL.equals(function)) { - return this.ucApiMysql(model, action, args); - } - if (UC_API_POST.equals(function)) { - return this.ucApiPost(model, action, args); - } - return StringUtils.EMPTY; - } - - public abstract String ucApiPost(String module, String action, Map arg); - - public abstract String ucApiMysql(String model, String action, Map args); - - protected String urlEncode(String value, String code) { - try { - return URLEncoder.encode(value, code); - } catch (UnsupportedEncodingException e) { - FRContext.getLogger().info(e.getMessage()); - } - return ""; - } -} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java b/designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java deleted file mode 100644 index 903286476..000000000 --- a/designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java +++ /dev/null @@ -1,264 +0,0 @@ -package com.fr.design.extra.ucenter; - -import com.fr.base.FRContext; -import com.fr.general.CloudCenter; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.Socket; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * - * @author lp - * @date 2016/9/9 - */ -public class Client extends AbstractClient { - - private static String UC_IP = ""; - private static String UC_API = ""; - private static String UC_CONNECT = ""; - private static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; - private static String UC_APPID = "4"; - private static String UC_CLIENT_RELEASE = "20090212"; - public static String UC_ROOT = ""; - private static String UC_API_FUNC = "mysql".equals(UC_CONNECT) ? UC_API_MYSQL : UC_API_POST; - - public String ucUserLogin(String username, String password) { - return ucUserLogin(username, password, 0, 0); - } - - public String ucUserLogin(String username, String password, int isUid, int checkQues) { - return ucUserLogin(username, password, isUid, checkQues, "", ""); - } - - /** - * 用户登录 - * - * @param username 用户名 - * @param password 密码 - * @param isUid 是否为uid - * @param checkQues 是否使用安全问题 - * @param questionId 安全提问 - * @param answer 安全提问答案 - * @return array (uid/status, username, password, email) - */ - public String ucUserLogin(String username, String password, int isUid, int checkQues, String questionId, String answer) { - Map args = new HashMap<>(6); - args.put("username", username); - args.put("password", password); - args.put("isUid", isUid); - args.put("checkQues", checkQues); - args.put("questionId", questionId); - args.put("answer", answer); - String res = callUserFunc(UC_API_FUNC, "user", "login", args); - return "mysql".equals(UC_CONNECT) ? res : res; - } - - /** - * 拼接发送的post请求 - * - * @param module 模块 - * @param action 操作模式 - * @param arg 参数 - * @return 发送的请求加密内容 - */ - @Override - public String ucApiPost(String module, String action, Map arg) { - StringBuilder str = new StringBuilder(); - String sep = ""; - for (String k : arg.keySet()) { - Object v = arg.get(k); - k = urlEncode(k); - if (v.getClass().isAssignableFrom(Map.class)) { - StringBuilder s2 = new StringBuilder(); - String sep2 = ""; - for (String k2 : ((Map) v).keySet()) { - Object v2 = ((Map) v).get(k2); - k2 = urlEncode(k2); - s2.append(sep2).append("{").append(k).append("}[").append(k2).append("]=").append(urlEncode(String.valueOf(v2))); - sep2 = "&"; - } - str.append(sep).append(s2); - } else { - str.append(sep).append(k).append("=").append(urlEncode(String.valueOf(v), "GBK")); - } - sep = "&"; - } - String postData = ucApiRequestdata(module, action, str.toString(), ""); - UC_API = CloudCenter.getInstance().acquireUrlByKind("bbs.ucapi"); - UC_IP = CloudCenter.getInstance().acquireUrlByKind("bbs.ip"); - return ucFopen2(UC_API + "/index.php", 500000, postData, "", true, UC_IP, 20, true); - } - - @Override - public String ucApiMysql(String model, String action, Map args) { - return ""; - } - - public String ucApiInput(String data) { - return urlEncode(ucAuthCode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); - } - - protected String ucApiRequestdata(String module, String action, String arg, String extra) { - String input = ucApiInput(arg); - return "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra; - } - - public String ucAuthCode(String string, String operation, String key) { - return ucAuthCode(string, operation, key, 0); - } - - /** - * 内容加密 - * - * @param string 原文 - * @param operation decode或者encode - * @param key 密钥 - * @param expiry 密文有效时限 - * @return 加密之后的原文 - */ - public String ucAuthCode(String string, String operation, String key, int expiry) { - int ckeyLength = 4; - key = md5(key != null ? key : UC_KEY); - String keya = md5(subStr(key, 0, 16)); - String keyb = md5(subStr(key, 16, 16)); - String keyc = "DECODE".equals(operation) ? subStr(string, 0, ckeyLength) : subStr(md5(microTime()), -ckeyLength); - String cryptkey = keya + md5(keya + keyc); - int keyLength = cryptkey.length(); - string = "DECODE".equals(operation) ? base64Decode(subStr(string, ckeyLength)) : sprintf("%010d", expiry > 0 ? expiry + time() : 0) + subStr(md5(string + keyb), 0, 16) + string; - int stringLength = string.length(); - StringBuilder result1 = new StringBuilder(); - int[] box = new int[256]; - for (int i = 0; i < 256; i++) { - box[i] = i; - } - int[] rndkey = new int[256]; - for (int i = 0; i <= 255; i++) { - rndkey[i] = (int) cryptkey.charAt(i % keyLength); - } - int j = 0; - for (int i = 0; i < 256; i++) { - j = (j + box[i] + rndkey[i]) % 256; - int tmp = box[i]; - box[i] = box[j]; - box[j] = tmp; - } - j = 0; - int a = 0; - for (int i = 0; i < stringLength; i++) { - a = (a + 1) % 256; - j = (j + box[a]) % 256; - int tmp = box[a]; - box[a] = box[j]; - box[j] = tmp; - result1.append((char) (((int) string.charAt(i)) ^ (box[(box[a] + box[j]) % 256]))); - } - if ("DECODE".equals(operation)) { - String result = result1.toString(); - try { - result = new String(result.getBytes("iso-8859-1"), "gbk"); - } catch (Exception e) { - result = result1.substring(0, result1.length()); - } - if ((Integer.parseInt(subStr(result, 0, 10)) == 0 || Long.parseLong(subStr(result, 0, 10)) - time() > 0) && subStr(result, 10, 16).equals(subStr(md5(subStr(result, 26) + keyb), 0, 16))) { - return subStr(result, 26); - } else { - return ""; - } - } else { - return keyc + base64Encode(result1.toString()).replaceAll("=", ""); - } - } - - protected String ucFopen2(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { - url += url.indexOf("?") > 0 ? "&" : "?" + "__times__=1"; - return ucFopen(url, limit, post, cookie, bysocket, ip, timeout, block); - } - - /** - * 本地模网络请求取数据 - * - * @param url 打开的url - * @param limit 取返回的数据的长度 - * @param post 要发送的 POST 数据,如uid=1&password=1234 - * @param cookie 要模拟的 COOKIE 数据,如uid=123&auth=a2323sd2323 - * @param bysocket TRUE/FALSE 是否通过SOCKET打开 - * @param ip IP地址 - * @param timeout 连接超时时间 - * @param block 是否为阻塞模式 defaul valuet:true - * @return 取到的字符串 - */ - private String ucFopen(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { - StringBuilder result = new StringBuilder(); - URL matches; - String host = ""; - String path = ""; - int port = 80; - try { - matches = new URL(url); - host = matches.getHost(); - path = matches.getPath() != null ? matches.getPath() + (matches.getQuery() != null ? "?" + matches.getQuery() : "") : "/"; - if (matches.getPort() > 0) port = matches.getPort(); - } catch (Exception e1) { - FRContext.getLogger().info(e1.getMessage()); - } - StringBuilder out = new StringBuilder(); - if (post != null && post.length() > 0) { - out.append("POST ").append(path).append(" HTTP/1.0\r\n"); - out.append("Accept: */*\r\n"); - out.append("Accept-Language: zh-cn\r\n"); - out.append("Content-Type: application/x-www-form-urlencoded\r\n"); - out.append("User-Agent: \r\n"); - out.append("Host: ").append(host).append("\r\n"); - out.append("Content-Length: ").append(post.length()).append("\r\n"); - out.append("Connection: Close\r\n"); - out.append("Cache-Control: no-cache\r\n"); - out.append("Cookie: \r\n\r\n"); - out.append(post); - } else { - out.append("GET $path HTTP/1.0\r\n"); - out.append("Accept: */*\r\n"); - out.append("Accept-Language: zh-cn\r\n"); - out.append("User-Agent: Java/1.5.0_01\r\n"); - out.append("Host: $host\r\n"); - out.append("Connection: Close\r\n"); - out.append("Cookie: $cookie\r\n\r\n"); - } - try { - Socket fp = new Socket(ip != null && ip.length() > 10 ? ip : host, port); - if (!fp.isConnected()) { - return ""; - } else { - OutputStream os = fp.getOutputStream(); - os.write(out.toString().getBytes()); - InputStream ins = fp.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(ins, "iso-8859-1")); - while (true) { - String header = reader.readLine(); - if (header == null || "".equals(header) || Objects.equals(header, "\r\n") || Objects.equals(header, "\n")) { - break; - } - } - while (true) { - String data = reader.readLine(); - if (data == null || "".equals(data)) { - break; - } else { - result.append(data); - } - } - fp.close(); - } - } catch (IOException e) { - FRContext.getLogger().info(e.getMessage()); - } - return result.toString(); - } -} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java b/designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java deleted file mode 100644 index 697da6c56..000000000 --- a/designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.fr.design.extra.ucenter; - -import com.fr.base.FRContext; -import com.sun.org.apache.xerces.internal.parsers.DOMParser; -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import java.io.IOException; -import java.io.StringReader; -import java.util.LinkedList; - -/** - * @author lp - * @date 2016/9/9 - */ -public class XMLHelper { - - public static LinkedList ucUnserialize(String input) { - - LinkedList result = new LinkedList(); - DOMParser parser = new DOMParser(); - try { - parser.parse(new InputSource(new StringReader(input))); - Document doc = parser.getDocument(); - NodeList nl = doc.getChildNodes().item(0).getChildNodes(); - int length = nl.getLength(); - for (int i = 0; i < length; i++) { - if (nl.item(i).getNodeType() == Document.ELEMENT_NODE) { - result.add(nl.item(i).getTextContent()); - } - } - } catch (SAXException e) { - FRContext.getLogger().info(e.getMessage()); - } catch (IOException e1) { - FRContext.getLogger().info(e1.getLocalizedMessage()); - } - return result; - } -} \ No newline at end of file From fcd2374e9282245eca4a88e7510707f1aaecc4e6 Mon Sep 17 00:00:00 2001 From: vito Date: Thu, 13 Dec 2018 09:53:08 +0800 Subject: [PATCH 003/196] =?UTF-8?q?REPORT-12885=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=94=B5=E8=84=91=E5=9C=A8=E7=BD=91=E7=BB=9C=E7=95=85=E9=80=9A?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B3=E7=A7=92=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=88=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-realize/src/main/java/com/fr/start/SplashContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/SplashContext.java b/designer-realize/src/main/java/com/fr/start/SplashContext.java index 2e5467557..a8a542a58 100644 --- a/designer-realize/src/main/java/com/fr/start/SplashContext.java +++ b/designer-realize/src/main/java/com/fr/start/SplashContext.java @@ -24,7 +24,7 @@ public class SplashContext { public static final String SPLASH_PATH = "/com/fr/design/images/splash_10.gif"; public static final String SPLASH_CACHE_NAME = "splash_10.gif"; - private static final int FETCH_ONLINE_MAX_TIMES = 10; + private static final int FETCH_ONLINE_MAX_TIMES = 50; private static final SplashContext SPLASH_CONTEXT = new SplashContext(); From eb31c0b231abbe91ea3829446d895f136e0672f0 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 15 Mar 2019 16:19:59 +0800 Subject: [PATCH 004/196] =?UTF-8?q?REPORT-14914=20=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E7=AB=AF=E6=94=AF=E6=8C=81FRM=E8=BE=B9=E8=B7=9D=E7=AD=89?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/ispinner/UISpinner.java | 17 ++++- .../design/designer/creator/XWFitLayout.java | 26 ++++--- .../mobile/BodyFitMobilePropertyUI.java | 22 ++++++ .../mobile/BodyMobilePropertyUI.java | 13 ++-- .../design/form/util/FormDesignerUtils.java | 16 +++++ .../ui/designer/XmlRelationedBasicPane.java | 18 +++++ .../designer/component/PaddingBoundPane.java | 44 +++++++----- .../mobile/BodyFitMobileDefinePane.java | 62 ++++++++++++++++ .../designer/mobile/BodyMobileDefinePane.java | 42 ++++++----- .../mobile/ChartEditorDefinePane.java | 21 +++--- .../mobile/TabMobileWidgetDefinePane.java | 57 +++++++++++++-- .../component/MobileComponentAdvancePane.java | 45 ++++++++++++ .../MobileComponentLayoutIntervalPane.java | 71 +++++++++++++++++++ 13 files changed, 380 insertions(+), 74 deletions(-) create mode 100644 designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java create mode 100644 designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java create mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/XmlRelationedBasicPane.java create mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java create mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentAdvancePane.java create mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentLayoutIntervalPane.java diff --git a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java index c9c398829..ba6913a38 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java +++ b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java @@ -92,6 +92,18 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver } public void setValue(double value) { + setValue(value, true); + } + + /** + * 赋值但不触发保存,只是展现,一般是populate的时候用 + * @param value + */ + public void setValueWithoutEvent(double value) { + setValue(value, false); + } + + public void setValue(double value, boolean fireStateChange) { if (globalNameListener != null && shouldResponseNameListener()) { globalNameListener.setGlobalName(spinnerName); } @@ -102,8 +114,9 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver } this.value = value; setTextField(value); - - fireStateChanged(); + if (fireStateChange) { + fireStateChanged(); + } } protected void setTextField(double value){ diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java index c9b55b298..a468ab7d8 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java @@ -1,21 +1,11 @@ package com.fr.design.designer.creator; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.ContainerEvent; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRFitLayoutAdapter; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; -import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI; +import com.fr.design.designer.properties.mobile.BodyFitMobilePropertyUI; import com.fr.design.form.layout.FRFitLayout; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.mainframe.FormArea; @@ -24,17 +14,25 @@ import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.PaddingMargin; import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WLayout; import com.fr.general.FRLogger; import com.fr.general.FRScreen; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; - import com.fr.stable.ArrayUtils; import edu.emory.mathcs.backport.java.util.Arrays; import javax.swing.JOptionPane; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.event.ContainerEvent; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; /** @@ -1209,7 +1207,7 @@ public class XWFitLayout extends XLayoutContainer { @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { - return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(this)}; + return new WidgetPropertyUIProvider[]{ new BodyFitMobilePropertyUI(this)}; } @Override diff --git a/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java new file mode 100644 index 000000000..a14e7fb0b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java @@ -0,0 +1,22 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.dialog.BasicPane; +import com.fr.design.widget.ui.designer.mobile.BodyFitMobileDefinePane; + + +/** + * 自适应对应body对应的移动端属性 + */ +public class BodyFitMobilePropertyUI extends BodyMobilePropertyUI { + + public BodyFitMobilePropertyUI(XLayoutContainer xwFitLayout) { + super(xwFitLayout); + } + + @Override + public BasicPane createWidgetAttrPane() { + return new BodyFitMobileDefinePane(getxCreator()); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java index 5175b30dc..401f7d2f2 100644 --- a/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java +++ b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java @@ -1,8 +1,7 @@ package com.fr.design.designer.properties.mobile; import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XWAbsoluteBodyLayout; -import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.dialog.BasicPane; import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; import com.fr.design.gui.itable.AbstractPropertyTable; @@ -16,19 +15,19 @@ public class BodyMobilePropertyUI extends AbstractWidgetPropertyUIProvider { private XCreator xCreator; - public BodyMobilePropertyUI(XWFitLayout xwFitLayout) { + public BodyMobilePropertyUI(XLayoutContainer xwFitLayout) { this.xCreator = xwFitLayout; } - public BodyMobilePropertyUI(XWAbsoluteBodyLayout xwAbsoluteBodyLayout) { - this.xCreator = xwAbsoluteBodyLayout; - } - @Override public AbstractPropertyTable createWidgetAttrTable() { return null; } + public XCreator getxCreator() { + return xCreator; + } + @Override public BasicPane createWidgetAttrPane() { return new BodyMobileDefinePane(xCreator); diff --git a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java new file mode 100644 index 000000000..83a2b68f4 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java @@ -0,0 +1,16 @@ +package com.fr.design.form.util; + +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.container.WFitLayout; + +public class FormDesignerUtils { + /** + * body布局是否设置了手机重布局 + * + * @param designer + * @return + */ + public static boolean isAppRelayout(FormDesigner designer) { + return ((WFitLayout) designer.getRootComponent().toData()).isAppRelayout(); + } +} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/XmlRelationedBasicPane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/XmlRelationedBasicPane.java new file mode 100644 index 000000000..1f9b13693 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/XmlRelationedBasicPane.java @@ -0,0 +1,18 @@ +package com.fr.design.widget.ui.designer; + +import com.fr.design.dialog.BasicPane; + +/** + * 有些控件在不同终端需要对相同的属性分别进行设置,基础设置面板是一样的但是映射到控件上的属性又是不一样的,为了重用面板,这边加上xmltag做区分 + */ +public abstract class XmlRelationedBasicPane extends BasicPane{ + private String xmlTag; + + public XmlRelationedBasicPane(String xmlTag) { + this.xmlTag = xmlTag; + } + + public String getXmlTag() { + return xmlTag; + } +} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java index 9b4a432a2..856ff6a0c 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java @@ -21,22 +21,26 @@ import java.awt.Component; /** * Created by ibm on 2017/8/3. */ -public class PaddingBoundPane extends BasicPane{ +public class PaddingBoundPane extends BasicPane { protected UISpinner top; protected UISpinner bottom; protected UISpinner left; protected UISpinner right; public PaddingBoundPane() { - initBoundPane(); + initBoundPane(0, 0, 0, 0); } - public void initBoundPane() { + public PaddingBoundPane(int top, int bottom, int left, int right) { + initBoundPane(top, bottom, left, right); + } + + public void initBoundPane(int t, int b, int l, int r) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - top = new UISpinner(0, Integer.MAX_VALUE, 1, 0); - bottom = new UISpinner(0, Integer.MAX_VALUE, 1, 0); - left = new UISpinner(0, Integer.MAX_VALUE, 1, 0); - right = new UISpinner(0, Integer.MAX_VALUE, 1, 0); + top = new UISpinner(0, Integer.MAX_VALUE, 1, t); + bottom = new UISpinner(0, Integer.MAX_VALUE, 1, b); + left = new UISpinner(0, Integer.MAX_VALUE, 1, l); + right = new UISpinner(0, Integer.MAX_VALUE, 1, r); top.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate")); bottom.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate")); left.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout_Padding_Duplicate")); @@ -45,12 +49,12 @@ public class PaddingBoundPane extends BasicPane{ label.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, 0, 0)); label.setVerticalAlignment(SwingConstants.TOP); JPanel panel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{ - new Component[]{label, createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1 ); + new Component[]{label, createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1); this.add(panel); } - public JPanel createRightPane(){ + public JPanel createRightPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; double[] rowSize = {p, p}; @@ -67,7 +71,7 @@ public class PaddingBoundPane extends BasicPane{ JPanel northPanel = TableLayoutHelper.createGapTableLayoutPane(components1, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L6); northPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, IntervalConstants.INTERVAL_L1, 0)); JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components2, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L6); - JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L1, 0)); panel.add(northPanel, BorderLayout.NORTH); panel.add(centerPanel, BorderLayout.CENTER); @@ -75,20 +79,26 @@ public class PaddingBoundPane extends BasicPane{ } public void update(RichStyleWidgetProvider marginWidget) { - marginWidget.setMargin(new PaddingMargin((int)top.getValue(), (int)left.getValue(), (int)bottom.getValue(), (int)right.getValue() )); + marginWidget.setMargin(updateBean()); + } + + public PaddingMargin updateBean() { + return new PaddingMargin((int) top.getValue(), (int) left.getValue(), (int) bottom.getValue(), (int) right.getValue()); } + @Override protected String title4PopupWindow() { return "PaddingBoundPane"; } public void populate(RichStyleWidgetProvider marginWidget) { - PaddingMargin paddingMargin = marginWidget.getMargin(); - top.setValue(paddingMargin.getTop()); - bottom.setValue(paddingMargin.getBottom()); - left.setValue(paddingMargin.getLeft()); - right.setValue(paddingMargin.getRight()); + populateBean(marginWidget.getMargin()); } - + public void populateBean(PaddingMargin paddingMargin) { + top.setValueWithoutEvent(paddingMargin.getTop()); + bottom.setValueWithoutEvent(paddingMargin.getBottom()); + left.setValueWithoutEvent(paddingMargin.getLeft()); + right.setValueWithoutEvent(paddingMargin.getRight()); + } } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java new file mode 100644 index 000000000..a2183b7d0 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java @@ -0,0 +1,62 @@ +package com.fr.design.widget.ui.designer.mobile; + +import com.fr.base.iofile.attr.FormBodyPaddingAttrMark; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.widget.ui.designer.mobile.component.MobileComponentAdvancePane; +import com.fr.design.widget.ui.designer.mobile.component.MobileComponentLayoutIntervalPane; +import com.fr.form.ui.RichStyleWidgetProvider; + +import javax.swing.JPanel; +import java.awt.BorderLayout; + +/** + * Created by plough on 2018/2/1. + */ +public class BodyFitMobileDefinePane extends BodyMobileDefinePane { + private MobileComponentAdvancePane advancePane; + private MobileComponentLayoutIntervalPane intervalPane; + + public BodyFitMobileDefinePane(XCreator xCreator) { + super(xCreator); + } + + @Override + public void initPropertyGroups(Object source) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + setDesigner(WidgetPropertyPane.getInstance().getEditingFormDesigner()); + this.add(createNorthPane(), BorderLayout.NORTH); + this.add(getMobileWidgetListPane(), BorderLayout.CENTER); + this.repaint(); + } + + private JPanel createNorthPane() { + JPanel holder = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + advancePane = new MobileComponentAdvancePane(FormBodyPaddingAttrMark.XML_TAG); + intervalPane = new MobileComponentLayoutIntervalPane(FormBodyPaddingAttrMark.XML_TAG); + + holder.add(getMobilePropertyPane(), BorderLayout.NORTH); + //高级 + holder.add(advancePane, BorderLayout.CENTER); + //布局 + holder.add(intervalPane, BorderLayout.SOUTH); + return holder; + } + + @Override + public void populate(FormDesigner designer) { + super.populate(designer); + advancePane.populate((RichStyleWidgetProvider) getBodyCreator().toData()); + intervalPane.populate((RichStyleWidgetProvider) getBodyCreator().toData()); + } + + @Override + public void update() { + super.update(); + advancePane.update((RichStyleWidgetProvider) getBodyCreator().toData()); + intervalPane.update((RichStyleWidgetProvider) getBodyCreator().toData()); + } +} diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java index 11c5023ef..329bb8f70 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java @@ -3,19 +3,19 @@ package com.fr.design.widget.ui.designer.mobile; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.MobileWidgetListPane; import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WSortLayout; - import javax.swing.BorderFactory; import javax.swing.JPanel; import java.awt.BorderLayout; -import java.lang.reflect.Method; /** * Created by plough on 2018/2/1. @@ -31,6 +31,22 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { this.bodyCreator = xCreator; } + public XCreator getBodyCreator() { + return bodyCreator; + } + + public void setBodyCreator(XCreator bodyCreator) { + this.bodyCreator = bodyCreator; + } + + public FormDesigner getDesigner() { + return designer; + } + + public void setDesigner(FormDesigner designer) { + this.designer = designer; + } + @Override public void initPropertyGroups(Object source) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); @@ -41,7 +57,7 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { } // 手机属性 - private UIExpandablePane getMobilePropertyPane() { + public UIExpandablePane getMobilePropertyPane() { JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); appRelayoutCheck = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_App_ReLayout"), true); appRelayoutCheck.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); @@ -55,7 +71,7 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { } // 控件顺序 - private UIExpandablePane getMobileWidgetListPane() { + public UIExpandablePane getMobileWidgetListPane() { mobileWidgetListPane = new MobileWidgetListPane(designer, (WSortLayout) bodyCreator.toData()); mobileWidgetListPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0)); JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -81,25 +97,13 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { initListener(this); } - // body是否开启手机重布局 - private boolean isAppRelayout() { - boolean result = false; - try { - Method m = bodyCreator.toData().getClass().getMethod("isAppRelayout"); - result = (boolean)m.invoke(bodyCreator.toData()); - } catch (Exception e) { - // do nothing - } - return result; - } private void setAppRelayout(boolean appRelayoutSeleted) { - if (appRelayoutSeleted == isAppRelayout()) { + if (appRelayoutSeleted == FormDesignerUtils.isAppRelayout(designer)) { return; } try { - Method m = bodyCreator.toData().getClass().getMethod("setAppRelayout", boolean.class); - m.invoke(bodyCreator.toData(), appRelayoutSeleted); + ((WFitLayout) designer.getRootComponent().toData()).setAppRelayout(appRelayoutSeleted); } catch (Exception e) { // do nothing } @@ -108,7 +112,7 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { @Override public void populate(FormDesigner designer) { this.designer = designer; - appRelayoutCheck.setSelected(isAppRelayout()); + appRelayoutCheck.setSelected(FormDesignerUtils.isAppRelayout(designer)); // 数据 populate 完成后,再设置监听 this.bindListeners2Widgets(); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java index 86df38abc..b9ae12e20 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ChartEditorDefinePane.java @@ -9,6 +9,7 @@ import com.fr.design.designer.creator.XWAbsoluteBodyLayout; import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.properties.items.Item; import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; @@ -20,11 +21,14 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.ui.BaseChartEditor; -import com.fr.form.ui.container.WFitLayout; - -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; @@ -56,7 +60,7 @@ public class ChartEditorDefinePane extends MobileWidgetDefinePane { JPanel mobileSettingsPane; if (isInAbsoluteLayout()) { mobileSettingsPane = getUnavailableTipPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tip_Chart_Adaptivity_Unavailable_In_Absolute_Layout")); - } else if (!isAppRelayout()) { + } else if (!FormDesignerUtils.isAppRelayout(designer)) { mobileSettingsPane = getUnavailableTipPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tip_Chart_Adaptivity_Unavailable")); } else { mobileSettingsPane = getMobileSettingsPane(); @@ -76,11 +80,6 @@ public class ChartEditorDefinePane extends MobileWidgetDefinePane { return false; } - // body是否开启手机重布局 - private boolean isAppRelayout() { - return ((WFitLayout)designer.getRootComponent().toData()).isAppRelayout(); - } - private JPanel getUnavailableTipPane(String tipText) { JPanel panel = new JPanel(new BorderLayout()); UILabel unavailableTipLabel = new UILabel(); @@ -158,7 +157,7 @@ public class ChartEditorDefinePane extends MobileWidgetDefinePane { this.bindListeners2Widgets(); this.addAttributeChangeListener(changeListener); - if (!isAppRelayout() || isInAbsoluteLayout()) { + if (!FormDesignerUtils.isAppRelayout(designer) || isInAbsoluteLayout()) { return; } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java index f6d94da06..77507685c 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java @@ -1,16 +1,23 @@ package com.fr.design.widget.ui.designer.mobile; +import com.fr.base.iofile.attr.FormTabPaddingAttrMark; import com.fr.design.constants.LayoutConstants; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; +import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.widget.accessibles.AccessibleTemplateStyleEditor; import com.fr.design.mainframe.widget.accessibles.MobileTemplateStylePane; +import com.fr.design.widget.ui.designer.mobile.component.MobileComponentAdvancePane; +import com.fr.design.widget.ui.designer.mobile.component.MobileComponentLayoutIntervalPane; +import com.fr.form.ui.container.WBodyLayoutType; +import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.cardtag.mobile.MobileTemplateStyle; @@ -20,8 +27,11 @@ import java.awt.Component; public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { private XCreator xCreator; + private FormDesigner designer; // 当前设计器 private AccessibleTemplateStyleEditor templateStyleEditor; private AttributeChangeListener changeListener; + private MobileComponentAdvancePane advancePane; + private MobileComponentLayoutIntervalPane intervalPane; public TabMobileWidgetDefinePane(XCreator xCreator) { this.xCreator = xCreator; @@ -36,6 +46,7 @@ public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { } }; } + /** * 后台初始化所有事件. */ @@ -46,24 +57,62 @@ public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { @Override public void initPropertyGroups(Object source) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tab_Style_Template")); templateStyleEditor = new AccessibleTemplateStyleEditor(new MobileTemplateStylePane((WCardTagLayout) xCreator.toData())); - JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{label, templateStyleEditor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); - this.add(jPanel, BorderLayout.CENTER); + JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{label, templateStyleEditor}, {new UILabel()}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_LARGE); + JPanel holder = FRGUIPaneFactory.createBorderLayout_S_Pane(); + holder.add(jPanel, BorderLayout.NORTH); + if (!shouldHidePadding()) { + advancePane = new MobileComponentAdvancePane(FormTabPaddingAttrMark.XML_TAG); + intervalPane = new MobileComponentLayoutIntervalPane(FormTabPaddingAttrMark.XML_TAG); + //高级 + holder.add(advancePane, BorderLayout.CENTER); + //布局 + holder.add(intervalPane, BorderLayout.SOUTH); + } + + this.add(holder, BorderLayout.NORTH); } @Override public void populate(FormDesigner designer) { - templateStyleEditor.setValue(((WCardTagLayout)xCreator.toData()).getMobileTemplateStyle()); + templateStyleEditor.setValue(((WCardTagLayout) xCreator.toData()).getMobileTemplateStyle()); // 数据 populate 完成后,再设置监听 this.bindListeners2Widgets(); this.addAttributeChangeListener(changeListener); + if (advancePane != null) {//业务层面可以写成shouldHidePadding但是这样写应该性能差点 + advancePane.populate((WCardTagLayout) xCreator.toData()); + } + if (intervalPane != null) { + intervalPane.populate((WCardTagLayout) xCreator.toData()); + } } @Override public void update() { - ((WCardTagLayout)xCreator.toData()).setMobileTemplateStyle((MobileTemplateStyle) templateStyleEditor.getValue()); + ((WCardTagLayout) xCreator.toData()).setMobileTemplateStyle((MobileTemplateStyle) templateStyleEditor.getValue()); DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); // 触发设计器保存按钮亮起来 + if (advancePane != null) { + advancePane.update((WCardTagLayout) xCreator.toData()); + } + if (intervalPane != null) { + intervalPane.update((WCardTagLayout) xCreator.toData()); + } + } + // body是否是绝对布局 + private boolean isBodyAbsoluteRelayout() { + WFitLayout root = ((WFitLayout) designer.getRootComponent().toData()); + return root.getBodyLayoutType() == WBodyLayoutType.ABSOLUTE; + } + + /** + * 绝对布局且不勾选手机重布局 的时候不支持边距设置 + * + * @return + */ + private boolean shouldHidePadding() { + return !FormDesignerUtils.isAppRelayout(designer) && isBodyAbsoluteRelayout(); } } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentAdvancePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentAdvancePane.java new file mode 100644 index 000000000..f94d57907 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentAdvancePane.java @@ -0,0 +1,45 @@ +package com.fr.design.widget.ui.designer.mobile.component; + +import com.fr.base.iofile.attr.AttrMarkFactory; +import com.fr.base.iofile.attr.FormBodyPaddingAttrMark; +import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.widget.ui.designer.XmlRelationedBasicPane; +import com.fr.design.widget.ui.designer.component.PaddingBoundPane; +import com.fr.form.ui.RichStyleWidgetProvider; + +import java.awt.BorderLayout; + +/** + * 只有内边距设置的高级设置 + */ +public class MobileComponentAdvancePane extends XmlRelationedBasicPane { + private PaddingBoundPane paddingBound; + + public MobileComponentAdvancePane(String xmlTag) { + super(xmlTag); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + paddingBound = new PaddingBoundPane(FormBodyPaddingAttrMark.DEFAULT_SIZE, FormBodyPaddingAttrMark.DEFAULT_SIZE, FormBodyPaddingAttrMark.DEFAULT_SIZE, FormBodyPaddingAttrMark.DEFAULT_SIZE); + UIExpandablePane advanceExpandablePane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, paddingBound); + this.add(advanceExpandablePane, BorderLayout.NORTH); + } + + @Override + protected String title4PopupWindow() { + return "ComponentAdvancePane"; + } + + public void update(RichStyleWidgetProvider marginWidget) { + FormBodyPaddingAttrMark attrMark = marginWidget.getWidgetAttrMark(getXmlTag()); + attrMark = attrMark == null ? (FormBodyPaddingAttrMark) AttrMarkFactory.createAttrMark(getXmlTag()) : attrMark; + attrMark.setPaddingMargin(paddingBound.updateBean()); + marginWidget.addWidgetAttrMark(attrMark); + } + + public void populate(RichStyleWidgetProvider marginWidget) { + FormBodyPaddingAttrMark attrMark = marginWidget.getWidgetAttrMark(getXmlTag()); + if (attrMark != null) { + paddingBound.populateBean(attrMark.getPaddingMargin()); + } + } +} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentLayoutIntervalPane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentLayoutIntervalPane.java new file mode 100644 index 000000000..5a565373d --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/component/MobileComponentLayoutIntervalPane.java @@ -0,0 +1,71 @@ +package com.fr.design.widget.ui.designer.mobile.component; + +import com.fr.base.iofile.attr.AttrMarkFactory; +import com.fr.base.iofile.attr.FormBodyPaddingAttrMark; +import com.fr.design.designer.IntervalConstants; +import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.utils.gui.UIComponentUtils; +import com.fr.design.widget.FRWidgetFactory; +import com.fr.design.widget.ui.designer.XmlRelationedBasicPane; +import com.fr.form.ui.RichStyleWidgetProvider; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; + +/** + * 只有组件间隔的布局设置 + */ +public class MobileComponentLayoutIntervalPane extends XmlRelationedBasicPane { + private UISpinner componentIntervel; + + public MobileComponentLayoutIntervalPane(String xmlTag) { + super(xmlTag); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + UILabel intervalLabel = FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Component_Interval")); + + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p}; + double[] columnSize = {p, f}; + int[][] rowCount = {{1, 1}, {1, 1}}; + componentIntervel = new UISpinner(0, Integer.MAX_VALUE, 1, FormBodyPaddingAttrMark.DEFAULT_SIZE); + JPanel componentIntervelPane = UIComponentUtils.wrapWithBorderLayoutPane(componentIntervel); + + Component[][] components = new Component[][]{ + new Component[]{intervalLabel, componentIntervelPane} + }; + JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + centerPane.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, IntervalConstants.INTERVAL_L5, 0, 0)); + JPanel holder = FRGUIPaneFactory.createBorderLayout_S_Pane(); + holder.add(centerPane, BorderLayout.NORTH); + UIExpandablePane layoutExpandablePane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Layout"), 280, 20, holder); + this.add(layoutExpandablePane, BorderLayout.NORTH); + } + + @Override + protected String title4PopupWindow() { + return "ComponentIntervelPane"; + } + + public void update(RichStyleWidgetProvider marginWidget) { + + FormBodyPaddingAttrMark attrMark = marginWidget.getWidgetAttrMark(getXmlTag()); + attrMark = attrMark == null ? (FormBodyPaddingAttrMark) AttrMarkFactory.createAttrMark(getXmlTag()) : attrMark; + attrMark.setInterval((int) componentIntervel.getValue()); + marginWidget.addWidgetAttrMark(attrMark); + } + + public void populate(RichStyleWidgetProvider marginWidget) { + FormBodyPaddingAttrMark attrMark = marginWidget.getWidgetAttrMark(getXmlTag()); + if (attrMark != null) { + componentIntervel.setValueWithoutEvent(attrMark.getInterval()); + } + } +} \ No newline at end of file From 9498f198bc9a6ac4a0ae054554146d3a3bd5c01a Mon Sep 17 00:00:00 2001 From: zack Date: Sat, 16 Mar 2019 21:25:31 +0800 Subject: [PATCH 005/196] bugfix --- .../design/designer/creator/XWFitLayout.java | 4 +- .../mobile/BodyFitMobilePropertyUI.java | 22 ------- .../design/form/util/FormDesignerUtils.java | 12 ++++ .../mobile/BodyFitMobileDefinePane.java | 62 ------------------- .../designer/mobile/BodyMobileDefinePane.java | 40 +++++++++++- .../mobile/MobileWidgetDefinePane.java | 17 ++++- .../mobile/TabMobileWidgetDefinePane.java | 20 +----- 7 files changed, 68 insertions(+), 109 deletions(-) delete mode 100644 designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java delete mode 100644 designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java index a468ab7d8..8d3d75a35 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWFitLayout.java @@ -5,7 +5,7 @@ import com.fr.design.designer.beans.adapters.layout.FRFitLayoutAdapter; import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; -import com.fr.design.designer.properties.mobile.BodyFitMobilePropertyUI; +import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI; import com.fr.design.form.layout.FRFitLayout; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.mainframe.FormArea; @@ -1207,7 +1207,7 @@ public class XWFitLayout extends XLayoutContainer { @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { - return new WidgetPropertyUIProvider[]{ new BodyFitMobilePropertyUI(this)}; + return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(this)}; } @Override diff --git a/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java deleted file mode 100644 index a14e7fb0b..000000000 --- a/designer-form/src/main/java/com/fr/design/designer/properties/mobile/BodyFitMobilePropertyUI.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.fr.design.designer.properties.mobile; - -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.dialog.BasicPane; -import com.fr.design.widget.ui.designer.mobile.BodyFitMobileDefinePane; - - -/** - * 自适应对应body对应的移动端属性 - */ -public class BodyFitMobilePropertyUI extends BodyMobilePropertyUI { - - public BodyFitMobilePropertyUI(XLayoutContainer xwFitLayout) { - super(xwFitLayout); - } - - @Override - public BasicPane createWidgetAttrPane() { - return new BodyFitMobileDefinePane(getxCreator()); - } - -} diff --git a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java index 83a2b68f4..d976816f5 100644 --- a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java +++ b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java @@ -13,4 +13,16 @@ public class FormDesignerUtils { public static boolean isAppRelayout(FormDesigner designer) { return ((WFitLayout) designer.getRootComponent().toData()).isAppRelayout(); } + + /** + * body布局是否设置了绝对布局 + * + * @param designer + * @return + */ + public static boolean isBodyAbsolute(FormDesigner designer) { + WFitLayout root = ((WFitLayout) designer.getRootComponent().toData()); + return root.getBodyLayoutType() == com.fr.form.ui.container.WBodyLayoutType.ABSOLUTE; + } + } \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java deleted file mode 100644 index a2183b7d0..000000000 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyFitMobileDefinePane.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.fr.design.widget.ui.designer.mobile; - -import com.fr.base.iofile.attr.FormBodyPaddingAttrMark; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.WidgetPropertyPane; -import com.fr.design.widget.ui.designer.mobile.component.MobileComponentAdvancePane; -import com.fr.design.widget.ui.designer.mobile.component.MobileComponentLayoutIntervalPane; -import com.fr.form.ui.RichStyleWidgetProvider; - -import javax.swing.JPanel; -import java.awt.BorderLayout; - -/** - * Created by plough on 2018/2/1. - */ -public class BodyFitMobileDefinePane extends BodyMobileDefinePane { - private MobileComponentAdvancePane advancePane; - private MobileComponentLayoutIntervalPane intervalPane; - - public BodyFitMobileDefinePane(XCreator xCreator) { - super(xCreator); - } - - @Override - public void initPropertyGroups(Object source) { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - setDesigner(WidgetPropertyPane.getInstance().getEditingFormDesigner()); - this.add(createNorthPane(), BorderLayout.NORTH); - this.add(getMobileWidgetListPane(), BorderLayout.CENTER); - this.repaint(); - } - - private JPanel createNorthPane() { - JPanel holder = FRGUIPaneFactory.createBorderLayout_S_Pane(); - - advancePane = new MobileComponentAdvancePane(FormBodyPaddingAttrMark.XML_TAG); - intervalPane = new MobileComponentLayoutIntervalPane(FormBodyPaddingAttrMark.XML_TAG); - - holder.add(getMobilePropertyPane(), BorderLayout.NORTH); - //高级 - holder.add(advancePane, BorderLayout.CENTER); - //布局 - holder.add(intervalPane, BorderLayout.SOUTH); - return holder; - } - - @Override - public void populate(FormDesigner designer) { - super.populate(designer); - advancePane.populate((RichStyleWidgetProvider) getBodyCreator().toData()); - intervalPane.populate((RichStyleWidgetProvider) getBodyCreator().toData()); - } - - @Override - public void update() { - super.update(); - advancePane.update((RichStyleWidgetProvider) getBodyCreator().toData()); - intervalPane.update((RichStyleWidgetProvider) getBodyCreator().toData()); - } -} diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java index 329bb8f70..b91e1d7b6 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/BodyMobileDefinePane.java @@ -1,5 +1,6 @@ package com.fr.design.widget.ui.designer.mobile; +import com.fr.base.iofile.attr.FormBodyPaddingAttrMark; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; import com.fr.design.foldablepane.UIExpandablePane; @@ -10,6 +11,9 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.MobileWidgetListPane; import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.widget.ui.designer.mobile.component.MobileComponentAdvancePane; +import com.fr.design.widget.ui.designer.mobile.component.MobileComponentLayoutIntervalPane; +import com.fr.form.ui.RichStyleWidgetProvider; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WSortLayout; @@ -26,6 +30,8 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { private AttributeChangeListener changeListener; private UICheckBox appRelayoutCheck; private MobileWidgetListPane mobileWidgetListPane; + private MobileComponentAdvancePane advancePane; + private MobileComponentLayoutIntervalPane intervalPane; public BodyMobileDefinePane(XCreator xCreator) { this.bodyCreator = xCreator; @@ -51,7 +57,7 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { public void initPropertyGroups(Object source) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - this.add(getMobilePropertyPane(), BorderLayout.NORTH); + this.add(createNorthPane(), BorderLayout.NORTH); this.add(getMobileWidgetListPane(), BorderLayout.CENTER); this.repaint(); } @@ -80,6 +86,24 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { return new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Order"), 280, 20, panelWrapper); } + private JPanel createNorthPane() { + JPanel holder = FRGUIPaneFactory.createBorderLayout_S_Pane(); + holder.add(getMobilePropertyPane(), BorderLayout.NORTH); + + advancePane = new MobileComponentAdvancePane(FormBodyPaddingAttrMark.XML_TAG); + intervalPane = new MobileComponentLayoutIntervalPane(FormBodyPaddingAttrMark.XML_TAG); + //高级 + holder.add(advancePane, BorderLayout.CENTER); + //布局 + holder.add(intervalPane, BorderLayout.SOUTH); + + advancePane.setVisible(!shouldHidePadding(designer)); + intervalPane.setVisible(!shouldHidePadding(designer)); + + return holder; + } + + private void bindListeners2Widgets() { reInitAllListeners(); this.changeListener = new AttributeChangeListener() { @@ -117,12 +141,26 @@ public class BodyMobileDefinePane extends MobileWidgetDefinePane { // 数据 populate 完成后,再设置监听 this.bindListeners2Widgets(); this.addAttributeChangeListener(changeListener); + + advancePane.populate((RichStyleWidgetProvider) getBodyCreator().toData()); + intervalPane.populate((RichStyleWidgetProvider) getBodyCreator().toData()); } @Override public void update() { + boolean appRelayout = appRelayoutCheck.isSelected(); setAppRelayout(appRelayoutCheck.isSelected()); + boolean appPaddingVisible = appRelayout || !FormDesignerUtils.isBodyAbsolute(designer); + advancePane.setVisible(appPaddingVisible); + intervalPane.setVisible(appPaddingVisible); mobileWidgetListPane.updateToDesigner(); designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); + + if (advancePane.isVisible()) { + advancePane.update((RichStyleWidgetProvider) getBodyCreator().toData()); + } + if (intervalPane.isVisible()) { + intervalPane.update((RichStyleWidgetProvider) getBodyCreator().toData()); + } } } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java index ac4de096a..d44707181 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/MobileWidgetDefinePane.java @@ -1,5 +1,6 @@ package com.fr.design.widget.ui.designer.mobile; +import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; import com.fr.design.mainframe.FormDesigner; @@ -7,10 +8,10 @@ import javax.swing.*; /** * 所有移动端需要拓展的属性面板均继承此类 - * + *

* Created by fanglei on 2017/8/8. */ -public abstract class MobileWidgetDefinePane extends AbstractAttrNoScrollPane{ +public abstract class MobileWidgetDefinePane extends AbstractAttrNoScrollPane { //初始化panel数据再repaint public abstract void initPropertyGroups(Object source); @@ -28,11 +29,21 @@ public abstract class MobileWidgetDefinePane extends AbstractAttrNoScrollPane{ // 暂不需要此方法 @Override - protected void initContentPane() {} + protected void initContentPane() { + } // 暂不需要此方法 @Override protected JPanel createContentPane() { return new JPanel(); } + + /** + * 绝对布局且不勾选手机重布局 的时候不支持边距设置 + * + * @return + */ + public boolean shouldHidePadding(FormDesigner designer) { + return !FormDesignerUtils.isAppRelayout(designer) && FormDesignerUtils.isBodyAbsolute(designer); + } } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java index 77507685c..8a795b887 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/TabMobileWidgetDefinePane.java @@ -4,7 +4,6 @@ import com.fr.base.iofile.attr.FormTabPaddingAttrMark; import com.fr.design.constants.LayoutConstants; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; -import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; @@ -16,8 +15,6 @@ import com.fr.design.mainframe.widget.accessibles.AccessibleTemplateStyleEditor; import com.fr.design.mainframe.widget.accessibles.MobileTemplateStylePane; import com.fr.design.widget.ui.designer.mobile.component.MobileComponentAdvancePane; import com.fr.design.widget.ui.designer.mobile.component.MobileComponentLayoutIntervalPane; -import com.fr.form.ui.container.WBodyLayoutType; -import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.cardtag.mobile.MobileTemplateStyle; @@ -63,7 +60,7 @@ public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{label, templateStyleEditor}, {new UILabel()}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_LARGE); JPanel holder = FRGUIPaneFactory.createBorderLayout_S_Pane(); holder.add(jPanel, BorderLayout.NORTH); - if (!shouldHidePadding()) { + if (!shouldHidePadding(designer)) { advancePane = new MobileComponentAdvancePane(FormTabPaddingAttrMark.XML_TAG); intervalPane = new MobileComponentLayoutIntervalPane(FormTabPaddingAttrMark.XML_TAG); //高级 @@ -100,19 +97,4 @@ public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { intervalPane.update((WCardTagLayout) xCreator.toData()); } } - - // body是否是绝对布局 - private boolean isBodyAbsoluteRelayout() { - WFitLayout root = ((WFitLayout) designer.getRootComponent().toData()); - return root.getBodyLayoutType() == WBodyLayoutType.ABSOLUTE; - } - - /** - * 绝对布局且不勾选手机重布局 的时候不支持边距设置 - * - * @return - */ - private boolean shouldHidePadding() { - return !FormDesignerUtils.isAppRelayout(designer) && isBodyAbsoluteRelayout(); - } } From 7ff2d8ca71479e3a912d27de56e347cb9314266b Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Wed, 20 Mar 2019 15:14:09 +0800 Subject: [PATCH 006/196] =?UTF-8?q?REPORT-14869=2010.0.3=E5=9F=8B=E7=82=B9?= =?UTF-8?q?=20=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=A0=86=E6=A0=88=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=EF=BC=88=E8=87=B3=E5=A4=9A=E8=AE=B0=E5=BD=9515=E8=A1=8C?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/errorinfo/ErrorInfo.java | 10 ++++++++++ .../errorinfo/ErrorInfoLogAppender.java | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java index 052aaef9f..c16b035cf 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java @@ -25,6 +25,7 @@ public class ErrorInfo { private String templateid; private String logid; private String log; + private String stackTrace; public ErrorInfo(String username, String uuid, String activekey) { this.username = username; @@ -89,6 +90,14 @@ public class ErrorInfo { this.log = log; } + public String getStackTrace() { + return stackTrace; + } + + public void setStackTrace(String stackTrace) { + this.stackTrace = stackTrace; + } + private String dateToString(){ DateFormat df = FRContext.getDefaultValues().getDateTimeFormat(); return df.format(new Date()); @@ -107,6 +116,7 @@ public class ErrorInfo { jo.put("uploadtime", uploadtime); jo.put("logid", logid); jo.put("log", log); + jo.put("stackTrace", stackTrace); saveFileToCache(jo); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java index 8d4970a86..f0852abfb 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java @@ -30,6 +30,7 @@ import java.io.InputStream; public class ErrorInfoLogAppender extends AppenderSkeleton { private static final int ERROR_LEN = 8; + private static final int ERROR_STACK_TRACE = 15; // 缓存下不变的, 没必要频繁取. private String username; @@ -73,10 +74,25 @@ public class ErrorInfoLogAppender extends AppenderSkeleton { errorInfo.setTemplateid(templateid); errorInfo.setLog(msg); errorInfo.setLogid(logid); + errorInfo.setStackTrace(readStackTrace(event)); errorInfo.saveAsJSON(); } } + private String readStackTrace(LoggingEvent event) { + String[] s = event.getThrowableStrRep(); + StringBuilder sb = new StringBuilder(); + if(s != null){ + int len = s.length; + for (int i = 0; i < len; i++) { + if(i < ERROR_STACK_TRACE){ + sb.append(s[i]).append("\n"); + } + } + } + return sb.toString(); + } + private String readLogID(String log) { String errorCode = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_ErrorCode_Prefix"); // 报错信息国际化不规范, 有些是中文分号, 有些是英文 From 4bd2c218d2bf91980b9d95db8e04c5a2536081b8 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 3 Apr 2019 16:23:13 +0800 Subject: [PATCH 007/196] =?UTF-8?q?REPORT-15862=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E9=A2=84=E8=A7=88=E7=BB=8F=E7=99=BB=E5=BD=95=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E5=90=8E400?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/utils/DesignUtils.java | 203 ++++++------------ .../com/fr/design/utils/DesignerPort.java | 10 + 2 files changed, 73 insertions(+), 140 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/utils/DesignerPort.java diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java index 8687461a1..dab6e4f85 100644 --- a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java @@ -1,6 +1,5 @@ package com.fr.design.utils; -import com.fr.base.BaseUtils; import com.fr.base.FeedBackInfo; import com.fr.base.ServerConfig; import com.fr.design.DesignerEnvManager; @@ -14,8 +13,7 @@ import com.fr.general.FRFont; import com.fr.general.GeneralContext; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; -import com.fr.stable.CodeUtils; -import com.fr.stable.EncodeConstants; +import com.fr.stable.CommonCodeUtils; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.start.ServerStarter; @@ -33,32 +31,33 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; import java.net.ServerSocket; import java.net.Socket; import java.net.URI; -import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Enumeration; import java.util.Locale; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * Some util method of Designer */ public class DesignUtils { - private static final int MESSAGEPORT = 51462; - private static final int TIME_OUT = 20 * 1000; + private static int port = DesignerPort.MESSAGE_PORT; - public synchronized static void setPort(int port) { - DesignUtils.port = port; + private DesignUtils() { } - private static int port = MESSAGEPORT; - - private DesignUtils() { + public synchronized static void setPort(int port) { + DesignUtils.port = port; } + public static int getPort() { + return port; + } /** * 通过端口是否被占用判断设计器有没有启动 @@ -70,8 +69,7 @@ public class DesignUtils { try { new Socket("localhost", port); return true; - } catch (Exception exp) { - + } catch (Exception ignored) { } return false; } @@ -82,7 +80,7 @@ public class DesignUtils { * @param lines 命令行 */ public static void clientSend(String[] lines) { - if (lines != null && lines.length <= 0) { + if (lines == null || lines.length == 0) { return; } Socket socket = null; @@ -90,18 +88,21 @@ public class DesignUtils { try { socket = new Socket("localhost", port); - writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), EncodeConstants.ENCODING_UTF_8))); + writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8))); for (int i = 0; i < lines.length; i++) { writer.println(lines[i]); } - writer.flush(); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } finally { try { - writer.close(); - socket.close(); + if (writer != null) { + writer.close(); + } + if (socket != null) { + socket.close(); + } } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } @@ -114,47 +115,52 @@ public class DesignUtils { * @param startPort 端口 * @param suffixs 文件后缀 */ - public static void creatListeningServer(final int startPort, final String[] suffixs) { - Thread serverSocketThread = new Thread() { + public static void createListeningServer(final int startPort, final String[] suffixs) { + ExecutorService service = Executors.newSingleThreadExecutor(); + service.execute(new Runnable() { + @Override public void run() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(startPort); } catch (IOException e1) { - FineLoggerFactory.getLogger().error("Cannot create server socket on" + port); + FineLoggerFactory.getLogger().error("Cannot create server socket on " + port); } while (true) { try { - Socket socket = serverSocket.accept(); // 接收客户连接 - BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), EncodeConstants.ENCODING_UTF_8)); - String line = null; - while ((line = reader.readLine()) != null) { - if (line.startsWith("demo")) { - DesignerEnvManager.getEnvManager().setCurrentEnv2Default(); - ServerStarter.browserDemoURL(); - } else if (StringUtils.isNotEmpty(line)) { - File f = new File(line); - String path = f.getAbsolutePath(); - - boolean isMatch = false; - for (int i = 0; i < suffixs.length; i++) { - isMatch = isMatch || path.endsWith(suffixs[i]); - } - if (isMatch) { - DesignerContext.getDesignerFrame().openTemplate(new FileFILE(f)); + if (serverSocket != null) { + Socket socket = serverSocket.accept(); // 接收客户连接 + BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + if (line.startsWith("demo")) { + DesignerEnvManager.getEnvManager().setCurrentEnv2Default(); + ServerStarter.browserDemoURL(); + } else if (StringUtils.isNotEmpty(line)) { + File f = new File(line); + String path = f.getAbsolutePath(); + + boolean isMatch = false; + for (int i = 0; i < suffixs.length; i++) { + isMatch = isMatch || path.endsWith(suffixs[i]); + } + if (isMatch) { + DesignerContext.getDesignerFrame().openTemplate(new FileFILE(f)); + } } } + reader.close(); + socket.close(); + } else { + FineLoggerFactory.getLogger().error("Cannot create server socket on " + port); + break; } - - reader.close(); - socket.close(); - } catch (IOException e) { - + } catch (IOException ignored) { } } } - }; - serverSocketThread.start(); + }); + } /** @@ -278,19 +284,18 @@ public class DesignUtils { */ public static void visitEnvServerByParameters(String baseRoute, String[] names, String[] values) { int len = Math.min(ArrayUtils.getLength(names), ArrayUtils.getLength(values)); - String[] segs = new String[len]; + String[] nameValuePairs = new String[len]; for (int i = 0; i < len; i++) { - try { - //设计器里面据说为了改什么界面统一, 把分隔符统一用File.separator, 意味着在windows里面报表路径变成了\ - //以前的超链, 以及预览url什么的都是/, 产品组的意思就是用到的地方替换下, 真恶心. - String value = values[i].replaceAll("\\\\", "/"); - segs[i] = URLEncoder.encode(CodeUtils.cjkEncode(names[i]), EncodeConstants.ENCODING_UTF_8) + "=" + URLEncoder.encode(CodeUtils.cjkEncode(value), "UTF-8"); - } catch (UnsupportedEncodingException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + //设计器里面据说为了改什么界面统一, 把分隔符统一用File.separator, 意味着在windows里面报表路径变成了\ + //以前的超链, 以及预览url什么的都是/, 产品组的意思就是用到的地方替换下, 真恶心. + String value = values[i].replaceAll("\\\\", "/"); + // 两次 encode 支持中文和特殊符号,避免跳转登录后预览400报错 + nameValuePairs[i] = + CommonCodeUtils.encodeURIComponent(CommonCodeUtils.encodeURIComponent(names[i])) + + "=" + CommonCodeUtils.encodeURIComponent(CommonCodeUtils.encodeURIComponent(value)); } - String postfixOfUri = (segs.length > 0 ? "?" + StableUtils.join(segs, "&") : StringUtils.EMPTY); - + String postfixOfUri = (nameValuePairs.length > 0 ? "?" + StableUtils.join(nameValuePairs, "&") : StringUtils.EMPTY); + if (!WorkContext.getCurrent().isLocal()) { try { String urlPath = getWebBrowserPath(); @@ -305,8 +310,7 @@ public class DesignUtils { + "/" + web + "/" + ServerConfig.getInstance().getServletName() + baseRoute + postfixOfUri; ServerStarter.browserURLWithLocalEnv(url); - } catch (Throwable e) { - // + } catch (Throwable ignored) { } } } @@ -321,87 +325,6 @@ public class DesignUtils { return urlPath; } - //TODO:august:下个版本,要把下面的图片都放在一个preload文件夹下,表示可以预先加载。然后遍历一下就可以了,不用这么一个一个的写了 - - /** - * 预加载 - */ - public static void preLoadingImages() { - BaseUtils.readIcon("com/fr/design/images/custombtn/baobiaozhuti.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/baobiaozhuti_hover.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/baobiaozhuti_click.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/canshujiemian.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/canshujiemian_hover.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/canshujiemian_click.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/setting.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/setting_hover.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/setting_click.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/page.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/page_hover.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/page_click.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/form.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/form_hover.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/form_click.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/edit.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/edit_hover.png"); - BaseUtils.readIcon("com/fr/design/images/custombtn/edit_click.png"); - BaseUtils.readIcon("com/fr/base/images/oem/addworksheet.png"); - BaseUtils.readIcon("com/fr/design/images/sheet/addpolysheet.png"); - BaseUtils.readIcon("com/fr/base/images/oem/worksheet.png"); - BaseUtils.readIcon("com/fr/design/images/sheet/polysheet.png"); - BaseUtils.readIcon("com/fr/design/images/sheet/left_right_btn.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/cellPop.png"); - BaseUtils.readIcon("/com/fr/design/images/docking/right.gif"); - BaseUtils.readIcon("/com/fr/design/images/docking/left.gif"); - BaseUtils.readIcon("/com/fr/design/images/m_file/save.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/excel.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/pdf.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/word.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/svg.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/csv.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/text.png"); - BaseUtils.readIcon("/com/fr/design/images/m_web/datasource.png"); - BaseUtils.readIcon("/com/fr/design/images/m_report/webreportattribute.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/pageSetup.png"); - BaseUtils.readIcon("/com/fr/design/images/m_report/header.png"); - BaseUtils.readIcon("/com/fr/design/images/m_report/footer.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/saveAs.png"); - BaseUtils.readIcon("/com/fr/design/images/m_report/background.png"); - loadOtherImages(); - } - - - private static void loadOtherImages() { - BaseUtils.readIcon("/com/fr/design/images/m_report/reportWriteAttr.png"); - BaseUtils.readIcon("/com/fr/design/images/m_report/linearAttr.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/bindColumn.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/text.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/chart.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/image.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/bias.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/subReport.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/insertRow.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/insertColumn.png"); - BaseUtils.readIcon("/com/fr/design/images/m_format/highlight.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/hyperLink.png"); - BaseUtils.readIcon("/com/fr/design/images/m_edit/merge.png"); - BaseUtils.readIcon("/com/fr/design/images/m_edit/unmerge.png"); - BaseUtils.readIcon("/com/fr/design/images/m_file/export.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/cell.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/float.png"); - BaseUtils.readIcon("/com/fr/design/images/m_edit/undo.png"); - BaseUtils.readIcon("/com/fr/design/images/m_edit/redo.png"); - BaseUtils.readIcon("/com/fr/design/images/m_edit/cut.png"); - BaseUtils.readIcon("/com/fr/design/images/m_edit/paste.png"); - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/leftAlignment.png"); - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/centerAlignment.png"); - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/rightAlignment.png"); - BaseUtils.readIcon("/com/fr/design/images/m_format/noboder.png"); - BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png"); - BaseUtils.readIcon("/com/fr/design/images/m_insert/floatPop.png"); - } - - /** * 将用户反馈发送至服务器 * diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java b/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java new file mode 100644 index 000000000..08ea50382 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java @@ -0,0 +1,10 @@ +package com.fr.design.utils; + +public class DesignerPort { + + private DesignerPort() { + } + + public static final int MESSAGE_PORT = 51462; + public static final int DEBUG_MESSAGE_PORT = 51463; +} From 643ad5230c1352f147f1f17d86b523a60b1a68ad Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 3 Apr 2019 16:26:22 +0800 Subject: [PATCH 008/196] =?UTF-8?q?REPORT-15700=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E5=8F=A3=E5=90=AF=E5=8A=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/Designer.java | 57 +-------- .../fr/start/module/PreStartActivator.java | 108 ++++++++++++++---- .../fr/start/module/StartFinishActivator.java | 21 +--- 3 files changed, 89 insertions(+), 97 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index d262359dd..bd872e41a 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -3,7 +3,6 @@ package com.fr.start; import com.fr.base.BaseUtils; import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; @@ -28,14 +27,12 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.module.DesignModuleFactory; -import com.fr.design.utils.DesignUtils; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; @@ -43,17 +40,12 @@ import com.fr.log.FineLoggerFactory; import com.fr.module.Module; import com.fr.module.ModuleContext; import com.fr.runtime.FineRuntime; -import com.fr.stable.BuildContext; -import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.LifecycleFatalError; import com.fr.stable.xml.XMLTools; -import com.fr.start.fx.SplashFx; -import com.fr.start.jni.SplashMac; import com.fr.start.module.StartupArgs; -import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; import com.fr.workspace.WorkContext; @@ -69,8 +61,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; @@ -96,25 +86,9 @@ public class Designer extends BaseDesigner { * @param args 参数 */ public static void main(String[] args) { - + //启动运行时 FineRuntime.start(); - BuildContext.setBuildFilePath("/com/fr/stable/build.properties"); - // 如果端口被占用了 说明程序已经运行了一次,也就是说,已经建立一个监听服务器,现在只要给服务器发送命令就好了 - if (DesignUtils.isStarted()) { - DesignUtils.clientSend(args); - FineLoggerFactory.getLogger().error("Designer port not available."); - System.exit(0); - return; - } - - RestartHelper.deleteRecordFilesWhenStart(); - - preloadResource(); - - SplashContext.getInstance().registerSplash(createSplash()); - - SplashContext.getInstance().show(); Module designerRoot = ModuleContext.parseRoot("designer-startup.xml"); //传递启动参数 designerRoot.setSingleton(StartupArgs.class, new StartupArgs(args)); @@ -134,35 +108,6 @@ public class Designer extends BaseDesigner { } - private static void preloadResource() { - ExecutorService service = Executors.newCachedThreadPool(); - - service.submit(new Runnable() { - @Override - public void run() { - new ImagePreLoader(); - } - }); - - service.submit(new Runnable() { - @Override - public void run() { - TemplateInfoCollector.getInstance(); - } - }); - service.shutdown(); - } - - private static SplashStrategy createSplash() { - // 这里可以开接口加载自定义启动画面 - if (OperatingSystem.isWindows()) { - return new SplashFx(); - } else if (OperatingSystem.isMacOS()) { - return new SplashMac(); - } - return new SplashFx(); - } - public Designer(String[] args) { super(args); } diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index c4eea3bad..073d24cb0 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -2,63 +2,99 @@ package com.fr.start.module; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.utils.DesignUtils; +import com.fr.design.utils.DesignerPort; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; +import com.fr.log.FineLoggerFactory; import com.fr.module.Activator; +import com.fr.stable.BuildContext; +import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.start.SplashContext; +import com.fr.start.SplashStrategy; +import com.fr.start.fx.SplashFx; +import com.fr.start.jni.SplashMac; +import com.fr.start.preload.ImagePreLoader; import java.io.File; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * Created by juhaoyu on 2018/1/8. */ public class PreStartActivator extends Activator { - private static final int MESSAGE_PORT = 51462; - - private static final int DEBUG_PORT = 51463; - @Override public void start() { - CloudCenter.getInstance(); - if (checkMultiStart()) { + BuildContext.setBuildFilePath("/com/fr/stable/build.properties"); + // 如果端口被占用了 说明程序已经运行了一次,也就是说,已经建立一个监听服务器,现在只要给服务器发送命令就好了 + final String[] args = getModule().upFindSingleton(StartupArgs.class).get(); + // 检查是否是-Ddebug = true 启动 并切换对应的端口以及环境配置文件 + checkDebugStart(); + if (DesignUtils.isStarted()) { + DesignUtils.clientSend(args); + FineLoggerFactory.getLogger().info("The Designer Has Been Started"); + System.exit(0); return; } + + RestartHelper.deleteRecordFilesWhenStart(); + + preloadResource(); + + SplashContext.getInstance().registerSplash(createSplash()); + + SplashContext.getInstance().show(); + + // 完成初始化 + //noinspection ResultOfMethodCallIgnored + CloudCenter.getInstance(); + + // 创建监听服务 + DesignUtils.createListeningServer(DesignUtils.getPort(), startFileSuffix()); + initLanguage(); } - private boolean checkMultiStart() { + @Override + public void stop() { + } + + private void checkDebugStart() { if (isDebug()) { setDebugEnv(); } else { - DesignUtils.setPort(getStartPort()); + DesignUtils.setPort(DesignUtils.getPort()); } - - return false; } - private int getStartPort() { - - return MESSAGE_PORT; - } - - //在VM options里加入-Ddebug=true激活 + /** + * 在VM options里加入-Ddebug=true激活 + * + * @return isDebug + */ private boolean isDebug() { - return ComparatorUtils.equals("true", System.getProperty("debug")); } //端口改一下,环境配置文件改一下。便于启动两个设计器,进行对比调试 private void setDebugEnv() { - - DesignUtils.setPort(DEBUG_PORT); - DesignerEnvManager.setEnvFile(new File(ProductConstants.getEnvHome() + File.separator + ProductConstants.APP_NAME + "Env_debug.xml")); + DesignUtils.setPort(DesignerPort.DEBUG_MESSAGE_PORT); + String debugXMlFilePath = StableUtils.pathJoin( + ProductConstants.getEnvHome(), + ProductConstants.APP_NAME + "Env_debug.xml" + ); + DesignerEnvManager.setEnvFile( + new File(debugXMlFilePath)); } private void initLanguage() { @@ -66,8 +102,36 @@ public class PreStartActivator extends Activator { GeneralContext.setLocale(DesignerEnvManager.getEnvManager(false).getLanguage()); } - @Override - public void stop() { + private String[] startFileSuffix() { + return new String[]{".cpt", ".xls", ".xlsx", ".frm", ".form", ".cht", ".chart"}; + } + private static void preloadResource() { + ExecutorService service = Executors.newCachedThreadPool(); + + service.submit(new Runnable() { + @Override + public void run() { + new ImagePreLoader(); + } + }); + + service.submit(new Runnable() { + @Override + public void run() { + TemplateInfoCollector.getInstance(); + } + }); + service.shutdown(); + } + + private static SplashStrategy createSplash() { + // 这里可以开接口加载自定义启动画面 + if (OperatingSystem.isWindows()) { + return new SplashFx(); + } else if (OperatingSystem.isMacOS()) { + return new SplashMac(); + } + return new SplashFx(); } } diff --git a/designer-realize/src/main/java/com/fr/start/module/StartFinishActivator.java b/designer-realize/src/main/java/com/fr/start/module/StartFinishActivator.java index b9e165b26..41f662a88 100644 --- a/designer-realize/src/main/java/com/fr/start/module/StartFinishActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/StartFinishActivator.java @@ -1,36 +1,19 @@ package com.fr.start.module; import com.fr.design.fun.impl.GlobalListenerProviderManager; -import com.fr.design.utils.DesignUtils; import com.fr.module.Activator; /** * Created by juhaoyu on 2018/1/8. */ public class StartFinishActivator extends Activator { - - private static final int MESSAGE_PORT = 51462; - + @Override public void start() { - - DesignUtils.creatListeningServer(getStartPort(), startFileSuffix()); GlobalListenerProviderManager.getInstance().init(); } - - private int getStartPort() { - - return MESSAGE_PORT; - } - - - private String[] startFileSuffix() { - - return new String[]{".cpt", ".xls", ".xlsx", ".frm", ".form", ".cht", ".chart"}; - } - + @Override public void stop() { - } } From 5e9f60c5d7b9a50b5e34239611935e6325051257 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Fri, 5 Apr 2019 09:22:25 +0800 Subject: [PATCH 009/196] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8F=96=E5=A0=86?= =?UTF-8?q?=E6=A0=88=E8=AE=B0=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/errorinfo/ErrorInfoLogAppender.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java index f0852abfb..bcdea3e5a 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java @@ -82,12 +82,10 @@ public class ErrorInfoLogAppender extends AppenderSkeleton { private String readStackTrace(LoggingEvent event) { String[] s = event.getThrowableStrRep(); StringBuilder sb = new StringBuilder(); - if(s != null){ - int len = s.length; + if (s != null) { + int len = Math.min(s.length, ERROR_STACK_TRACE); for (int i = 0; i < len; i++) { - if(i < ERROR_STACK_TRACE){ - sb.append(s[i]).append("\n"); - } + sb.append(s[i]).append("\n"); } } return sb.toString(); From 633c0c67dfee381365d522d22e0f1399c4aea2be Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Fri, 5 Apr 2019 09:28:31 +0800 Subject: [PATCH 010/196] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=9F=8B=E7=82=B9=E5=8F=8A=E5=9B=9E=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/InformationCollector.java | 262 +----------------- .../SendDataToCloudProvider.java | 30 ++ .../impl/AbstractSendDataToCloud.java | 247 +++++++++++++++++ .../impl/FocusPointMessageUploader.java | 86 ++++++ .../utils/MessageCollectUtils.java | 69 +++++ 5 files changed, 439 insertions(+), 255 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index df9b1b556..9d04cc185 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -7,6 +7,7 @@ import com.fr.base.FRContext; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; +import com.fr.design.mainframe.messagecollect.impl.FocusPointMessageUploader; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; @@ -15,20 +16,13 @@ import com.fr.general.DesUtils; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; import com.fr.general.http.HttpToolbox; -import com.fr.intelli.record.FocusPoint; -import com.fr.intelli.record.MetricRegistry; import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.query.QueryFactory; -import com.fr.stable.query.condition.QueryCondition; -import com.fr.stable.query.data.DataList; -import com.fr.stable.query.restriction.RestrictionFactory; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; @@ -53,8 +47,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; -import java.util.Map; - /** * @author neil * @@ -64,7 +56,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { // 24小时上传一次 private static final long DELTA = 24 * 3600 * 1000L; - private static final long SEND_DELAY = 300 * 1000L; + private static final long SEND_DELAY = 30 * 1000L; private static final String FILE_NAME = "fr.info"; private static final String XML_START_STOP_LIST = "StartStopList"; private static final String XML_START_STOP = "StartStop"; @@ -78,24 +70,6 @@ public class InformationCollector implements XMLReadable, XMLWriter { private static final String XML_KEY = "ActiveKey"; private static final String XML_OS = "OS"; - public static final String TABLE_NAME = "fr_functionrecord"; - public static final String FUNC_COLUMNNAME = "func"; - public static final String COLUMN_TIME = "time"; - public static final String TABLE_FUNCTION_RECORD = "function.record"; - private static final String ATTR_ID = "id"; - private static final String ATTR_TEXT = "text"; - private static final String ATTR_SOURCE = "source"; - private static final String ATTR_TIME = "time"; - private static final String ATTR_TIMES = "times"; - private static final String ATTR_TITLE = "title"; - private static final String ATTR_USER_NAME = "username"; - private static final String ATTR_UUID = "uuid"; - private static final String ATTR_ITEMS = "items"; - private static final String ATTR_FUNCTION_ARRAY = "functionArray"; - private static final int MAX_EACH_REQUEST_RECORD_COUNT = 200; - private static final int PAGE_SIZE = 200; - private long totalCount = -1; - private static InformationCollector collector; //启动时间与关闭时间列表 @@ -204,141 +178,9 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - private void sendFunctionsInfo(){ - Date current = new Date(); - long lastTime = getLastTimeMillis(); - long currentTime = current.getTime(); - if (currentTime - lastTime <= DELTA) { - return; - } - FineLoggerFactory.getLogger().info("Start sent function records to the cloud center..."); - queryAndSendOnePageFunctionContent(currentTime, lastTime, 0); - long page = (totalCount/PAGE_SIZE) + 1; - for(int i=1; i focusPoints = MetricRegistry.getMetric().find(FocusPoint.class,condition); - //第一次查询获取总记录数 - if(page == 0){ - totalCount = focusPoints.getTotalCount(); - } - sendThisPageFunctionContent(focusPoints); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private void sendThisPageFunctionContent(DataList focusPoints) { - String url = CloudCenter.getInstance().acquireUrlByKind(TABLE_FUNCTION_RECORD); - try { - JSONObject jsonObject = dealWithSendFunctionContent(focusPoints); - sendFunctionRecord(url, jsonObject); - } catch (JSONException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private JSONObject dealWithSendFunctionContent(DataList focusPoints) throws JSONException { - JSONObject jsonObject = new JSONObject(); - Map map = new HashMap<>(); - if(!focusPoints.isEmpty()){ - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - String bbsUserName = MarketConfig.getInstance().getBbsUsername(); - String uuid = envManager.getUUID(); - jsonObject.put(ATTR_UUID, uuid); - jsonObject.put(ATTR_USER_NAME, bbsUserName); - for(FocusPoint focusPoint : focusPoints.getList()) { - FunctionRecord functionRecord = getOneRecord(focusPoint); - if (map.containsKey(focusPoint.getId())) { - int times = ((FunctionRecord)map.get(focusPoint.getId())).getTimes() + 1; - functionRecord.setTimes(times); - map.put(focusPoint.getId(), functionRecord); - } else { - map.put(focusPoint.getId(), functionRecord); - } - } - jsonObject.put(ATTR_ITEMS, mapToJSONArray(map)); - } - return jsonObject; - } - - private JSONArray mapToJSONArray(Map map) throws JSONException { - JSONArray jsonArray = new JSONArray(); - for(String keys : map.keySet()){ - FunctionRecord functionRecord = (FunctionRecord)map.get(keys); - JSONObject jo = new JSONObject(); - jo.put(ATTR_ID, functionRecord.getId()); - jo.put(ATTR_TEXT, functionRecord.getText()); - jo.put(ATTR_SOURCE, functionRecord.getSource()); - jo.put(ATTR_TIME, functionRecord.getTime()); - jo.put(ATTR_TITLE, functionRecord.getTitle()); - jo.put(ATTR_TIMES, functionRecord.getTimes()); - jsonArray.put(jo); - } - return jsonArray; - } - - private void sendFunctionRecord(String url, JSONObject record) { - boolean success = false; - try { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", record); - String res = HttpToolbox.post(url, para); - success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - if (success) { - this.lastTime = dateToString(); - } else { - FineLoggerFactory.getLogger().error("Error occured when sent function records to the cloud center."); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private FunctionRecord getOneRecord(FocusPoint focusPoint) { - FunctionRecord functionRecord = new FunctionRecord(); - functionRecord.setId(focusPoint.getId() == null?StringUtils.EMPTY : focusPoint.getId()); - functionRecord.setText(focusPoint.getText() == null?StringUtils.EMPTY : focusPoint.getText()); - functionRecord.setSource(focusPoint.getSource()); - functionRecord.setTime(focusPoint.getTime().getTime()); - functionRecord.setTitle(focusPoint.getTitle() == null?StringUtils.EMPTY : focusPoint.getTitle()); - functionRecord.setUsername(MarketConfig.getInstance().getBbsUsername() == null?StringUtils.EMPTY : MarketConfig.getInstance().getBbsUsername()); - functionRecord.setUuid(DesignerEnvManager.getEnvManager().getUUID() == null?StringUtils.EMPTY : DesignerEnvManager.getEnvManager().getUUID()); - return functionRecord; - } - - /** - * 收集开始使用时间,发送信息 - */ + /** + * 收集开始使用时间,发送信息 + */ public void collectStartTime(){ this.current.setStartDate(dateToString()); @@ -360,8 +202,8 @@ public class InformationCollector implements XMLReadable, XMLWriter { } catch (InterruptedException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } - sendUserInfo(); - sendFunctionsInfo(); + sendUserInfo(); + FocusPointMessageUploader.getInstance().sendToCloudCenter(); TemplateInfoCollector.getInstance().sendTemplateInfo(); ErrorInfoUploader.getInstance().sendErrorInfo(); } @@ -534,94 +376,4 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - - private class FunctionRecord implements Comparable{ - private String id; - private String text; - private int source; - private long time; - private int times = 1; - private String title; - private String username; - private String uuid; - - public FunctionRecord(){ - - } - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public int getTimes() { - return times; - } - - public void setTimes(int times) { - this.times = times; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - @Override - public int compareTo(Object o) { - FunctionRecord functionRecord = (FunctionRecord) o; - if(this.getId().equals((functionRecord.getId())) && this.getText().equals(functionRecord.getText()) - && this.getSource() == functionRecord.getSource() && this.getTime() == functionRecord.getTime() - && this.getTitle().equals(functionRecord.getTitle()) && this.getUsername().equals(functionRecord.getUsername()) - && this.getUuid().equals(functionRecord.getUuid())){ - return 0; - } - return 1; - } - } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java new file mode 100644 index 000000000..187b72f92 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java @@ -0,0 +1,30 @@ +package com.fr.design.mainframe.messagecollect; + +import com.fr.stable.query.data.DataList; + +/** + * @author alex sung + * @date 2019/3/22 + */ +public interface SendDataToCloudProvider { + + /** + * 获取要回传的数据 + * @param currentTime 当前时间 + * @param lastTime 上次回传时间 + * @param tClass 埋点对象类型 + * @throws Exception 取数过程中可能的异常 + */ + void getData(long currentTime, long lastTime, Class tClass) throws Exception; + + /** + * @param points 从swift获取的埋点数据 + * @throws Exception 解析或存储临时文件时可能的异常 + */ + void dealWithData(DataList points) throws Exception; + + /** + * 回传Zip到云中心 + */ + void sendToCloudCenter(); +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java new file mode 100644 index 000000000..c611fc060 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java @@ -0,0 +1,247 @@ +package com.fr.design.mainframe.messagecollect.impl; + +import com.fr.design.mainframe.messagecollect.SendDataToCloudProvider; +import com.fr.general.CloudCenter; +import com.fr.general.IOUtils; +import com.fr.general.http.HttpRequestType; +import com.fr.general.http.HttpToolbox; +import com.fr.intelli.record.MetricRegistry; +import com.fr.json.JSONException; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.CommonUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.query.QueryFactory; +import com.fr.stable.query.condition.QueryCondition; +import com.fr.stable.query.data.DataList; +import com.fr.stable.query.restriction.RestrictionFactory; +import com.fr.stable.xml.XMLTools; +import com.fr.stable.xml.XMLable; +import com.fr.third.org.apache.http.entity.mime.MultipartEntityBuilder; +import com.fr.third.org.apache.http.entity.mime.content.FileBody; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; + +/** + * @author alex sung + * @date 2019/3/22 + */ +public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider, XMLable { + + private static final String INTELLI_OPERATION_URL = "intelli.operation.url"; + private static final String OPERATION_URL = "https://cloud.fanruan.com/config/protect/operation"; + private static final String ATTR_SIGNATURE = "signature"; + private static final String ATTR_KEY = "key"; + private static final String FILE_NAME = "messagecollect.info"; + private static final String COLUMN_TIME = "time"; + + protected String lastTime; + private static final int PAGE_SIZE = 200; + private long totalCount = -1; + protected String fileName; + protected String pathName; + protected String folderName; + + public String getFolderName() { + return folderName; + } + + public void setFolderName(String folderName) { + this.folderName = folderName; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getPathName() { + return pathName; + } + + public void setPathName(String pathName) { + this.pathName = pathName; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public void saveLastTime() { + try { + FileOutputStream out = new FileOutputStream(getLastTimeFile()); + XMLTools.writeOutputStreamXML(this, out); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage()); + } + } + + public static File getLastTimeFile() { + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), FILE_NAME)); + } + + @Override + public void getData(long currentTime, long lastTime, Class tClass) { + queryAndSendOnePageFunctionContent(currentTime, lastTime, 0, tClass); + long page = (totalCount / PAGE_SIZE) + 1; + for (int i = 1; i < page; i++) { + queryAndSendOnePageFunctionContent(currentTime, lastTime, i, tClass); + } + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + private void queryAndSendOnePageFunctionContent(long current, long last, int page, Class tClass) { + QueryCondition condition = QueryFactory.create() + .skip(page * PAGE_SIZE) + .count(PAGE_SIZE) + .addSort(COLUMN_TIME, true) + .addRestriction(RestrictionFactory.lte(COLUMN_TIME, current)) + .addRestriction(RestrictionFactory.gte(COLUMN_TIME, last)); + try { + DataList points = MetricRegistry.getMetric().find(tClass, condition); + //第一次查询获取总记录数 + if (page == 0) { + totalCount = points.getTotalCount(); + } + dealWithData(points); + + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + @Override + public void dealWithData(DataList tDataList) throws Exception { + generateThisPageFile(tDataList); + } + + private void generateThisPageFile(DataList points) { + File file = null; + try { + JSONObject jsonObject = dealWithSendFunctionContent(points); + //生成json文件 + generateFile(jsonObject); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + public abstract JSONObject dealWithSendFunctionContent(DataList focusPoints); + + /** + * 生成zip并发送zip文件 + * @param pathName zip文件路径 + */ + protected void sendZipFile(String pathName) { + + File file = null; + try { + file = generateZipFile(pathName); + if (file != null) { + uploadFile(file, file.getName()); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return; + } + deleteFileAndZipFile(file, pathName); + } + + private File generateZipFile(String pathName) { + File zipFile = null; + try { + File file = new File(pathName); + zipFile = new File(pathName + ".zip"); + InputStream input = null; + java.util.zip.ZipOutputStream zipOut = null; + zipOut = new java.util.zip.ZipOutputStream(new FileOutputStream(zipFile)); + int temp = 0; + if (file.isDirectory()) { + File lists[] = file.listFiles(); + for (int i = 0; i < lists.length; i++) { + input = new FileInputStream(lists[i]); + zipOut.putNextEntry(new ZipEntry(file.getName() + + File.separator + lists[i].getName())); + while ((temp = input.read()) != -1) { + zipOut.write(temp); + } + input.close(); + } + } + zipOut.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return zipFile; + } + + private void generateFile(JSONObject jsonObject) { + try { + String content = jsonObject.toString(); + File file = new File(pathName + ".json"); + StableUtils.makesureFileExist(file); + FileOutputStream out = new FileOutputStream(file); + InputStream in = new ByteArrayInputStream(content.getBytes(EncodeConstants.ENCODING_UTF_8)); + IOUtils.copyBinaryTo(in, out); + out.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private static void uploadFile(File file, String keyFileName) throws IOException { + String url = generateSignedUploadUrl(keyFileName); + MultipartEntityBuilder builder = MultipartEntityBuilder.create() + .addPart("file", new FileBody(file)); + Map headers = new HashMap(); + headers.put("Content-Type", "application/zip"); + HttpToolbox.upload(url, builder, Charset.forName("utf-8"), headers, HttpRequestType.PUT); + } + + + + private void deleteFileAndZipFile(File zipFile, String pathName) { + File file = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), pathName)); + CommonUtils.deleteFile(file); + CommonUtils.deleteFile(zipFile); + } + + private static String generateSignedUploadUrl(String fileKeyName) throws IOException { + String url = CloudCenter.getInstance().acquireUrlByKind(INTELLI_OPERATION_URL, OPERATION_URL); + Map parameters = new HashMap(); + parameters.put(ATTR_KEY, fileKeyName); + parameters.put(ATTR_SIGNATURE, String.valueOf(CommonUtils.signature())); + String responseText = HttpToolbox.get(url, parameters); + try { + JSONObject data = new JSONObject(responseText); + if ("success".equals(data.optString("status"))) { + return data.optString("url"); + } + } catch (JSONException e) { + FineLoggerFactory.getLogger().error("Illegal response text."); + } + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java new file mode 100644 index 000000000..15dc8f971 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -0,0 +1,86 @@ +package com.fr.design.mainframe.messagecollect.impl; + +import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; +import com.fr.intelli.record.FocusPoint; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.query.data.DataList; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import java.util.Date; +import java.util.UUID; + +/** + * @author alex sung + * @date 2019/3/22 + */ +public class FocusPointMessageUploader extends AbstractSendDataToCloud { + + private static final String TAG = "FocusPointMessageTag"; + private static final String SEPARATOR = "_"; + private static final String FOCUS_POINT_VERSION = "FocusPoint1003_"; + private static volatile FocusPointMessageUploader instance; + + public static FocusPointMessageUploader getInstance() { + if (instance == null) { + synchronized (FocusPointMessageUploader.class) { + if (instance == null) { + instance = new FocusPointMessageUploader(); + } + } + } + return instance; + } + + @Override + public JSONObject dealWithSendFunctionContent(DataList focusPoints) { + return new JSONObject(); + } + + @Override + public void sendToCloudCenter() { + MessageCollectUtils.readXMLFile(instance, getLastTimeFile()); + long currentTime = new Date().getTime(); + long lastTIme = MessageCollectUtils.getLastTimeMillis(lastTime); + try { + generatePath(); + getData(currentTime, lastTIme, FocusPoint.class); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + sendZipFile(getFolderName()); + saveLastTime(); + } + + @Override + public void readXML(XMLableReader reader) { + if (reader.isAttr()) { + this.setLastTime(reader.getAttrAsString("focusPointLastTime", null)); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(TAG); + writer.attr("focusPointLastTime", lastTime); + writer.end(); + } + + private void generatePath(){ + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + String bbsUserName = MarketConfig.getInstance().getBbsUsername(); + String uuid = envManager.getUUID(); + //文件夹名称的格式是: "FocusPoint1003_" + uuid_bbsUserName_randomUuid,均以下划线分隔 + StringBuilder sb = new StringBuilder(); + sb.append(FOCUS_POINT_VERSION).append(uuid).append(SEPARATOR).append(bbsUserName).append(SEPARATOR).append(UUID.randomUUID()); + + setFileName(String.valueOf(UUID.randomUUID())); + setPathName(StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString(), getFileName())); + setFolderName(StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString())); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java new file mode 100644 index 000000000..721e42741 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java @@ -0,0 +1,69 @@ +package com.fr.design.mainframe.messagecollect.utils; + +import com.fr.base.FRContext; +import com.fr.general.DateUtils; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.EncodeConstants; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.text.DateFormat; +import java.util.Date; + +/** + * @author alex sung + * @date 2019/3/26 + */ +public class MessageCollectUtils { + + public static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { + InputStream is = new FileInputStream(xmlFile); + return IOUtils.inputStream2String(is); + } + + public static void readXMLFile(XMLReadable xmlReadable, File xmlFile) { + if (xmlFile == null || !xmlFile.exists()) { + return; + } + String charset = EncodeConstants.ENCODING_UTF_8; + try { + String fileContent = MessageCollectUtils.getFileContent(xmlFile); + InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); + InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); + XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); + if (xmlReader != null) { + xmlReader.readXMLObject(xmlReadable); + } + xmlInputStream.close(); + } catch (IOException | XMLStreamException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + public static String newDateToString() { + DateFormat df = FRContext.getDefaultValues().getDateTimeFormat(); + return df.format(new Date()); + } + + public static long getLastTimeMillis(String lastTime) { + if (StringUtils.isEmpty(lastTime)) { + return 0; + } + try { + return DateUtils.string2Date(lastTime, true).getTime(); + } catch (Exception e) { + return -1; + } + } +} From 9312b4ea4c27cabcc9a5e09641c6eea673df4542 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Fri, 5 Apr 2019 09:32:03 +0800 Subject: [PATCH 011/196] fix --- .../main/java/com/fr/design/mainframe/InformationCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index 9d04cc185..7a3966c17 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -56,7 +56,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { // 24小时上传一次 private static final long DELTA = 24 * 3600 * 1000L; - private static final long SEND_DELAY = 30 * 1000L; + private static final long SEND_DELAY = 300 * 1000L; private static final String FILE_NAME = "fr.info"; private static final String XML_START_STOP_LIST = "StartStopList"; private static final String XML_START_STOP = "StartStop"; From d91986a8a9884f833690120522e8add18f4c99b1 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 8 Apr 2019 14:41:12 +0800 Subject: [PATCH 012/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E2=80=9C=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8E=A8=E9=80=81=E6=9B=B4=E6=96=B0=E2=80=9D=E5=BC=80?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 30 ++++++++++++++++++- .../design/actions/file/PreferencePane.java | 17 +++++++++-- .../fr/design/layout/FRGUIPaneFactory.java | 28 +++++++++++++++-- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index dba3141b7..f54d0610f 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -139,6 +139,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { //记录当前激活码的在线激活状态. private int activeKeyStatus = -1; private boolean joinProductImprove = true; + private boolean automaticPushUpdate = true; //最近使用的颜色 private ColorSelectConfigManager configManager = new ColorSelectConfigManager(); /** @@ -689,6 +690,30 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.joinProductImprove = joinProductImprove; } + /** + * 是否开启自动更新推送 + * + * @return 是否开启自动更新推送 + */ + public boolean isAutomaticPushUpdate() { + return automaticPushUpdate; + } + + /** + * 设置开启/关闭自动更新推送 + */ + public void setAutomaticPushUpdate(boolean automaticPushUpdate) { + this.automaticPushUpdate = automaticPushUpdate; + } + + /** + * @return "自动更新推送"选项是否生效 + */ + public boolean isAutomaticPushUpdateValid() { + // 远程设计和非中文环境,都不生效 + return WorkContext.getCurrent().isLocal() && GeneralContext.isChineseEnv(); + } + /** * 是否磁盘空间参数 * @@ -1534,6 +1559,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setOracleSystemSpace(reader.getAttrAsBoolean("useOracleSystemSpace", true)); this.setCachingTemplateLimit(reader.getAttrAsInt("cachingTemplateLimit", CACHINGTEMPLATE_LIMIT)); this.setJoinProductImprove(reader.getAttrAsBoolean("joinProductImprove", true)); + this.setAutomaticPushUpdate(reader.getAttrAsBoolean("automaticPushUpdate", true)); this.setImageCompress(reader.getAttrAsBoolean("imageCompress", true)); this.setAutoBackUp(reader.getAttrAsBoolean("autoBackUp", true)); this.setTemplateTreePaneExpanded(reader.getAttrAsBoolean("templateTreePaneExpanded", false)); @@ -1771,6 +1797,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (!this.isJoinProductImprove()) { writer.attr("joinProductImprove", this.isJoinProductImprove()); } + if (!this.isAutomaticPushUpdate()) { + writer.attr("automaticPushUpdate", this.isAutomaticPushUpdate()); + } if (!this.isImageCompress()) { writer.attr("imageCompress", this.isImageCompress()); } @@ -1898,5 +1927,4 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .attr("undoLimit", this.getUndoLimit()) .end(); } - } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 9e4b7c2c0..85d08e5eb 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -23,7 +23,6 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; @@ -132,6 +131,7 @@ public class PreferencePane extends BasicPane { private UICheckBox oracleSpace; private UISpinner cachingTemplateSpinner; private UICheckBox joinProductImprove; + private UICheckBox automaticPushUpdate; public PreferencePane() { this.initComponents(); @@ -149,7 +149,6 @@ public class PreferencePane extends BasicPane { jtabPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Advanced"), advancePane); contentPane.add(jtabPane, BorderLayout.NORTH); - createFunctionPane(generalPane); createEditPane(generalPane); createGuiOfGridPane(generalPane); @@ -171,10 +170,15 @@ public class PreferencePane extends BasicPane { oracleSpace = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Show_All_Oracle_Tables")); oraclePane.add(oracleSpace); - JPanel improvePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); + JPanel improvePane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); improvePane.add(joinProductImprove); + if (DesignerEnvManager.getEnvManager().isAutomaticPushUpdateValid()) { + automaticPushUpdate = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); + improvePane.add(automaticPushUpdate); + } + JPanel spaceUpPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); spaceUpPane.add(oraclePane, BorderLayout.NORTH); spaceUpPane.add(createMemoryPane(), BorderLayout.CENTER); @@ -553,6 +557,10 @@ public class PreferencePane extends BasicPane { this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); + + if (designerEnvManager.isAutomaticPushUpdateValid()) { + this.automaticPushUpdate.setSelected(designerEnvManager.isAutomaticPushUpdate()); + } } private int chooseCase(int sign) { @@ -612,6 +620,9 @@ public class PreferencePane extends BasicPane { designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); designerEnvManager.setJoinProductImprove(this.joinProductImprove.isSelected()); + if (designerEnvManager.isAutomaticPushUpdateValid()) { + designerEnvManager.setAutomaticPushUpdate(this.automaticPushUpdate.isSelected()); + } designerEnvManager.setUndoLimit(maxUndoLimit.getSelectedIndex() * SELECTED_INDEX_5); if (maxUndoLimit.getSelectedIndex() == SELECTED_INDEX_5) { diff --git a/designer-base/src/main/java/com/fr/design/layout/FRGUIPaneFactory.java b/designer-base/src/main/java/com/fr/design/layout/FRGUIPaneFactory.java index db48cf995..d906cc39e 100644 --- a/designer-base/src/main/java/com/fr/design/layout/FRGUIPaneFactory.java +++ b/designer-base/src/main/java/com/fr/design/layout/FRGUIPaneFactory.java @@ -3,8 +3,16 @@ package com.fr.design.layout; import com.fr.design.border.UITitledBorder; import com.fr.design.gui.ilable.UILabel; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.LayoutManager; public class FRGUIPaneFactory { @@ -143,6 +151,22 @@ public class FRGUIPaneFactory { return jp; } + /** + * 创建一个带标题边框面板,垂直居左布局 + * + * @param string 边框标题 + * @return JPanel对象 + */ + public static JPanel createVerticalTitledBorderPane(String string) { + JPanel jp = new JPanel(); + UITitledBorder explainBorder = UITitledBorder.createBorderWithTitle(string); + jp.setBorder(explainBorder); + VerticalFlowLayout layout = new VerticalFlowLayout(); + layout.setAlignLeft(true); + jp.setLayout(layout); + return jp; + } + /** * 创建一个带标题边框面板并且居中显示 * From c9f4d2ae97f426434401dea281261fd3628f62dc Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 8 Apr 2019 16:53:47 +0800 Subject: [PATCH 013/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E6=8C=81=E4=B9=85?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 42 +++++------ .../design/actions/file/PreferencePane.java | 18 ++--- .../push/DesignerPushUpdateConfigManager.java | 61 ++++++++++++++++ .../push/DesignerPushUpdateManager.java | 39 ++++++++++ .../DesignerPushUpdateConfigManagerTest.java | 72 +++++++++++++++++++ 5 files changed, 198 insertions(+), 34 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java create mode 100644 designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index f54d0610f..17a101b21 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -14,6 +14,7 @@ import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.onlineupdate.push.DesignerPushUpdateConfigManager; import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.utils.DesignUtils; import com.fr.file.FILEFactory; @@ -139,7 +140,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { //记录当前激活码的在线激活状态. private int activeKeyStatus = -1; private boolean joinProductImprove = true; - private boolean automaticPushUpdate = true; //最近使用的颜色 private ColorSelectConfigManager configManager = new ColorSelectConfigManager(); /** @@ -147,6 +147,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { */ private AlphaFineConfigManager alphaFineConfigManager = new AlphaFineConfigManager(); + private DesignerPushUpdateConfigManager designerPushUpdateConfigManager = DesignerPushUpdateConfigManager.getInstance(); public static final String CAS_CERTIFICATE_PATH = "certificatePath"; @@ -690,28 +691,12 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.joinProductImprove = joinProductImprove; } - /** - * 是否开启自动更新推送 - * - * @return 是否开启自动更新推送 - */ - public boolean isAutomaticPushUpdate() { - return automaticPushUpdate; - } - - /** - * 设置开启/关闭自动更新推送 - */ - public void setAutomaticPushUpdate(boolean automaticPushUpdate) { - this.automaticPushUpdate = automaticPushUpdate; + public boolean isAutoPushUpdateEnabled() { + return designerPushUpdateConfigManager.isAutoPushUpdateEnabled(); } - /** - * @return "自动更新推送"选项是否生效 - */ - public boolean isAutomaticPushUpdateValid() { - // 远程设计和非中文环境,都不生效 - return WorkContext.getCurrent().isLocal() && GeneralContext.isChineseEnv(); + public void setAutoPushUpdateEnabled(boolean autoPushUpdateEnabled) { + designerPushUpdateConfigManager.setAutoPushUpdateEnabled(autoPushUpdateEnabled); } /** @@ -1489,6 +1474,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readAlphaFineAttr(reader); } else if (name.equals("RecentColors")) { readRecentColor(reader); + } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) { + readDesignerPushUpdateAttr(reader); } else { readLayout(reader, name); } @@ -1559,7 +1546,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setOracleSystemSpace(reader.getAttrAsBoolean("useOracleSystemSpace", true)); this.setCachingTemplateLimit(reader.getAttrAsInt("cachingTemplateLimit", CACHINGTEMPLATE_LIMIT)); this.setJoinProductImprove(reader.getAttrAsBoolean("joinProductImprove", true)); - this.setAutomaticPushUpdate(reader.getAttrAsBoolean("automaticPushUpdate", true)); this.setImageCompress(reader.getAttrAsBoolean("imageCompress", true)); this.setAutoBackUp(reader.getAttrAsBoolean("autoBackUp", true)); this.setTemplateTreePaneExpanded(reader.getAttrAsBoolean("templateTreePaneExpanded", false)); @@ -1672,6 +1658,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { checkRecentOpenedFileNum(); } + private void readDesignerPushUpdateAttr(XMLableReader reader) { + reader.readXMLObject(designerPushUpdateConfigManager); + } + /** * Write XML.
* The method will be invoked when save data to XML file.
@@ -1694,6 +1684,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeHttpsParas(writer); writeAlphaFineAttr(writer); writeRecentColor(writer); + writeDesignerPushUpdateAttr(writer); writer.end(); } @@ -1797,9 +1788,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (!this.isJoinProductImprove()) { writer.attr("joinProductImprove", this.isJoinProductImprove()); } - if (!this.isAutomaticPushUpdate()) { - writer.attr("automaticPushUpdate", this.isAutomaticPushUpdate()); - } if (!this.isImageCompress()) { writer.attr("imageCompress", this.isImageCompress()); } @@ -1927,4 +1915,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .attr("undoLimit", this.getUndoLimit()) .end(); } + + private void writeDesignerPushUpdateAttr(XMLPrintWriter writer) { + this.designerPushUpdateConfigManager.writeXML(writer); + } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 85d08e5eb..e1c59c93a 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -22,6 +22,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.onlineupdate.push.DesignerPushUpdateManager; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; @@ -116,7 +117,6 @@ public class PreferencePane extends BasicPane { private KeyStroke shortCutKeyStore = null; private UIColorButton gridLineColorTBButton; - private UIColorButton paginationLineColorTBButton; private UICheckBox supportCellEditorDefCheckBox; @@ -131,7 +131,7 @@ public class PreferencePane extends BasicPane { private UICheckBox oracleSpace; private UISpinner cachingTemplateSpinner; private UICheckBox joinProductImprove; - private UICheckBox automaticPushUpdate; + private UICheckBox autoPushUpdate; public PreferencePane() { this.initComponents(); @@ -174,9 +174,9 @@ public class PreferencePane extends BasicPane { joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); improvePane.add(joinProductImprove); - if (DesignerEnvManager.getEnvManager().isAutomaticPushUpdateValid()) { - automaticPushUpdate = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); - improvePane.add(automaticPushUpdate); + if (DesignerPushUpdateManager.getInstance().isAutoPushUpdateSupported()) { + autoPushUpdate = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); + improvePane.add(autoPushUpdate); } JPanel spaceUpPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -558,8 +558,8 @@ public class PreferencePane extends BasicPane { this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); - if (designerEnvManager.isAutomaticPushUpdateValid()) { - this.automaticPushUpdate.setSelected(designerEnvManager.isAutomaticPushUpdate()); + if (this.autoPushUpdate != null) { + this.autoPushUpdate.setSelected(designerEnvManager.isAutoPushUpdateEnabled()); } } @@ -620,8 +620,8 @@ public class PreferencePane extends BasicPane { designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); designerEnvManager.setJoinProductImprove(this.joinProductImprove.isSelected()); - if (designerEnvManager.isAutomaticPushUpdateValid()) { - designerEnvManager.setAutomaticPushUpdate(this.automaticPushUpdate.isSelected()); + if (this.autoPushUpdate != null) { + designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdate.isSelected()); } designerEnvManager.setUndoLimit(maxUndoLimit.getSelectedIndex() * SELECTED_INDEX_5); diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java new file mode 100644 index 000000000..fd1d5fb90 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java @@ -0,0 +1,61 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLWriter; +import com.fr.stable.xml.XMLableReader; + +/** + * 持久化与设计器自动推送更新相关的配置 + * Created by plough on 2019/4/8. + */ +public class DesignerPushUpdateConfigManager implements XMLReadable, XMLWriter { + public static final String XML_TAG = "DesignerPushUpdateConfigManager"; + private static DesignerPushUpdateConfigManager singleton; + + private boolean autoPushUpdateEnabled = true; // 是否开启自动推送更新 + private String lastIgnoredVersion = StringUtils.EMPTY; // 最近一次跳过的更新版本 + + private DesignerPushUpdateConfigManager() { + } + + public static DesignerPushUpdateConfigManager getInstance() { + if (singleton == null) { + singleton = new DesignerPushUpdateConfigManager(); + } + return singleton; + } + + @Override + public void readXML(XMLableReader reader) { + if (reader.isAttr()) { + this.setAutoPushUpdateEnabled(reader.getAttrAsBoolean("autoPushUpdateEnabled", true)); + this.setLastIgnoredVersion(reader.getAttrAsString("lastIgnoredVersion", StringUtils.EMPTY)); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TAG); + writer.attr("autoPushUpdateEnabled", autoPushUpdateEnabled); + writer.attr("lastIgnoredVersion", lastIgnoredVersion); + writer.end(); + } + + public boolean isAutoPushUpdateEnabled() { + return autoPushUpdateEnabled; + } + + public void setAutoPushUpdateEnabled(boolean autoPushUpdateEnabled) { + this.autoPushUpdateEnabled = autoPushUpdateEnabled; + } + + public String getLastIgnoredVersion() { + return lastIgnoredVersion; + } + + public void setLastIgnoredVersion(String lastIgnoredVersion) { + this.lastIgnoredVersion = lastIgnoredVersion; + } +} diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java new file mode 100644 index 000000000..469c0196e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java @@ -0,0 +1,39 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.general.GeneralContext; +import com.fr.workspace.WorkContext; + +/** + * Created by plough on 2019/4/8. + */ +public class DesignerPushUpdateManager { + private static DesignerPushUpdateManager singleton; +// private DesignerUpdateInfo updateInfo; + + private DesignerPushUpdateManager() { + + } + + public static DesignerPushUpdateManager getInstance() { + if (singleton == null) { + singleton = new DesignerPushUpdateManager(); + } + return singleton; + } + + /** + * "自动更新推送"选项是否生效 + */ + public boolean isAutoPushUpdateSupported() { + // 远程设计和非中文环境,都不生效 + return WorkContext.getCurrent().isLocal() && GeneralContext.isChineseEnv(); + } + /** + * 检查更新,如果有合适的更新版本,则弹窗 + */ +// public void checkAndPop() { +// updateInfo. +// } + + +} diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java new file mode 100644 index 000000000..f9de98218 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java @@ -0,0 +1,72 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import org.junit.Test; + +import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + + +/** + * Created by plough on 2019/4/8. + */ +public class DesignerPushUpdateConfigManagerTest { + + @Test + public void testSingleton() { + DesignerPushUpdateConfigManager m1 = DesignerPushUpdateConfigManager.getInstance(); + DesignerPushUpdateConfigManager m2 = DesignerPushUpdateConfigManager.getInstance(); + assertSame(m1, m2); + } + + @Test + public void testDefaultValue() throws XMLStreamException { + DesignerPushUpdateConfigManager configManager = DesignerPushUpdateConfigManager.getInstance(); + XMLableReader xmlReader = XMLableReader.createXMLableReader(new StringReader("")); + xmlReader.readXMLObject(configManager); + + assertEquals(StringUtils.EMPTY, configManager.getLastIgnoredVersion()); + assertTrue(configManager.isAutoPushUpdateEnabled()); + } + + @Test + public void testReadAndWrite() throws XMLStreamException { + final String initLastIngnoredVersion = "1.1.2"; + final boolean initAutoPushEnabled = false; + + DesignerPushUpdateConfigManager configManager = DesignerPushUpdateConfigManager.getInstance(); + + configManager.setLastIgnoredVersion(initLastIngnoredVersion); + configManager.setAutoPushUpdateEnabled(initAutoPushEnabled); + + // 写入 xml + StringWriter sw = new StringWriter(); + XMLPrintWriter writer = XMLPrintWriter.create(new PrintWriter(sw)); + configManager.writeXML(writer); + writer.flush(); + writer.close(); + + String xml_str = sw.getBuffer().toString(); + + // 临时修改配置 + configManager.setAutoPushUpdateEnabled(true); + configManager.setLastIgnoredVersion("0.20.1"); + + // 从 xml 中读取 + StringReader sr = new StringReader(xml_str); + XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); + xmlReader.readXMLObject(configManager); + + // 验证:与写入时的配置一致 + assertEquals(initLastIngnoredVersion, configManager.getLastIgnoredVersion()); + assertEquals(initAutoPushEnabled, configManager.isAutoPushUpdateEnabled()); + } +} From ee16d597d5df9794afedcd433ec2c1b07d6d7167 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Mon, 8 Apr 2019 20:13:04 +0800 Subject: [PATCH 014/196] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SendDataToCloudProvider.java | 2 +- .../messagecollect/entity/FileEntity.java | 50 +++++++++++++++++ .../impl/AbstractSendDataToCloud.java | 53 +++++++------------ .../impl/FocusPointMessageUploader.java | 25 +++++---- .../utils/MessageCollectUtils.java | 31 ++++++----- 5 files changed, 101 insertions(+), 60 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntity.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java index 187b72f92..a994064a6 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java @@ -15,7 +15,7 @@ public interface SendDataToCloudProvider { * @param tClass 埋点对象类型 * @throws Exception 取数过程中可能的异常 */ - void getData(long currentTime, long lastTime, Class tClass) throws Exception; + void queryData(long currentTime, long lastTime, Class tClass) throws Exception; /** * @param points 从swift获取的埋点数据 diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntity.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntity.java new file mode 100644 index 000000000..63c40f458 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntity.java @@ -0,0 +1,50 @@ +package com.fr.design.mainframe.messagecollect.entity; + +/** + * @author alex sung + * @date 2019/4/8 + */ +public class FileEntity { + /** + * 文件名 + */ + private String fileName; + /** + * 文件的完整路径 + */ + private String pathName; + /** + * 文件夹路径 + */ + private String folderName; + + public FileEntity(String fileName, String pathName, String folderName) { + this.fileName = fileName; + this.pathName = pathName; + this.folderName = folderName; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getPathName() { + return pathName; + } + + public void setPathName(String pathName) { + this.pathName = pathName; + } + + public String getFolderName() { + return folderName; + } + + public void setFolderName(String folderName) { + this.folderName = folderName; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java index c611fc060..f19ecd5b4 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java @@ -1,6 +1,8 @@ package com.fr.design.mainframe.messagecollect.impl; import com.fr.design.mainframe.messagecollect.SendDataToCloudProvider; +import com.fr.design.mainframe.messagecollect.entity.FileEntity; +import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; import com.fr.general.CloudCenter; import com.fr.general.IOUtils; import com.fr.general.http.HttpRequestType; @@ -13,6 +15,7 @@ import com.fr.stable.CommonUtils; import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.stable.query.QueryFactory; import com.fr.stable.query.condition.QueryCondition; import com.fr.stable.query.data.DataList; @@ -49,32 +52,14 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider protected String lastTime; private static final int PAGE_SIZE = 200; private long totalCount = -1; - protected String fileName; - protected String pathName; - protected String folderName; + private FileEntity fileEntity; - public String getFolderName() { - return folderName; + public FileEntity getFileEntity() { + return fileEntity; } - public void setFolderName(String folderName) { - this.folderName = folderName; - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getPathName() { - return pathName; - } - - public void setPathName(String pathName) { - this.pathName = pathName; + public void setFileEntity(FileEntity fileEntity) { + this.fileEntity = fileEntity; } public String getLastTime() { @@ -99,7 +84,7 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider } @Override - public void getData(long currentTime, long lastTime, Class tClass) { + public void queryData(long currentTime, long lastTime, Class tClass) { queryAndSendOnePageFunctionContent(currentTime, lastTime, 0, tClass); long page = (totalCount / PAGE_SIZE) + 1; for (int i = 1; i < page; i++) { @@ -200,7 +185,7 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider private void generateFile(JSONObject jsonObject) { try { String content = jsonObject.toString(); - File file = new File(pathName + ".json"); + File file = new File(getFileEntity().getPathName() + ".json"); StableUtils.makesureFileExist(file); FileOutputStream out = new FileOutputStream(file); InputStream in = new ByteArrayInputStream(content.getBytes(EncodeConstants.ENCODING_UTF_8)); @@ -213,18 +198,20 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider private static void uploadFile(File file, String keyFileName) throws IOException { String url = generateSignedUploadUrl(keyFileName); - MultipartEntityBuilder builder = MultipartEntityBuilder.create() - .addPart("file", new FileBody(file)); - Map headers = new HashMap(); - headers.put("Content-Type", "application/zip"); - HttpToolbox.upload(url, builder, Charset.forName("utf-8"), headers, HttpRequestType.PUT); + if(StringUtils.isEmpty(url)){ + FineLoggerFactory.getLogger().error("url is null."); + }else { + MultipartEntityBuilder builder = MultipartEntityBuilder.create() + .addPart("file", new FileBody(file)); + Map headers = new HashMap(); + headers.put("Content-Type", "application/zip"); + HttpToolbox.upload(url, builder, Charset.forName("utf-8"), headers, HttpRequestType.PUT); + } } - - private void deleteFileAndZipFile(File zipFile, String pathName) { File file = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), pathName)); - CommonUtils.deleteFile(file); + MessageCollectUtils.deleteDir(file); CommonUtils.deleteFile(zipFile); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java index 15dc8f971..4b89aeacb 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.messagecollect.impl; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.messagecollect.entity.FileEntity; import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; import com.fr.intelli.record.FocusPoint; import com.fr.json.JSONObject; @@ -23,7 +24,7 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { private static final String TAG = "FocusPointMessageTag"; private static final String SEPARATOR = "_"; - private static final String FOCUS_POINT_VERSION = "FocusPoint1003_"; + private static final String FOCUS_POINT = "FocusPoint"; private static volatile FocusPointMessageUploader instance; public static FocusPointMessageUploader getInstance() { @@ -49,11 +50,11 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { long lastTIme = MessageCollectUtils.getLastTimeMillis(lastTime); try { generatePath(); - getData(currentTime, lastTIme, FocusPoint.class); + queryData(currentTime, lastTIme, FocusPoint.class); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } - sendZipFile(getFolderName()); + sendZipFile(getFileEntity().getFolderName()); saveLastTime(); } @@ -71,16 +72,20 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { writer.end(); } - private void generatePath(){ + private void generatePath() { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); String bbsUserName = MarketConfig.getInstance().getBbsUsername(); String uuid = envManager.getUUID(); - //文件夹名称的格式是: "FocusPoint1003_" + uuid_bbsUserName_randomUuid,均以下划线分隔 + //文件夹名称的格式是: "FocusPoint" + 大版本号 + 小版本号 + uuid + bbsUserName + randomUuid,均以下划线分隔 StringBuilder sb = new StringBuilder(); - sb.append(FOCUS_POINT_VERSION).append(uuid).append(SEPARATOR).append(bbsUserName).append(SEPARATOR).append(UUID.randomUUID()); - - setFileName(String.valueOf(UUID.randomUUID())); - setPathName(StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString(), getFileName())); - setFolderName(StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString())); + sb.append(FOCUS_POINT).append(SEPARATOR). + append(ProductConstants.MAIN_VERSION).append(SEPARATOR). + append(ProductConstants.MINOR_VERSION).append(SEPARATOR). + append(uuid).append(SEPARATOR).append(bbsUserName).append(SEPARATOR). + append(UUID.randomUUID()); + String fileName = String.valueOf(UUID.randomUUID()); + String pathName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString(), fileName); + String folderName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString()); + setFileEntity(new FileEntity(fileName, pathName, folderName)); } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java index 721e42741..17ce547ce 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java @@ -1,6 +1,5 @@ package com.fr.design.mainframe.messagecollect.utils; -import com.fr.base.FRContext; import com.fr.general.DateUtils; import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; @@ -13,13 +12,9 @@ import com.fr.third.javax.xml.stream.XMLStreamException; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.text.DateFormat; -import java.util.Date; /** * @author alex sung @@ -27,18 +22,14 @@ import java.util.Date; */ public class MessageCollectUtils { - public static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { - InputStream is = new FileInputStream(xmlFile); - return IOUtils.inputStream2String(is); - } - public static void readXMLFile(XMLReadable xmlReadable, File xmlFile) { if (xmlFile == null || !xmlFile.exists()) { return; } String charset = EncodeConstants.ENCODING_UTF_8; try { - String fileContent = MessageCollectUtils.getFileContent(xmlFile); + InputStream is = new FileInputStream(xmlFile); + String fileContent = IOUtils.inputStream2String(is); InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); @@ -51,11 +42,6 @@ public class MessageCollectUtils { } } - public static String newDateToString() { - DateFormat df = FRContext.getDefaultValues().getDateTimeFormat(); - return df.format(new Date()); - } - public static long getLastTimeMillis(String lastTime) { if (StringUtils.isEmpty(lastTime)) { return 0; @@ -66,4 +52,17 @@ public class MessageCollectUtils { return -1; } } + + public static boolean deleteDir(File dir) { + if (dir.isDirectory()) { + String[] children = dir.list(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + } + return dir.delete(); + } } From 4bd7fd56ed198eb62959bf15362797644e201e8e Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 9 Apr 2019 20:17:49 +0800 Subject: [PATCH 015/196] =?UTF-8?q?REPORT-14862=20=E7=AE=80=E9=81=93?= =?UTF-8?q?=E4=BA=91=E6=8F=92=E4=BB=B6=E9=80=82=E9=85=8D10.0=EF=BC=8C?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=AE=80=E9=81=93=E4=BA=91=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=9B=86=E5=88=B010=E3=80=820?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/data/BasicTableDataTreePane.java | 1 + .../data/datapane/TableDataTreePane.java | 27 +++++++++++++++++++ .../java/com/fr/design/dialog/BasicPane.java | 4 +-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java index bed0dc96b..a18ae856e 100644 --- a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java @@ -147,6 +147,7 @@ public abstract class BasicTableDataTreePane extends DockingView implements Resp private boolean isIncludeUnderline(String name) { return ComparatorUtils.equals(name.indexOf(StoreProcedureAssist.GROUP_MARKER), -1) ? false : true; } + public abstract void addDataPane(final AbstractTableDataPane uPanel, String paneName); public abstract TableDataTree getDataTree(); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java index 37aa4ef12..56f81e9a5 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java @@ -324,4 +324,31 @@ public class TableDataTreePane extends BasicTableDataTreePane { dataTree.refresh(); return Collections.unmodifiableMap(tdNameMap); } + public void addDataPane(final AbstractTableDataPane uPanel, String paneName) { + final NamePane nPanel = uPanel.asNamePane(); + nPanel.setObjectName(paneName); + final String oldName = paneName; + + allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); + + DesignTableDataManager.setThreadLocal(DesignTableDataManager.NO_PARAMETER); + tc.renameTableData(oldName, nPanel.getObjectName(), false); + TableDataSource tds = tc.getBook(); + TableData td = uPanel.updateBean(); + if (td instanceof TableDataSourceDependent) { + ((TableDataSourceDependent) td).setTableDataSource(tds); + } + String tdName = nPanel.getObjectName(); + tds.putTableData(tdName, td); + Map map = new HashMap(); + if (!ComparatorUtils.equals(oldName, tdName)) { + map.put(oldName, tdName); + } + fireDSChanged(map); + tc.fireTargetModified(); + tc.parameterChanged(); + int[] rows = dataTree.getSelectionRows(); + dataTree.refreshChildByName(tdName); + dataTree.setSelectionRows(rows); + } } diff --git a/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java b/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java index 8c7053650..4516525cc 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java +++ b/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java @@ -298,13 +298,13 @@ public abstract class BasicPane extends JPanel { public void checkValid() throws Exception { } - public static final class NamePane extends BasicPane { + public static class NamePane extends BasicPane { private UITextField nameTextField; private BasicPane centerPane; private UILabel showfield; private PropertyChangeAdapter changeListener; - private NamePane(BasicPane bPane) { + public NamePane(BasicPane bPane) { this.setLayout(new BorderLayout(4, 4)); nameTextField = new UITextField(30); From 13e3b9f0d829b5e50472b6c7054ca8881e1b3349 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Wed, 10 Apr 2019 11:10:51 +0800 Subject: [PATCH 016/196] =?UTF-8?q?REPORT-15700=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E7=AB=AF=E5=8F=A3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/DesignerPort.java | 22 ++++++++++++++++--- .../fr/start/module/PreStartActivator.java | 2 -- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java b/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java index 08ea50382..7c082800e 100644 --- a/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java +++ b/designer-base/src/main/java/com/fr/design/utils/DesignerPort.java @@ -1,10 +1,26 @@ package com.fr.design.utils; +/** + * 为的就是能替换 DesignPort.class 实现多开,因此避免编译器常量编译展开优化 + */ public class DesignerPort { - private DesignerPort() { } - public static final int MESSAGE_PORT = 51462; - public static final int DEBUG_MESSAGE_PORT = 51463; + /** + * 设计器端口,避免编译期常量优化展开 + */ + public static final int MESSAGE_PORT = getMessagePort(); + /** + * 设计器端口,避免编译期常量优化展开 + */ + public static final int DEBUG_MESSAGE_PORT = getDebugMessagePort(); + + private static int getMessagePort() { + return 51462; + } + + private static int getDebugMessagePort() { + return 51463; + } } diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index 073d24cb0..1dd95cf6a 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -70,8 +70,6 @@ public class PreStartActivator extends Activator { private void checkDebugStart() { if (isDebug()) { setDebugEnv(); - } else { - DesignUtils.setPort(DesignUtils.getPort()); } } From 41e206b1c4fb948092ad410735417768cf3c3430 Mon Sep 17 00:00:00 2001 From: zack Date: Wed, 10 Apr 2019 12:34:36 +0800 Subject: [PATCH 017/196] =?UTF-8?q?REPORT-14862=20=E7=AE=80=E9=81=93?= =?UTF-8?q?=E4=BA=91=E6=8F=92=E4=BB=B6=E9=80=82=E9=85=8D10.0=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=BF=87=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/dialog/BasicPane.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java b/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java index 4516525cc..c01daff70 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java +++ b/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java @@ -2,13 +2,18 @@ package com.fr.design.dialog; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; - -import com.fr.stable.core.PropertyChangeAdapter; +import com.fr.design.i18n.Toolkit; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.core.PropertyChangeAdapter; -import javax.swing.*; +import javax.swing.JPanel; import javax.swing.event.DocumentEvent; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Window; /* * _denny: 这里的BasicPane通常会有populate & update方法 @@ -300,6 +305,7 @@ public abstract class BasicPane extends JPanel { public static class NamePane extends BasicPane { private UITextField nameTextField; + private UILabel Name; private BasicPane centerPane; private UILabel showfield; private PropertyChangeAdapter changeListener; @@ -308,8 +314,9 @@ public abstract class BasicPane extends JPanel { this.setLayout(new BorderLayout(4, 4)); nameTextField = new UITextField(30); + Name = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Name") + ":"); JPanel northPane = new JPanel(new BorderLayout(4, 4)); - northPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Hyperlink_Name") + ":"), BorderLayout.WEST); + northPane.add(Name, BorderLayout.WEST); northPane.add(nameTextField, BorderLayout.CENTER); northPane.add(showfield = new UILabel(" "), BorderLayout.EAST); showfield.setForeground(new Color(204, 0, 1)); @@ -343,6 +350,11 @@ public abstract class BasicPane extends JPanel { } } + public void setVisible(boolean isVisible) { + this.nameTextField.setVisible(isVisible); + this.Name.setVisible(isVisible); + } + public String getObjectName() { return this.nameTextField.getText().trim(); } From 41c3d413deb7e7a278dc546b4ac39d08e013e4db Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 10 Apr 2019 13:48:54 +0800 Subject: [PATCH 018/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E9=80=BB=E8=BE=91=E7=9A=84=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateManager.java | 47 +++++++-- .../onlineupdate/push/DesignerUpdateInfo.java | 84 ++++++++++++++++ .../push/DesignerPushUpdateManagerTest.java | 32 +++++++ .../push/DesignerUpdateInfoTest.java | 95 +++++++++++++++++++ 4 files changed, 252 insertions(+), 6 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java create mode 100644 designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java create mode 100644 designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java index 469c0196e..3e9abd982 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java @@ -1,6 +1,10 @@ package com.fr.design.onlineupdate.push; +import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; +import com.fr.general.GeneralUtils; +import com.fr.general.http.HttpClient; +import com.fr.json.JSONObject; import com.fr.workspace.WorkContext; /** @@ -8,10 +12,11 @@ import com.fr.workspace.WorkContext; */ public class DesignerPushUpdateManager { private static DesignerPushUpdateManager singleton; -// private DesignerUpdateInfo updateInfo; + private DesignerUpdateInfo updateInfo; + private DesignerPushUpdateConfigManager config; private DesignerPushUpdateManager() { - + config = DesignerPushUpdateConfigManager.getInstance(); } public static DesignerPushUpdateManager getInstance() { @@ -21,19 +26,49 @@ public class DesignerPushUpdateManager { return singleton; } + private void initUpdateInfo() { + String currentVersion = GeneralUtils.readFullBuildNO(); + + // todo:耗时请求,可能需要优化 + HttpClient hc = new HttpClient(CloudCenter.getInstance().acquireUrlByKind("jar10.update")); + String latestVersion = new JSONObject(hc.getResponseText()).optString("versionNO"); + + String updatePushInfo = CloudCenter.getInstance().acquireUrlByKind("update.push"); + JSONObject pushData = new JSONObject(updatePushInfo); + + updateInfo = new DesignerUpdateInfo(currentVersion, latestVersion, pushData); + } + /** * "自动更新推送"选项是否生效 */ public boolean isAutoPushUpdateSupported() { + boolean isLocalEnv = WorkContext.getCurrent().isLocal(); + boolean isChineseEnv = GeneralContext.isChineseEnv(); + + return isAutoPushUpdateSupported(isLocalEnv, isChineseEnv); + } + + private boolean isAutoPushUpdateSupported(boolean isLocalEnv, boolean isChineseEnv) { // 远程设计和非中文环境,都不生效 - return WorkContext.getCurrent().isLocal() && GeneralContext.isChineseEnv(); + return isLocalEnv && isChineseEnv; } + /** * 检查更新,如果有合适的更新版本,则弹窗 */ -// public void checkAndPop() { -// updateInfo. -// } + public void popUpDialog() { + if (!shouldPopUp()) { + return; + } + // todo: do pop + } + private boolean shouldPopUp() { + if (updateInfo == null) { + initUpdateInfo(); + } + return isAutoPushUpdateSupported() && updateInfo.hasNewPushVersion(config.getLastIgnoredVersion()); + } } diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java new file mode 100644 index 000000000..0c3ecff4c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java @@ -0,0 +1,84 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.general.ComparatorUtils; +import com.fr.json.JSONObject; +import com.fr.stable.StringUtils; + +import java.security.InvalidParameterException; + +/** + * Created by plough on 2019/4/8. + */ +class DesignerUpdateInfo { + private static final String KEY_VERSION = "version"; + private static final String KEY_CONTENT = "content"; + private static final String KEY_BACKGROUND_URL = "background"; + private static final String KEY_MORE_INFO_URL = "more"; + + private final String currentVersion; // 当前版本 + private final String latestVersion; // 最新版本 + + private final String pushVersion; // 推送版本 + private final String pushContent; // 推送更新内容 + private final String backgroundUrl; // 推送背景图片 url + private final String moreInfoUrl; // 更多新特性 + + DesignerUpdateInfo(String currentVersion, String latestVersion, JSONObject pushData) { + this.currentVersion = currentVersion; + this.latestVersion = latestVersion; + + this.pushVersion = pushData.optString(KEY_VERSION); + this.pushContent = pushData.optString(KEY_CONTENT); + this.backgroundUrl = pushData.optString(KEY_BACKGROUND_URL); + this.moreInfoUrl = pushData.optString(KEY_MORE_INFO_URL); + + // 简单做下参数校验 + if (hasEmptyField()) { + throw new InvalidParameterException(); + } + } + + private boolean hasEmptyField() { + return StringUtils.isEmpty(currentVersion) + || StringUtils.isEmpty(latestVersion) + || StringUtils.isEmpty(pushVersion) + || StringUtils.isEmpty(pushContent) + || StringUtils.isEmpty(backgroundUrl) + || StringUtils.isEmpty(moreInfoUrl); + } + + String getCurrentVersion() { + return currentVersion; + } + + String getPushVersion() { + return pushVersion; + } + + String getLatestVersion() { + return latestVersion; + } + + String getPushContent() { + return pushContent; + } + + String getBackgroundUrl() { + return backgroundUrl; + } + + String getMoreInfoUrl() { + return moreInfoUrl; + } + + boolean hasNewPushVersion(String lastIgnoredVersion) { + boolean result = ComparatorUtils.compare(pushVersion, currentVersion) > 0 + && ComparatorUtils.compare(pushVersion, latestVersion) <= 0; + if (StringUtils.isNotEmpty(lastIgnoredVersion)) { + result = result && ComparatorUtils.compare(pushVersion, lastIgnoredVersion) > 0; + } + + return result; + } + +} diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java new file mode 100644 index 000000000..4e3f823e9 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java @@ -0,0 +1,32 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.invoke.Reflect; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +/** + * Created by plough on 2019/4/8. + */ +public class DesignerPushUpdateManagerTest { + @Test + public void testSingleton() { + DesignerPushUpdateManager m1 = DesignerPushUpdateManager.getInstance(); + DesignerPushUpdateManager m2 = DesignerPushUpdateManager.getInstance(); + assertSame(m1, m2); + } + + @Test + public void testIsAutoPushUpdateSupported() { + // 中文环境 + 本地设计 -> true + DesignerPushUpdateManager pushUpdateManager = DesignerPushUpdateManager.getInstance(); + assertEquals(true, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", true, true).get()); + + // 非中文环境 || 远程设计 -> false + assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", false, true).get()); + assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", true, false).get()); + assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", false, false).get()); + } + +} diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java new file mode 100644 index 000000000..b346d9b4a --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java @@ -0,0 +1,95 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.json.JSONObject; +import com.fr.stable.StringUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.security.InvalidParameterException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Created by plough on 2019/4/9. + */ +public class DesignerUpdateInfoTest { + private static final String CURRENT_VERSION = "2018.09.03.xx"; + private static final String LATEST_VERSION = "2019.04.03.yy"; + private static final String PUSH_VERSION = "2019.01.03.21.11"; + private static final String PUSH_CONTENT = "the update desc content"; + private static final String PUSH_BACKGROUND = "http://image.fr.com/123.jpg"; + private static final String PUSH_MORE = "http://help.finereport.com/xxx"; + private DesignerUpdateInfo updateInfo; + + @Before + public void setUp() { + JSONObject pushData = JSONObject.create(); + + pushData.put("version", PUSH_VERSION); + pushData.put("content", PUSH_CONTENT); + pushData.put("background", PUSH_BACKGROUND); + pushData.put("more", PUSH_MORE); + + updateInfo = new DesignerUpdateInfo(CURRENT_VERSION, LATEST_VERSION, pushData); + } + + @Test + public void testGetters() { + assertEquals(CURRENT_VERSION, updateInfo.getCurrentVersion()); + assertEquals(LATEST_VERSION, updateInfo.getLatestVersion()); + assertEquals(PUSH_VERSION, updateInfo.getPushVersion()); + assertEquals(PUSH_CONTENT, updateInfo.getPushContent()); + assertEquals(PUSH_BACKGROUND, updateInfo.getBackgroundUrl()); + assertEquals(PUSH_MORE, updateInfo.getMoreInfoUrl()); + } + + @Test + public void testHasNewPushVersion() { + // (1)最近被跳过的维护版本号 X0; + // (2)本地版本号 Y; + // (3)最新的推送版本号 X; + // (4)最新的版本号 Z + // 必须满足:Y < X <= Z && X > X0,才返回 true + + // 1 true + assertTrue(hasNewVersion("2019.01.03.xx", "2018.05.03.xx", "2019.04.03.yy", "2018.05.03.xx")); + assertTrue(hasNewVersion("2019.01.03.xx", "2018.05.03.xx", "2019.04.03.yy", null)); + assertTrue(hasNewVersion("2019.01.03.xx", "2018.05.03.xx", "2019.04.03.yy", StringUtils.EMPTY)); + + // 2 false + // 2.1 X <= Y && X > X0 + assertFalse(hasNewVersion("2019.01.03.xx", "2019.03.03.xx", "2019.04.03.yy", "2018.05.03.xx")); + assertFalse(hasNewVersion("2019.03.03.xx", "2019.03.03.xx", "2019.04.03.yy", "2018.05.03.xx")); + + // 2.2 X > Z && X > X0 + assertFalse(hasNewVersion("2020.01.03.xx", "2019.03.03.xx", "2019.04.03.yy", "2018.05.03.xx")); + + // 2.3 Y < X <= Z && X <= X0 + assertFalse(hasNewVersion("2019.01.03.xx", "2018.05.03.xx", "2019.04.03.yy", "2019.02.03.xx")); + assertFalse(hasNewVersion("2019.01.03.xx", "2018.05.03.xx", "2019.04.03.yy", "2019.01.03.xx")); + } + + + private boolean hasNewVersion(String X, String Y, String Z, String X0) { + JSONObject pushData = JSONObject.create(); + pushData.put("version", X); + pushData.put("content", PUSH_CONTENT); + pushData.put("background", PUSH_BACKGROUND); + pushData.put("more", PUSH_MORE); + DesignerUpdateInfo updateInfo = new DesignerUpdateInfo(Y, Z, pushData); + return updateInfo.hasNewPushVersion(X0); + } + + @Test + public void testParameterValidation() { + try { + DesignerUpdateInfo updateInfo = new DesignerUpdateInfo(null, null, new JSONObject()); + Assert.fail("should not reach here!"); + } catch (InvalidParameterException e) { + // do nothing + } + } +} From 15cadcebadd41d6bbbefde6784d31d9d2370f815 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Wed, 10 Apr 2019 17:03:07 +0800 Subject: [PATCH 019/196] =?UTF-8?q?=E4=BD=BF=E7=94=A8websocket=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=89=8D=E7=AB=AF=E5=8F=91=E6=9D=A5=E7=9A=84=E5=9F=8B?= =?UTF-8?q?=E7=82=B9=E6=B6=88=E6=81=AF=EF=BC=9B=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=96=B0=E8=A7=84=E5=AE=9A=E7=9A=84=E5=9F=8B?= =?UTF-8?q?=E7=82=B9=E6=A0=87=E8=AF=86=E5=91=BD=E5=90=8D=EF=BC=9B=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=93=8D=E4=BD=9C=E6=94=BE=E5=9C=A8FileEntit?= =?UTF-8?q?yBuilder=E9=87=8C=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SendDataToCloudProvider.java | 30 ---- .../impl/AbstractSendDataToCloud.java | 131 ++---------------- .../impl/FocusPointMessageUploader.java | 26 +++- .../utils/MessageCollectUtils.java | 17 +-- 4 files changed, 41 insertions(+), 163 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java deleted file mode 100644 index a994064a6..000000000 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.fr.design.mainframe.messagecollect; - -import com.fr.stable.query.data.DataList; - -/** - * @author alex sung - * @date 2019/3/22 - */ -public interface SendDataToCloudProvider { - - /** - * 获取要回传的数据 - * @param currentTime 当前时间 - * @param lastTime 上次回传时间 - * @param tClass 埋点对象类型 - * @throws Exception 取数过程中可能的异常 - */ - void queryData(long currentTime, long lastTime, Class tClass) throws Exception; - - /** - * @param points 从swift获取的埋点数据 - * @throws Exception 解析或存储临时文件时可能的异常 - */ - void dealWithData(DataList points) throws Exception; - - /** - * 回传Zip到云中心 - */ - void sendToCloudCenter(); -} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java index f19ecd5b4..b6d18235e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java @@ -1,65 +1,41 @@ package com.fr.design.mainframe.messagecollect.impl; -import com.fr.design.mainframe.messagecollect.SendDataToCloudProvider; -import com.fr.design.mainframe.messagecollect.entity.FileEntity; +import com.fr.design.mainframe.messagecollect.entity.FileEntityBuilder; import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; -import com.fr.general.CloudCenter; -import com.fr.general.IOUtils; -import com.fr.general.http.HttpRequestType; -import com.fr.general.http.HttpToolbox; import com.fr.intelli.record.MetricRegistry; -import com.fr.json.JSONException; -import com.fr.json.JSONObject; +import com.fr.json.JSONArray; import com.fr.log.FineLoggerFactory; -import com.fr.stable.CommonUtils; -import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; import com.fr.stable.query.QueryFactory; import com.fr.stable.query.condition.QueryCondition; import com.fr.stable.query.data.DataList; import com.fr.stable.query.restriction.RestrictionFactory; import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLable; -import com.fr.third.org.apache.http.entity.mime.MultipartEntityBuilder; -import com.fr.third.org.apache.http.entity.mime.content.FileBody; -import java.io.ByteArrayInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.Map; -import java.util.zip.ZipEntry; /** * @author alex sung * @date 2019/3/22 */ -public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider, XMLable { - - private static final String INTELLI_OPERATION_URL = "intelli.operation.url"; - private static final String OPERATION_URL = "https://cloud.fanruan.com/config/protect/operation"; - private static final String ATTR_SIGNATURE = "signature"; - private static final String ATTR_KEY = "key"; +public abstract class AbstractSendDataToCloud implements XMLable { private static final String FILE_NAME = "messagecollect.info"; private static final String COLUMN_TIME = "time"; protected String lastTime; private static final int PAGE_SIZE = 200; private long totalCount = -1; - private FileEntity fileEntity; + private FileEntityBuilder fileEntityBuilder; - public FileEntity getFileEntity() { - return fileEntity; + public FileEntityBuilder getFileEntityBuilder() { + return fileEntityBuilder; } - public void setFileEntity(FileEntity fileEntity) { - this.fileEntity = fileEntity; + public void setFileEntityBuilder(FileEntityBuilder fileEntityBuilder) { + this.fileEntityBuilder = fileEntityBuilder; } public String getLastTime() { @@ -71,6 +47,7 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider } public void saveLastTime() { + setLastTime(MessageCollectUtils.dateToString()); try { FileOutputStream out = new FileOutputStream(getLastTimeFile()); XMLTools.writeOutputStreamXML(this, out); @@ -83,7 +60,6 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), FILE_NAME)); } - @Override public void queryData(long currentTime, long lastTime, Class tClass) { queryAndSendOnePageFunctionContent(currentTime, lastTime, 0, tClass); long page = (totalCount / PAGE_SIZE) + 1; @@ -117,7 +93,6 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider } } - @Override public void dealWithData(DataList tDataList) throws Exception { generateThisPageFile(tDataList); } @@ -125,15 +100,15 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider private void generateThisPageFile(DataList points) { File file = null; try { - JSONObject jsonObject = dealWithSendFunctionContent(points); + JSONArray jsonArray = dealWithSendFunctionContent(points); //生成json文件 - generateFile(jsonObject); + fileEntityBuilder.generateFile(jsonArray, getFileEntityBuilder().getPathName()); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } - public abstract JSONObject dealWithSendFunctionContent(DataList focusPoints); + public abstract JSONArray dealWithSendFunctionContent(DataList focusPoints); /** * 生成zip并发送zip文件 @@ -143,92 +118,16 @@ public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider File file = null; try { - file = generateZipFile(pathName); + file = fileEntityBuilder.generateZipFile(pathName); if (file != null) { - uploadFile(file, file.getName()); + fileEntityBuilder.uploadFile(file, file.getName()); } } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return; } - deleteFileAndZipFile(file, pathName); - } - - private File generateZipFile(String pathName) { - File zipFile = null; - try { - File file = new File(pathName); - zipFile = new File(pathName + ".zip"); - InputStream input = null; - java.util.zip.ZipOutputStream zipOut = null; - zipOut = new java.util.zip.ZipOutputStream(new FileOutputStream(zipFile)); - int temp = 0; - if (file.isDirectory()) { - File lists[] = file.listFiles(); - for (int i = 0; i < lists.length; i++) { - input = new FileInputStream(lists[i]); - zipOut.putNextEntry(new ZipEntry(file.getName() - + File.separator + lists[i].getName())); - while ((temp = input.read()) != -1) { - zipOut.write(temp); - } - input.close(); - } - } - zipOut.close(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - return zipFile; - } - - private void generateFile(JSONObject jsonObject) { - try { - String content = jsonObject.toString(); - File file = new File(getFileEntity().getPathName() + ".json"); - StableUtils.makesureFileExist(file); - FileOutputStream out = new FileOutputStream(file); - InputStream in = new ByteArrayInputStream(content.getBytes(EncodeConstants.ENCODING_UTF_8)); - IOUtils.copyBinaryTo(in, out); - out.close(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private static void uploadFile(File file, String keyFileName) throws IOException { - String url = generateSignedUploadUrl(keyFileName); - if(StringUtils.isEmpty(url)){ - FineLoggerFactory.getLogger().error("url is null."); - }else { - MultipartEntityBuilder builder = MultipartEntityBuilder.create() - .addPart("file", new FileBody(file)); - Map headers = new HashMap(); - headers.put("Content-Type", "application/zip"); - HttpToolbox.upload(url, builder, Charset.forName("utf-8"), headers, HttpRequestType.PUT); - } + fileEntityBuilder.deleteFileAndZipFile(file, pathName); } - private void deleteFileAndZipFile(File zipFile, String pathName) { - File file = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), pathName)); - MessageCollectUtils.deleteDir(file); - CommonUtils.deleteFile(zipFile); - } - private static String generateSignedUploadUrl(String fileKeyName) throws IOException { - String url = CloudCenter.getInstance().acquireUrlByKind(INTELLI_OPERATION_URL, OPERATION_URL); - Map parameters = new HashMap(); - parameters.put(ATTR_KEY, fileKeyName); - parameters.put(ATTR_SIGNATURE, String.valueOf(CommonUtils.signature())); - String responseText = HttpToolbox.get(url, parameters); - try { - JSONObject data = new JSONObject(responseText); - if ("success".equals(data.optString("status"))) { - return data.optString("url"); - } - } catch (JSONException e) { - FineLoggerFactory.getLogger().error("Illegal response text."); - } - return null; - } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java index 4b89aeacb..668e7fa41 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -2,9 +2,10 @@ package com.fr.design.mainframe.messagecollect.impl; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; -import com.fr.design.mainframe.messagecollect.entity.FileEntity; +import com.fr.design.mainframe.messagecollect.entity.FileEntityBuilder; import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; import com.fr.intelli.record.FocusPoint; +import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.ProductConstants; @@ -39,11 +40,24 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { } @Override - public JSONObject dealWithSendFunctionContent(DataList focusPoints) { - return new JSONObject(); + public JSONArray dealWithSendFunctionContent(DataList focusPoints) { + JSONArray ja = new JSONArray(); + for(T t:focusPoints.getList()){ + FocusPoint focusPoint = (FocusPoint)t; + JSONObject jo = new JSONObject(); + jo.put("id",focusPoint.getId()); + jo.put("text",focusPoint.getId()); + jo.put("source",focusPoint.getId()); + jo.put("time",focusPoint.getId()); + jo.put("username",focusPoint.getId()); + jo.put("ip",focusPoint.getId()); + jo.put("title",focusPoint.getId()); + jo.put("body",focusPoint.getId()); + ja.put(jo); + } + return ja; } - @Override public void sendToCloudCenter() { MessageCollectUtils.readXMLFile(instance, getLastTimeFile()); long currentTime = new Date().getTime(); @@ -54,7 +68,7 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } - sendZipFile(getFileEntity().getFolderName()); + sendZipFile(getFileEntityBuilder().getFolderName()); saveLastTime(); } @@ -86,6 +100,6 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { String fileName = String.valueOf(UUID.randomUUID()); String pathName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString(), fileName); String folderName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString()); - setFileEntity(new FileEntity(fileName, pathName, folderName)); + setFileEntityBuilder(new FileEntityBuilder(fileName, pathName, folderName)); } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java index 17ce547ce..738942208 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.messagecollect.utils; +import com.fr.base.FRContext; import com.fr.general.DateUtils; import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; @@ -15,6 +16,8 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.text.DateFormat; +import java.util.Date; /** * @author alex sung @@ -53,16 +56,8 @@ public class MessageCollectUtils { } } - public static boolean deleteDir(File dir) { - if (dir.isDirectory()) { - String[] children = dir.list(); - for (int i = 0; i < children.length; i++) { - boolean success = deleteDir(new File(dir, children[i])); - if (!success) { - return false; - } - } - } - return dir.delete(); + public static String dateToString(){ + DateFormat df = FRContext.getDefaultValues().getDateTimeFormat(); + return df.format(new Date()); } } From 40b04728ec3090b2b077ca2c5cbe78fdd1d46cad Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 10 Apr 2019 17:07:19 +0800 Subject: [PATCH 020/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>ModernUIPane=20?= =?UTF-8?q?=E4=BC=A0=E4=B8=80=E4=BB=BD=E5=88=B0=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 27 +++ .../design/actions/file/PreferencePane.java | 35 ++- .../main/java/com/fr/design/ui/Assistant.java | 53 +++++ .../com/fr/design/ui/EmbProtocolHandler.java | 83 +++++++ .../com/fr/design/ui/ModernRequestClient.java | 22 ++ .../com/fr/design/ui/ModernUIConstants.java | 15 ++ .../java/com/fr/design/ui/ModernUIPane.java | 182 +++++++++++++++ .../com/fr/design/ui/InitNameSpace.js | 12 + .../com/fr/design/ui/InsertScript.js | 8 + .../resources/com/fr/design/ui/InsertStyle.js | 9 + .../resources/com/fr/design/ui/help/demo.js | 220 ++++++++++++++++++ .../main/resources/com/fr/design/ui/tpl.html | 12 + .../java/com/fr/design/ui/FineUIDemo.java | 30 +++ .../com/fr/design/ui/ModernUIPaneTest.java | 80 +++++++ .../java/com/fr/design/ui/StartComponent.java | 32 +++ .../test/resources/com/fr/design/ui/demo.html | 20 ++ .../resources/com/fr/design/ui/fineui.html | 11 + .../com/fr/design/ui/script/start.js | 57 +++++ 18 files changed, 896 insertions(+), 12 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/ui/Assistant.java create mode 100644 designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java create mode 100644 designer-base/src/main/java/com/fr/design/ui/ModernRequestClient.java create mode 100644 designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java create mode 100644 designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java create mode 100644 designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js create mode 100644 designer-base/src/main/resources/com/fr/design/ui/InsertScript.js create mode 100644 designer-base/src/main/resources/com/fr/design/ui/InsertStyle.js create mode 100644 designer-base/src/main/resources/com/fr/design/ui/help/demo.js create mode 100644 designer-base/src/main/resources/com/fr/design/ui/tpl.html create mode 100644 designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java create mode 100644 designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java create mode 100644 designer-base/src/test/java/com/fr/design/ui/StartComponent.java create mode 100644 designer-base/src/test/resources/com/fr/design/ui/demo.html create mode 100644 designer-base/src/test/resources/com/fr/design/ui/fineui.html create mode 100644 designer-base/src/test/resources/com/fr/design/ui/script/start.js diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 17a101b21..69de01d40 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -166,6 +166,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private static List mapWorkerList = new ArrayList(); private boolean imageCompress = false;//图片压缩 + // 开启内嵌web页面的调试窗口 + private boolean openDebug = false; /** * DesignerEnvManager. @@ -1393,6 +1395,13 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { reader.readXMLObject(this.configManager); } + private void readOpenDebug(XMLableReader reader) { + String tmpVal; + if (StringUtils.isNotBlank(tmpVal = reader.getElementValue())) { + this.openDebug = Boolean.parseBoolean(tmpVal); + } + } + public String getUUID() { return StringUtils.isEmpty(uuid) ? UUID.randomUUID().toString() : uuid; } @@ -1421,6 +1430,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.imageCompress = imageCompress; } + public boolean isOpenDebug() { + return openDebug; + } + + public void setOpenDebug(boolean openDebug) { + this.openDebug = openDebug; + } + /** * Read XML.
* The method will be invoked when read data from XML file.
@@ -1474,6 +1491,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readAlphaFineAttr(reader); } else if (name.equals("RecentColors")) { readRecentColor(reader); + } else if ("OpenDebug".equals(name)) { + readOpenDebug(reader); } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) { readDesignerPushUpdateAttr(reader); } else { @@ -1684,6 +1703,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeHttpsParas(writer); writeAlphaFineAttr(writer); writeRecentColor(writer); + writeOpenDebug(writer); writeDesignerPushUpdateAttr(writer); writer.end(); } @@ -1700,6 +1720,13 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } + private void writeOpenDebug(XMLPrintWriter writer) { + if (this.openDebug) { + writer.startTAG("OpenDebug"); + writer.textNode(String.valueOf(openDebug)); + writer.end(); + } + } //写入uuid private void writeUUID(XMLPrintWriter writer) { diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index e1c59c93a..af7daef83 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -18,6 +18,7 @@ import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; @@ -130,8 +131,9 @@ public class PreferencePane extends BasicPane { private UITextField jdkHomeTextField; private UICheckBox oracleSpace; private UISpinner cachingTemplateSpinner; - private UICheckBox joinProductImprove; - private UICheckBox autoPushUpdate; + private UICheckBox openDebugComboBox; + private UICheckBox joinProductImproveCheckBox; + private UICheckBox autoPushUpdateCheckBox; public PreferencePane() { this.initComponents(); @@ -170,13 +172,18 @@ public class PreferencePane extends BasicPane { oracleSpace = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Show_All_Oracle_Tables")); oraclePane.add(oracleSpace); + JPanel debuggerPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Basic_Develop_Tools")); + openDebugComboBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Open_Debug_Window")); + debuggerPane.add(openDebugComboBox, BorderLayout.CENTER); + advancePane.add(debuggerPane); + JPanel improvePane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); - joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); - improvePane.add(joinProductImprove); + joinProductImproveCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); + improvePane.add(joinProductImproveCheckBox); if (DesignerPushUpdateManager.getInstance().isAutoPushUpdateSupported()) { - autoPushUpdate = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); - improvePane.add(autoPushUpdate); + autoPushUpdateCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); + improvePane.add(autoPushUpdateCheckBox); } JPanel spaceUpPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -554,12 +561,14 @@ public class PreferencePane extends BasicPane { this.portEditor.setValue(new Integer(designerEnvManager.getEmbedServerPort())); + openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); + this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); - this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); + this.joinProductImproveCheckBox.setSelected(designerEnvManager.isJoinProductImprove()); - if (this.autoPushUpdate != null) { - this.autoPushUpdate.setSelected(designerEnvManager.isAutoPushUpdateEnabled()); + if (this.autoPushUpdateCheckBox != null) { + this.autoPushUpdateCheckBox.setSelected(designerEnvManager.isAutoPushUpdateEnabled()); } } @@ -617,11 +626,13 @@ public class PreferencePane extends BasicPane { designerEnvManager.setJettyServerPort(portEditor.getValue().intValue()); + designerEnvManager.setOpenDebug(openDebugComboBox.isSelected()); + designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); - designerEnvManager.setJoinProductImprove(this.joinProductImprove.isSelected()); - if (this.autoPushUpdate != null) { - designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdate.isSelected()); + designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); + if (this.autoPushUpdateCheckBox != null) { + designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected()); } designerEnvManager.setUndoLimit(maxUndoLimit.getSelectedIndex() * SELECTED_INDEX_5); diff --git a/designer-base/src/main/java/com/fr/design/ui/Assistant.java b/designer-base/src/main/java/com/fr/design/ui/Assistant.java new file mode 100644 index 000000000..601f0ac36 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/Assistant.java @@ -0,0 +1,53 @@ +package com.fr.design.ui; + +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.BrowserContext; +import com.teamdev.jxbrowser.chromium.ProtocolService; +import com.teamdev.jxbrowser.chromium.URLResponse; + +import java.io.DataInputStream; +import java.io.InputStream; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-07 + */ +public class Assistant { + + public static URLResponse inputStream2Response(InputStream inputStream, String filePath) throws Exception { + URLResponse response = new URLResponse(); + DataInputStream stream = new DataInputStream(inputStream); + byte[] data = new byte[stream.available()]; + stream.readFully(data); + response.setData(data); + String mimeType = getMimeType(filePath); + response.getHeaders().setHeader("Content-Type", mimeType); + return response; + } + + + private static String getMimeType(String path) { + if (StringUtils.isBlank(path)) { + return "text/html"; + } + if (path.endsWith(".html")) { + return "text/html"; + } + if (path.endsWith(".css")) { + return "text/css"; + } + if (path.endsWith(".js")) { + return "text/javascript"; + } + return "text/html"; + } + + public static void setEmbProtocolHandler(Browser browser, EmbProtocolHandler handler) { + BrowserContext browserContext = browser.getContext(); + ProtocolService protocolService = browserContext.getProtocolService(); + // 支持读取jar包中文件的自定义协议————emb:/com/fr/design/images/bbs.png + protocolService.setProtocolHandler("emb", handler); + } +} diff --git a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java new file mode 100644 index 000000000..6636e2874 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java @@ -0,0 +1,83 @@ +package com.fr.design.ui; + +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; +import com.fr.web.struct.AssembleComponent; +import com.fr.web.struct.AtomBuilder; +import com.fr.web.struct.PathGroup; +import com.fr.web.struct.category.ScriptPath; +import com.fr.web.struct.category.StylePath; +import com.teamdev.jxbrowser.chromium.ProtocolHandler; +import com.teamdev.jxbrowser.chromium.URLRequest; +import com.teamdev.jxbrowser.chromium.URLResponse; + +import java.io.InputStream; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-07 + */ +public class EmbProtocolHandler implements ProtocolHandler { + + private AssembleComponent component; + + public EmbProtocolHandler() { + + } + + public EmbProtocolHandler(AssembleComponent component) { + this.component = component; + } + + + @Override + public URLResponse onRequest(URLRequest req) { + try { + String path = req.getURL(); + if (path.startsWith("emb:dynamic")) { + URLResponse response = new URLResponse(); + response.setData(htmlText().getBytes()); + response.getHeaders().setHeader("Content-Type", "text/html"); + return response; + } else { + int index = path.indexOf("="); + if (index > 0) { + path = path.substring(index + 1); + } else { + path = path.substring(4); + } + InputStream inputStream = IOUtils.readResource(path); + return Assistant.inputStream2Response(inputStream, path); + } + } catch (Exception ignore) { + + } + return null; + } + + private String htmlText() { + PathGroup pathGroup = AtomBuilder.create().buildAssembleFilePath(ModernRequestClient.KEY, component); + StylePath[] stylePaths = pathGroup.toStylePathGroup(); + StringBuilder styleText = new StringBuilder(); + for (StylePath path : stylePaths) { + if (StringUtils.isNotBlank(path.toFilePath())) { + styleText.append(""); + } + } + String result = ModernUIConstants.HTML_TPL.replaceAll("##style##", styleText.toString()); + ScriptPath[] scriptPaths = pathGroup.toScriptPathGroup(); + StringBuilder scriptText = new StringBuilder(); + for (ScriptPath path : scriptPaths) { + if (StringUtils.isNotBlank(path.toFilePath())) { + scriptText.append(""); + } + } + result = result.replaceAll("##script##", scriptText.toString()); + return result; + } +} diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernRequestClient.java b/designer-base/src/main/java/com/fr/design/ui/ModernRequestClient.java new file mode 100644 index 000000000..8a19c84c8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/ModernRequestClient.java @@ -0,0 +1,22 @@ +package com.fr.design.ui; + +import com.fr.web.struct.browser.RequestClient; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-07 + */ +public enum ModernRequestClient implements RequestClient { + + KEY; + + @Override + public boolean isIE() { + return false; + } + + @Override + public boolean isLowIEVersion() { + return false; + }} diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java new file mode 100644 index 000000000..ed6fb542e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIConstants.java @@ -0,0 +1,15 @@ +package com.fr.design.ui; + +import com.fr.general.IOUtils; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-05 + */ +class ModernUIConstants { + + static final String SCRIPT_INIT_NAME_SPACE = IOUtils.readResourceAsString("/com/fr/design/ui/InitNameSpace.js"); + + static final String HTML_TPL = IOUtils.readResourceAsString("/com/fr/design/ui/tpl.html"); +} diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java new file mode 100644 index 000000000..a81d0dd90 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -0,0 +1,182 @@ +package com.fr.design.ui; + +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.BasicPane; +import com.fr.web.struct.AssembleComponent; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.BrowserPreferences; +import com.teamdev.jxbrowser.chromium.JSValue; +import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent; +import com.teamdev.jxbrowser.chromium.events.LoadAdapter; +import com.teamdev.jxbrowser.chromium.events.LoadListener; +import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; +import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; +import com.teamdev.jxbrowser.chromium.events.ScriptContextListener; +import com.teamdev.jxbrowser.chromium.swing.BrowserView; + +import javax.swing.JSplitPane; +import java.awt.BorderLayout; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-04 + * 用于加载html5的Swing容器,可以在设计选项设置中打开调试窗口,示例可查看:com.fr.design.ui.ModernUIPaneTest + */ +public class ModernUIPane extends BasicPane { + + private Browser browser; + private String namespace = "Pool"; + private String variable = "data"; + private String expression = "update()"; + + private ModernUIPane() { + initialize(); + } + + private void initialize() { + if (browser == null) { + setLayout(new BorderLayout()); + BrowserPreferences.setChromiumSwitches("--disable-google-traffic"); + if (DesignerEnvManager.getEnvManager().isOpenDebug()) { + JSplitPane splitPane = new JSplitPane(); + add(splitPane, BorderLayout.CENTER); + splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); + splitPane.setDividerLocation(500); + BrowserPreferences.setChromiumSwitches("--remote-debugging-port=9222"); + initializeBrowser(); + splitPane.setLeftComponent(new BrowserView(browser)); + Browser debugger = new Browser(); + debugger.loadURL(browser.getRemoteDebuggingURL()); + BrowserView debuggerView = new BrowserView(debugger); + splitPane.setRightComponent(debuggerView); + } else { + initializeBrowser(); + add(new BrowserView(browser), BorderLayout.CENTER); + } + } + } + + private void initializeBrowser() { + browser = new Browser(); + // 初始化的时候,就把命名空间对象初始化好,确保window.a.b.c("a.b.c"为命名空间)对象都是初始化过的 + browser.addScriptContextListener(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + event.getBrowser().executeJavaScript(String.format(ModernUIConstants.SCRIPT_INIT_NAME_SPACE, namespace)); + } + }); + } + + @Override + protected String title4PopupWindow() { + return "Modern"; + } + + + public void populate(final T t) { + browser.addLoadListener(new LoadAdapter() { + @Override + public void onFinishLoadingFrame(FinishLoadingEvent event) { + if (event.isMainFrame()) { + JSValue ns = event.getBrowser().executeJavaScriptAndReturnValue("window." + namespace); + ns.asObject().setProperty(variable, t); + } + } + }); + } + + public T update() { + JSValue jsValue = browser.executeJavaScriptAndReturnValue("window." + namespace + "." + expression); + if (jsValue.isObject()) { + return (T)jsValue.asJavaObject(); + } + return null; + } + + public static class Builder { + + private ModernUIPane pane = new ModernUIPane<>(); + + public Builder prepare(ScriptContextListener contextListener) { + pane.browser.addScriptContextListener(contextListener); + return this; + } + + public Builder prepare(LoadListener loadListener) { + pane.browser.addLoadListener(loadListener); + return this; + } + + /** + * 加载jar包中的资源 + * @param path 资源路径 + */ + public Builder withEMB(final String path) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler()); + pane.browser.loadURL("emb:" + path); + return this; + } + + /** + * 加载url指向的资源 + * @param url 文件的地址 + */ + public Builder withURL(final String url) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler()); + pane.browser.loadURL(url); + return this; + } + + /** + * 加载Atom组件 + * @param component Atom组件 + */ + public Builder withComponent(AssembleComponent component) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(component)); + pane.browser.loadURL("emb:dynamic"); + return this; + } + + /** + * 加载html文本内容 + * @param html 要加载html文本内容 + */ + public Builder withHTML(String html) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler()); + pane.browser.loadHTML(html); + return this; + } + + /** + * 设置该前端页面做数据交换所使用的对象 + * @param namespace 对象名 + */ + public Builder namespace(String namespace) { + pane.namespace = namespace; + return this; + } + + /** + * java端往js端传数据时使用的变量名字 + * @param name 变量的名字 + */ + public Builder variable(String name) { + pane.variable = name; + return this; + } + + /** + * js端往java端传数据时执行的函数表达式 + * @param expression 函数表达式 + */ + public Builder expression(String expression) { + pane.expression = expression; + return this; + } + + public ModernUIPane build() { + return pane; + } + } +} diff --git a/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js b/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js new file mode 100644 index 000000000..0274d5fa5 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js @@ -0,0 +1,12 @@ +var arr ="%s".split(".").reverse(); +var create = function (obj, names) { + var name = names.pop(); + if (!name) { + return; + } + if (!obj[name]) { + obj[name] = {}; + } + create(obj[name], names); +}; +create(window, arr); \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/InsertScript.js b/designer-base/src/main/resources/com/fr/design/ui/InsertScript.js new file mode 100644 index 000000000..8ad60313e --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/InsertScript.js @@ -0,0 +1,8 @@ +var arr = "%s".split(","); +var header = document.getElementsByTagName("head")[0]; +arr.forEach(function(el) { + var script = document.createElement("script") + script.type = "text/javascript"; + script.src = "emb:" + el; + header.appendChild(script); +}); \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/InsertStyle.js b/designer-base/src/main/resources/com/fr/design/ui/InsertStyle.js new file mode 100644 index 000000000..18ccb7e41 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/InsertStyle.js @@ -0,0 +1,9 @@ +var arr = "%s".split(","); +var header = document.getElementsByTagName("head")[0]; +arr.forEach(function(el) { + var css = document.createElement("link"); + css.type = "text/css"; + css.rel = "stylesheet"; + css.href = "emb:" + el; + header.appendChild(css); +}); \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/help/demo.js b/designer-base/src/main/resources/com/fr/design/ui/help/demo.js new file mode 100644 index 000000000..fd4694d1a --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/help/demo.js @@ -0,0 +1,220 @@ +window.addEventListener("load", function (ev) { + window.BI.i18nText = function(key) {return window.Pool.i18n.i18nText(key);} + var combo1 = BI.createWidget({ + type: "bi.vertical", + items: [ + { + type: "bi.text_value_combo", + text: "选项1", + width: 300, + items: [ + { + el: { + type: "bi.single_select_radio_item", + width: 290, + text: "选项1", + value: 1 + }, + text: "选项1", + value: 1, + lgap: 10 + }, + { + el: { + type: "bi.single_select_radio_item", + width: 290, + text: "选项2", + value: 2 + }, + lgap: 10, + text: "选项2", + value: 2 + }, + { + el: { + type: "bi.single_select_radio_item", + width: 290, + text: "选项3", + value: 3 + }, + lgap: 10, + text: "选项3", + value: 3 + } + ] + } + ] + }); + + var date = BI.createWidget({ + type: "bi.left", + items: [{ + el: { + type: "bi.date_time_combo", + value: { + year: 2018, + month: 9, + day: 28, + hour: 13, + minute: 31, + second: 1 + } + } + }] + }); + + var comboTree = BI.createWidget({ + type: "bi.vertical", + items: [ + { + type: "bi.tree_value_chooser_combo", + width: 300, + itemsCreator: function(op, callback) { + callback([ + { + id: 1, + text: "第1项", + value: "1" + }, + { + id: 2, + text: "第2项", + value: "2" + }, + { + id: 3, + text: "第3项", + value: "3", + open: true + }, + { + id: 11, + pId: 1, + text: "子项1", + value: "11" + }, + { + id: 12, + pId: 1, + text: "子项2", + value: "12" + }, + { + id: 13, + pId: 1, + text: "子项3", + value: "13" + }, + { + id: 31, + pId: 3, + text: "子项1", + value: "31" + }, + { + id: 32, + pId: 3, + text: "子项2", + value: "32" + }, + { + id: 33, + pId: 3, + text: "子项3", + value: "33" + } + ]); + } + } + ] + }); + + var color = BI.createWidget({ + type: "bi.left", + items: [{ + type: "bi.simple_color_chooser", + width: 24, + height: 24 + }, { + el: { + type: "bi.color_chooser", + width: 230, + height: 24 + }, + lgap: 10 + }] + }); + + var Slider = BI.inherit(BI.Widget, { + props: { + width: 300, + height: 50, + min: 0, + max: 100 + }, + + mounted: function() { + var o = this.options; + this.singleSliderInterval.setMinAndMax({ + min: o.min, + max: o.max + }); + + this.singleSliderInterval.setValue({ + min: 10, + max: 80 + }); + this.singleSliderInterval.populate(); + }, + + render: function() { + var self = this, + o = this.options; + return { + type: "bi.vertical", + element: this, + items: [ + { + type: "bi.interval_slider", + digit: 0, + width: o.width, + height: o.height, + ref: function(_ref) { + self.singleSliderInterval = _ref; + } + } + ] + }; + } + }); + BI.shortcut("demo.slider_interval", Slider); + var slider = BI.createWidget({ + type: "demo.slider_interval" + }); + + BI.createWidget({ + type:"bi.absolute", + element: "body", + items: [{ + el: combo1, + left: 100, + top: 100 + }, { + el : date, + left: 100, + top : 150 + }, { + el : comboTree, + left : 100, + top : 200 + }, { + el : color, + left : 100, + top : 250 + }, { + el : slider, + left : 400, + top : 100 + }] + }); +}); \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/tpl.html b/designer-base/src/main/resources/com/fr/design/ui/tpl.html new file mode 100644 index 000000000..92df75539 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/tpl.html @@ -0,0 +1,12 @@ + + + + + Title + ##style## + ##script## + + + + + \ No newline at end of file diff --git a/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java b/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java new file mode 100644 index 000000000..c875716a5 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java @@ -0,0 +1,30 @@ +package com.fr.design.ui; + +import com.fr.design.DesignerEnvManager; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.WindowConstants; +import java.awt.BorderLayout; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-07 + */ +public class FineUIDemo { + + public static void main(String... args) { + final JFrame frame = new JFrame(); + frame.setSize(1200, 800); + JPanel contentPane = (JPanel) frame.getContentPane(); + // 是否需要开启调试窗口 + DesignerEnvManager.getEnvManager().setOpenDebug(true); + + final ModernUIPane pane = new ModernUIPane.Builder() + .withComponent(StartComponent.KEY).build(); + contentPane.add(pane, BorderLayout.CENTER); + frame.setVisible(true); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + } +} diff --git a/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java b/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java new file mode 100644 index 000000000..f5c8aaaa9 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java @@ -0,0 +1,80 @@ +package com.fr.design.ui; + +import com.fr.design.DesignerEnvManager; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.WindowConstants; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-05 + */ +public class ModernUIPaneTest { + + public static void main(String... args) { + final JFrame frame = new JFrame(); + frame.setSize(1200, 800); + JPanel contentPane = (JPanel) frame.getContentPane(); + // 是否需要开启调试窗口 + DesignerEnvManager.getEnvManager().setOpenDebug(true); + final ModernUIPane pane = new ModernUIPane.Builder() + .withEMB("/com/fr/design/ui/demo.html").namespace("Pool").build(); + contentPane.add(pane, BorderLayout.CENTER); + + Model model = new Model(); + model.setAge(20); + model.setName("Pick"); + pane.populate(model); + + JPanel panel = new JPanel(new FlowLayout()); + contentPane.add(panel, BorderLayout.SOUTH); + JButton button = new JButton("点击我可以看到Swing的弹框,输出填写的信息"); + panel.add(button); + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Model returnValue = pane.update(); + if (returnValue != null) { + JOptionPane.showMessageDialog(frame, String.format("姓名为:%s,年龄为:%d", returnValue.getName(), returnValue.getAge())); + } + } + }); + frame.setVisible(true); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + } + + public static class Model { + private String name; + private int age; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public void print(String message) { + System.out.println(message); + } + + } + +} \ No newline at end of file diff --git a/designer-base/src/test/java/com/fr/design/ui/StartComponent.java b/designer-base/src/test/java/com/fr/design/ui/StartComponent.java new file mode 100644 index 000000000..7811142f0 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/ui/StartComponent.java @@ -0,0 +1,32 @@ +package com.fr.design.ui; + +import com.fr.web.struct.AssembleComponent; +import com.fr.web.struct.Atom; +import com.fr.web.struct.browser.RequestClient; +import com.fr.web.struct.category.ScriptPath; +import com.fr.web.struct.impl.FineUI; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-03-08 + */ +public class StartComponent extends AssembleComponent { + + public static final StartComponent KEY = new StartComponent(); + + private StartComponent() { + + } + + @Override + public ScriptPath script(RequestClient req) { + return ScriptPath.build("/com/fr/design/ui/script/start.js"); + } + + @Override + public Atom[] refer() { + return new Atom[] {FineUI.KEY}; + } + +} diff --git a/designer-base/src/test/resources/com/fr/design/ui/demo.html b/designer-base/src/test/resources/com/fr/design/ui/demo.html new file mode 100644 index 000000000..2beae25a7 --- /dev/null +++ b/designer-base/src/test/resources/com/fr/design/ui/demo.html @@ -0,0 +1,20 @@ + + + + + Title + + + +

测试页面,请点击最下面的按钮
+ + + + + \ No newline at end of file diff --git a/designer-base/src/test/resources/com/fr/design/ui/fineui.html b/designer-base/src/test/resources/com/fr/design/ui/fineui.html new file mode 100644 index 000000000..a02004a35 --- /dev/null +++ b/designer-base/src/test/resources/com/fr/design/ui/fineui.html @@ -0,0 +1,11 @@ + + + + + Title + + +
测试页面,请点击最下面的按钮
From 76fbbef18123c2c548f9e11326fc9cee1e416f1e Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 12 Apr 2019 14:13:42 +0800 Subject: [PATCH 024/196] =?UTF-8?q?KERNEL-442=20=E9=85=8D=E5=90=88?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=96=B0=E7=89=88=E6=9C=AC=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=95=86=E5=BA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/server/PluginManagerAction.java | 19 +++++++++++-- .../main/java/com/fr/design/upm/UPMPane.java | 27 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/upm/UPMPane.java diff --git a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java index ecd0d961a..840cab45e 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java @@ -1,9 +1,16 @@ package com.fr.design.actions.server; import com.fr.base.BaseUtils; +import com.fr.config.ServerPreferenceConfig; +import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.UIDialog; +import com.fr.design.extra.ShopDialog; import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.MenuKeySet; +import com.fr.design.upm.UPMPane; +import com.fr.general.IOUtils; import javax.swing.*; @@ -20,12 +27,20 @@ public class PluginManagerAction extends UpdateAction { this.setMenuKeySet(PLUGIN_MANAGER); this.setName(getMenuKeySet().getMenuKeySetName()); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/server/plugin.png")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/server/plugin.png")); } @Override public void actionPerformed(ActionEvent e) { - WebViewDlgHelper.createPluginDialog(); + // 可以启用新版本的插件商店(使用JxBrowser作为容器) + if (DesignerEnvManager.getEnvManager().isOpenDebug() + ||ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { + UPMPane upmPane = new UPMPane(); + UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), upmPane); + dlg.setVisible(true); + } else { + WebViewDlgHelper.createPluginDialog(); + } } public static final MenuKeySet PLUGIN_MANAGER = new MenuKeySet() { diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java new file mode 100644 index 000000000..e9d703225 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java @@ -0,0 +1,27 @@ +package com.fr.design.upm; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.ui.ModernUIPane; + +import java.awt.*; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + * Update Plugin Manager容器 + */ +public class UPMPane extends BasicPane { + @Override + protected String title4PopupWindow() { + return "UPM"; + } + + public UPMPane() { + setLayout(new BorderLayout()); + ModernUIPane modernUIPane = new ModernUIPane.Builder() + .withURL("https://market.fanruan.com") + .build(); + add(modernUIPane, BorderLayout.CENTER); + } +} From 2c976201b996e75e195abac47b708d3ed6f1953f Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 12 Apr 2019 15:51:54 +0800 Subject: [PATCH 025/196] =?UTF-8?q?KERNEL-442=20=E9=85=8D=E5=90=88?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=96=B0=E7=89=88=E6=9C=AC=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=95=86=E5=BA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/server/PluginManagerAction.java | 6 +- .../java/com/fr/design/ui/ModernUIPane.java | 8 +++ .../src/main/java/com/fr/design/upm/UPM.java | 63 +++++++++++++++++++ .../java/com/fr/design/upm/UPMBridge.java | 31 +++++++++ .../java/com/fr/design/upm/UPMDialog.java | 34 ++++++++++ .../main/java/com/fr/design/upm/UPMPane.java | 36 ++++++++++- .../java/com/fr/design/upm/WarnComponent.java | 33 ++++++++++ .../fr/design/upm/event/DownloadEvent.java | 13 ++++ .../main/resources/com/fr/design/upm/warn.js | 20 ++++++ 9 files changed, 238 insertions(+), 6 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/upm/UPM.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UPMBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UPMDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/WarnComponent.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java create mode 100644 designer-base/src/main/resources/com/fr/design/upm/warn.js diff --git a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java index 840cab45e..aa2eef705 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java @@ -9,6 +9,8 @@ import com.fr.design.extra.ShopDialog; import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.MenuKeySet; +import com.fr.design.upm.UPM; +import com.fr.design.upm.UPMDialog; import com.fr.design.upm.UPMPane; import com.fr.general.IOUtils; @@ -35,9 +37,7 @@ public class PluginManagerAction extends UpdateAction { // 可以启用新版本的插件商店(使用JxBrowser作为容器) if (DesignerEnvManager.getEnvManager().isOpenDebug() ||ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { - UPMPane upmPane = new UPMPane(); - UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), upmPane); - dlg.setVisible(true); + UPM.showUPMDialog(); } else { WebViewDlgHelper.createPluginDialog(); } diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index 0198ebfe7..5f6c8c955 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -98,6 +98,14 @@ public class ModernUIPane extends BasicPane { }); } + /** + * 转向一个新的地址,相当于重新加载 + * @param url 新的地址 + */ + public void redirect(String url) { + browser.loadURL(url); + } + @Override protected String title4PopupWindow() { return "Modern"; diff --git a/designer-base/src/main/java/com/fr/design/upm/UPM.java b/designer-base/src/main/java/com/fr/design/upm/UPM.java new file mode 100644 index 000000000..b8b95fab6 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UPM.java @@ -0,0 +1,63 @@ +package com.fr.design.upm; + +import com.fr.base.FRContext; +import com.fr.design.dialog.UIDialog; +import com.fr.design.mainframe.DesignerContext; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.stable.StableUtils; +import com.fr.workspace.Workspace; +import com.fr.workspace.WorkspaceEvent; + +import javax.swing.*; +import java.io.File; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + */ +public class UPM { + + private static final String MAIN_RESOURCE_PATH = "/upm/plugin.html"; + + public static String installHome = FRContext.getCommonOperator().getWebRootPath(); + + private static UIDialog dialog = null; + + static { + EventDispatcher.listen(WorkspaceEvent.AfterSwitch, new Listener() { + @Override + public void on(Event event, Workspace param) { + installHome = FRContext.getCommonOperator().getWebRootPath(); + } + }); + } + + public static boolean checkUPMResourcesExist() { + String mainJsPath = StableUtils.pathJoin(installHome, MAIN_RESOURCE_PATH); + File file = new File(mainJsPath); + return file.exists(); + } + + public static String getMainResourcePath() { + return "file:///" + StableUtils.pathJoin(installHome, MAIN_RESOURCE_PATH); + } + + public static void showUPMDialog() { + UPMPane upmPane = new UPMPane(); + if (dialog == null) { + dialog = new UPMDialog(DesignerContext.getDesignerFrame(), upmPane); + } + dialog.setVisible(true); + } + + public static void closeWindow() { + if (dialog != null) { + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dialog.setVisible(false); + dialog = null; + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java new file mode 100644 index 000000000..4fa98ed32 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java @@ -0,0 +1,31 @@ +package com.fr.design.upm; + +import com.fr.design.upm.event.DownloadEvent; +import com.fr.event.EventDispatcher; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + * 桥接Java和JavaScript的类 + */ +public class UPMBridge { + + private static UPMBridge bridge = new UPMBridge(); + + public static UPMBridge getBridge() { + return bridge; + } + + public void startDownload() { + // do something..... + EventDispatcher.fire(DownloadEvent.FINISH, "start"); + } + + + + public void closeWindow() { + UPM.closeWindow(); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java b/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java new file mode 100644 index 000000000..d5a2f4b79 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java @@ -0,0 +1,34 @@ +package com.fr.design.upm; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StableUtils; + +import javax.swing.*; +import java.awt.*; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + */ +public class UPMDialog extends UIDialog { + + private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); + + public UPMDialog(Frame frame, BasicPane pane) { + super(frame); + setUndecorated(true); + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); + setSize(DEFAULT_SHOP); + GUICoreUtils.centerWindow(this); + setResizable(false); + } + + @Override + public void checkValid() throws Exception { + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java index e9d703225..6480d8ad7 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java @@ -1,7 +1,15 @@ package com.fr.design.upm; +import com.fr.base.FRContext; import com.fr.design.dialog.BasicPane; import com.fr.design.ui.ModernUIPane; +import com.fr.design.upm.event.DownloadEvent; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.teamdev.jxbrowser.chromium.JSValue; +import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; +import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; import java.awt.*; @@ -12,6 +20,9 @@ import java.awt.*; * Update Plugin Manager容器 */ public class UPMPane extends BasicPane { + + private ModernUIPane modernUIPane; + @Override protected String title4PopupWindow() { return "UPM"; @@ -19,9 +30,28 @@ public class UPMPane extends BasicPane { public UPMPane() { setLayout(new BorderLayout()); - ModernUIPane modernUIPane = new ModernUIPane.Builder() - .withURL("https://market.fanruan.com") - .build(); + if (false) { + modernUIPane = new ModernUIPane.Builder<>() + .withURL(UPM.getMainResourcePath()) + .build(); + } else { + modernUIPane = new ModernUIPane.Builder<>() + .withComponent(WarnComponent.KEY) + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginBridgeTest", UPMBridge.getBridge()); + } + }).build(); + EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + @Override + public void on(Event event, String param) { + modernUIPane.redirect(UPM.getMainResourcePath()); + } + }); + } add(modernUIPane, BorderLayout.CENTER); } + } diff --git a/designer-base/src/main/java/com/fr/design/upm/WarnComponent.java b/designer-base/src/main/java/com/fr/design/upm/WarnComponent.java new file mode 100644 index 000000000..3ab134acf --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/WarnComponent.java @@ -0,0 +1,33 @@ +package com.fr.design.upm; + +import com.fr.web.struct.AssembleComponent; +import com.fr.web.struct.Atom; +import com.fr.web.struct.browser.RequestClient; +import com.fr.web.struct.category.ScriptPath; +import com.fr.web.struct.impl.FineUI; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + */ +public class WarnComponent extends AssembleComponent { + + public static final WarnComponent KEY = new WarnComponent(); + + private WarnComponent() { + + } + + @Override + public ScriptPath script(RequestClient req) { + return ScriptPath.build("com/fr/design/upm/warn.js"); + } + + @Override + public Atom[] refer() { + return new Atom[]{ + FineUI.KEY + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java b/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java new file mode 100644 index 000000000..7ac53dd17 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java @@ -0,0 +1,13 @@ +package com.fr.design.upm.event; + +import com.fr.event.Event; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + */ +public enum DownloadEvent implements Event { + + FINISH +} diff --git a/designer-base/src/main/resources/com/fr/design/upm/warn.js b/designer-base/src/main/resources/com/fr/design/upm/warn.js new file mode 100644 index 000000000..f09b9b9ad --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/upm/warn.js @@ -0,0 +1,20 @@ +window.onload = function () { + let button = BI.createWidget({ + type : "bi.button", + text : "点击我跳转到插件商店", + level: 'common', + height: 30, + handler : function () { + PluginBridgeTest.startDownload(); + } + }); + BI.createWidget({ + type:"bi.absolute", + element: "body", + items: [{ + el: button, + left: 100, + top: 100 + }] + }); +}; \ No newline at end of file From f1dd6f6fe56b1dded29f98e934c346bde517395f Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 10:28:19 +0800 Subject: [PATCH 026/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=EF=BC=88=E9=83=A8=E5=88=86?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateDialog.java | 127 +++++++++++++ .../push/DesignerPushUpdateManager.java | 101 ++++++++-- .../onlineupdate/push/DesignerUpdateInfo.java | 19 +- .../java/com/fr/design/ui/ModernUIPane.java | 10 +- .../ui/onlineupdate/push/pushUpdate.html | 179 ++++++++++++++++++ .../push/DesignerPushUpdateDialogTest.java | 23 +++ .../push/DesignerUpdateInfoTest.java | 10 +- .../fr/start/module/DesignerActivator.java | 2 + 8 files changed, 441 insertions(+), 30 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java create mode 100644 designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html create mode 100644 designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java new file mode 100644 index 000000000..ab2d3447a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java @@ -0,0 +1,127 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.design.dialog.UIDialog; +import com.fr.design.ui.ModernUIPane; +import com.fr.design.utils.gui.GUICoreUtils; + +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Frame; + +/** + * Created by plough on 2019/4/10. + */ +class DesignerPushUpdateDialog extends UIDialog { + public static final Dimension DEFAULT = new Dimension(640, 320); + + private ModernUIPane jsPane; + + private DesignerPushUpdateDialog(Frame parent) { + super(parent); + setModal(true); + initComponents(); + } + + static void createAndShow(Frame parent, DesignerUpdateInfo updateInfo) { + DesignerPushUpdateDialog dialog = new DesignerPushUpdateDialog(parent); + dialog.populate(updateInfo); + dialog.showDialog(); + } + + private void initComponents() { + JPanel contentPane = (JPanel) getContentPane(); + contentPane.setLayout(new BorderLayout()); + + jsPane = new ModernUIPane.Builder() + .withEMB("/com/fr/design/ui/onlineupdate/push/pushUpdate.html").namespace("Pool").build(); + + contentPane.add(jsPane); + } + + private void populate(DesignerUpdateInfo updateInfo) { + Model model = createModel(updateInfo); + jsPane.populate(model); + } + + private Model createModel(DesignerUpdateInfo updateInfo) { + Model model = new Model(); + model.setVersion(updateInfo.getPushVersion()); + model.setContent(updateInfo.getPushContent()); + model.setMoreInfoUrl(updateInfo.getMoreInfoUrl()); + model.setBackgroundUrl(updateInfo.getBackgroundUrl()); + return model; + } + + @Override + public void checkValid() throws Exception { + // do nothing + } + + /** + * 显示窗口 + */ + private void showDialog() { + setSize(DEFAULT); + setUndecorated(true); + GUICoreUtils.centerWindow(this); + setVisible(true); + } + + public class Model { + private String version; + private String content; + private String moreInfoUrl; + private String backgroundUrl; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getMoreInfoUrl() { + return moreInfoUrl; + } + + public void setMoreInfoUrl(String moreInfoUrl) { + this.moreInfoUrl = moreInfoUrl; + } + + public String getBackgroundUrl() { + return backgroundUrl; + } + + public void setBackgroundUrl(String backgroundUrl) { + this.backgroundUrl = backgroundUrl; + } + + public void updateNow() { + DesignerPushUpdateManager.getInstance().doUpdate(); + exit(); + } + + public void remindNextTime() { + exit(); + } + + public void skipThisVersion() { + DesignerPushUpdateManager.getInstance().skipCurrentPushVersion(); + exit(); + } + + private void exit() { + DesignerPushUpdateDialog.this.dialogExit(); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java index 3e9abd982..ea80d122e 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java @@ -1,16 +1,21 @@ package com.fr.design.onlineupdate.push; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; import com.fr.general.GeneralUtils; import com.fr.general.http.HttpClient; import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; /** * Created by plough on 2019/4/8. */ public class DesignerPushUpdateManager { + private static final String SPLIT_CHAR = "-"; private static DesignerPushUpdateManager singleton; private DesignerUpdateInfo updateInfo; private DesignerPushUpdateConfigManager config; @@ -26,17 +31,31 @@ public class DesignerPushUpdateManager { return singleton; } - private void initUpdateInfo() { - String currentVersion = GeneralUtils.readFullBuildNO(); + private void initUpdateInfo(String currentVersion, String latestVersion) { + String lastIgnoredVersion = config.getLastIgnoredVersion(); + String updatePushInfo = CloudCenter.getInstance().acquireUrlByKind("update.push"); + JSONObject pushData = new JSONObject(updatePushInfo); + + updateInfo = new DesignerUpdateInfo(currentVersion, latestVersion, lastIgnoredVersion, pushData); + } - // todo:耗时请求,可能需要优化 + private String getFullLatestVersion() { HttpClient hc = new HttpClient(CloudCenter.getInstance().acquireUrlByKind("jar10.update")); - String latestVersion = new JSONObject(hc.getResponseText()).optString("versionNO"); + return new JSONObject(hc.getResponseText()).optString("buildNO"); + } - String updatePushInfo = CloudCenter.getInstance().acquireUrlByKind("update.push"); - JSONObject pushData = new JSONObject(updatePushInfo); + private String getVersionByFullNO(String fullNO) { + if (fullNO.contains(SPLIT_CHAR)) { + fullNO = fullNO.substring(fullNO.lastIndexOf(SPLIT_CHAR) + 1); + } + return fullNO; + } - updateInfo = new DesignerUpdateInfo(currentVersion, latestVersion, pushData); + private String getPrefixByFullNO(String fullNO) { + if (fullNO.contains(SPLIT_CHAR)) { + return fullNO.substring(0, fullNO.lastIndexOf(SPLIT_CHAR)); + } + return StringUtils.EMPTY; } /** @@ -57,18 +76,72 @@ public class DesignerPushUpdateManager { /** * 检查更新,如果有合适的更新版本,则弹窗 */ - public void popUpDialog() { - if (!shouldPopUp()) { - return; - } - // todo: do pop + public void checkAndPop() { + new Thread() { + @Override + public void run() { + if (!shouldPopUp()) { + FineLoggerFactory.getLogger().debug("skip push update"); + return; + } + // todo: do pop + final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + DesignerPushUpdateDialog.createAndShow(designerFrame, updateInfo); + } + }.start(); } private boolean shouldPopUp() { if (updateInfo == null) { - initUpdateInfo(); + String fullCurrentVersion = GeneralUtils.readFullBuildNO(); + // todo: 开发测试用 + if (!fullCurrentVersion.contains(SPLIT_CHAR)) { + fullCurrentVersion = "stable-2019.01.03.17.01.05.257"; + } + + + String fullLatestVersion = getFullLatestVersion(); + boolean isValidJarVersion = isValidJarVersion(fullCurrentVersion, fullLatestVersion); + if (!isValidJarVersion) { + FineLoggerFactory.getLogger().info("Jar version is not valid for push update."); + return false; + } else { + String currentVersion = getVersionByFullNO(fullCurrentVersion); + String latestVersion = getVersionByFullNO(fullLatestVersion); + initUpdateInfo(currentVersion, latestVersion); + } } - return isAutoPushUpdateSupported() && updateInfo.hasNewPushVersion(config.getLastIgnoredVersion()); + return isAutoPushUpdateSupported() && updateInfo.hasNewPushVersion(); + } + + private boolean isValidJarVersion(String fullCurrentVersion, String fullLatestVersion) { + // todo: 目前设定的逻辑是 feature/release/stable 都弹,且不区分版本号。后期肯定要变的,注释代码先留着 +// // 无效的情况: +// // 1. 版本号格式有误 +// // 2. 当前用的是 release 或 feature 的 jar 包 +// // 3. 代码启动的 +// String prefix = getPrefixByFullNO(fullLatestVersion); +// return StringUtils.isNotEmpty(prefix) && fullCurrentVersion.startsWith(prefix); + + // 无效的情况: + // 1. 版本号格式有误(正常情况下都有前缀,只有异常的时候才可能出现) + // 2. 代码启动的(fullCurrentVersion 为"不是安装版本") + String prefix = getPrefixByFullNO(fullLatestVersion); + return StringUtils.isNotEmpty(prefix) && fullCurrentVersion.contains(SPLIT_CHAR); + } + + /** + * 跳转到更新升级窗口,并自动开始更新 + */ + void doUpdate() { + // todo + } + + /** + * 跳过当前的推送版本 + */ + void skipCurrentPushVersion() { + // todo } } diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java index 0c3ecff4c..8301d193e 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java @@ -17,15 +17,17 @@ class DesignerUpdateInfo { private final String currentVersion; // 当前版本 private final String latestVersion; // 最新版本 + private final String lastIgnoredVersion; // 最近一次跳过的版本 private final String pushVersion; // 推送版本 private final String pushContent; // 推送更新内容 private final String backgroundUrl; // 推送背景图片 url private final String moreInfoUrl; // 更多新特性 - DesignerUpdateInfo(String currentVersion, String latestVersion, JSONObject pushData) { + DesignerUpdateInfo(String currentVersion, String latestVersion, String lastIgnoredVersion, JSONObject pushData) { this.currentVersion = currentVersion; this.latestVersion = latestVersion; + this.lastIgnoredVersion = lastIgnoredVersion; this.pushVersion = pushData.optString(KEY_VERSION); this.pushContent = pushData.optString(KEY_CONTENT); @@ -39,6 +41,7 @@ class DesignerUpdateInfo { } private boolean hasEmptyField() { + // lastIgnoredVersion 可以为空 return StringUtils.isEmpty(currentVersion) || StringUtils.isEmpty(latestVersion) || StringUtils.isEmpty(pushVersion) @@ -51,14 +54,18 @@ class DesignerUpdateInfo { return currentVersion; } - String getPushVersion() { - return pushVersion; - } - String getLatestVersion() { return latestVersion; } + public String getLastIgnoredVersion() { + return lastIgnoredVersion; + } + + String getPushVersion() { + return pushVersion; + } + String getPushContent() { return pushContent; } @@ -71,7 +78,7 @@ class DesignerUpdateInfo { return moreInfoUrl; } - boolean hasNewPushVersion(String lastIgnoredVersion) { + boolean hasNewPushVersion() { boolean result = ComparatorUtils.compare(pushVersion, currentVersion) > 0 && ComparatorUtils.compare(pushVersion, latestVersion) <= 0; if (StringUtils.isNotEmpty(lastIgnoredVersion)) { diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index a81d0dd90..81f9e051b 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -75,13 +75,11 @@ public class ModernUIPane extends BasicPane { public void populate(final T t) { - browser.addLoadListener(new LoadAdapter() { + browser.addScriptContextListener(new ScriptContextAdapter() { @Override - public void onFinishLoadingFrame(FinishLoadingEvent event) { - if (event.isMainFrame()) { - JSValue ns = event.getBrowser().executeJavaScriptAndReturnValue("window." + namespace); - ns.asObject().setProperty(variable, t); - } + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue ns = event.getBrowser().executeJavaScriptAndReturnValue("window." + namespace); + ns.asObject().setProperty(variable, t); } }); } diff --git a/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html b/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html new file mode 100644 index 000000000..323295248 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html @@ -0,0 +1,179 @@ + + + + + Push Update + + + + + + + + \ No newline at end of file diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java new file mode 100644 index 000000000..841a19429 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java @@ -0,0 +1,23 @@ +package com.fr.design.onlineupdate.push; + +import com.fr.design.DesignerEnvManager; +import com.fr.json.JSONObject; + +/** + * Created by plough on 2019/4/10. + */ +public class DesignerPushUpdateDialogTest { + + public static void main(String[] args) { + DesignerEnvManager.getEnvManager().setOpenDebug(true); + + JSONObject jo = JSONObject.create(); + jo.put("version", "2019.03.06.04.02.43.6"); + jo.put("content", "test content"); + jo.put("more", "http://baidu.com"); + jo.put("background", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1555043827901&di=fc266992abef5a7e13b4e0cb98975a75&imgtype=0&src=http%3A%2F%2Fi5.3conline.com%2Fimages%2Fpiclib%2F201203%2F20%2Fbatch%2F1%2F130280%2F1332249463721rez0li5fg0_medium.jpg"); + DesignerUpdateInfo mockUpdateInfo = new DesignerUpdateInfo("111.22.11", "2211.231.1", "11.23.1", jo); + + DesignerPushUpdateDialog.createAndShow(null, mockUpdateInfo); + } +} diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java index b346d9b4a..5736793fd 100644 --- a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java +++ b/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertTrue; public class DesignerUpdateInfoTest { private static final String CURRENT_VERSION = "2018.09.03.xx"; private static final String LATEST_VERSION = "2019.04.03.yy"; + private static final String LAST_IGNORED_VERSION = "2019.02.03.yy"; private static final String PUSH_VERSION = "2019.01.03.21.11"; private static final String PUSH_CONTENT = "the update desc content"; private static final String PUSH_BACKGROUND = "http://image.fr.com/123.jpg"; @@ -33,13 +34,14 @@ public class DesignerUpdateInfoTest { pushData.put("background", PUSH_BACKGROUND); pushData.put("more", PUSH_MORE); - updateInfo = new DesignerUpdateInfo(CURRENT_VERSION, LATEST_VERSION, pushData); + updateInfo = new DesignerUpdateInfo(CURRENT_VERSION, LATEST_VERSION, LAST_IGNORED_VERSION, pushData); } @Test public void testGetters() { assertEquals(CURRENT_VERSION, updateInfo.getCurrentVersion()); assertEquals(LATEST_VERSION, updateInfo.getLatestVersion()); + assertEquals(LAST_IGNORED_VERSION, updateInfo.getLastIgnoredVersion()); assertEquals(PUSH_VERSION, updateInfo.getPushVersion()); assertEquals(PUSH_CONTENT, updateInfo.getPushContent()); assertEquals(PUSH_BACKGROUND, updateInfo.getBackgroundUrl()); @@ -79,14 +81,14 @@ public class DesignerUpdateInfoTest { pushData.put("content", PUSH_CONTENT); pushData.put("background", PUSH_BACKGROUND); pushData.put("more", PUSH_MORE); - DesignerUpdateInfo updateInfo = new DesignerUpdateInfo(Y, Z, pushData); - return updateInfo.hasNewPushVersion(X0); + DesignerUpdateInfo updateInfo = new DesignerUpdateInfo(Y, Z, X0, pushData); + return updateInfo.hasNewPushVersion(); } @Test public void testParameterValidation() { try { - DesignerUpdateInfo updateInfo = new DesignerUpdateInfo(null, null, new JSONObject()); + DesignerUpdateInfo updateInfo = new DesignerUpdateInfo(null, null, null, new JSONObject()); Assert.fail("should not reach here!"); } catch (InvalidParameterException e) { // do nothing diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index f360f24b9..f4bb4acaa 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -53,6 +53,7 @@ import com.fr.design.mainframe.loghandler.DesignerLogAppender; import com.fr.design.mainframe.loghandler.LogMessageBar; import com.fr.design.mainframe.socketio.DesignerSocketIO; import com.fr.design.module.DesignModuleFactory; +import com.fr.design.onlineupdate.push.DesignerPushUpdateManager; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; @@ -129,6 +130,7 @@ public class DesignerActivator extends Activator { loadLogAppender(); DesignerSocketIO.update(); UserInfoPane.getInstance().updateBBSUserInfo(); + DesignerPushUpdateManager.getInstance().checkAndPop(); } private void loadLogAppender() { From f03299ee56733349414158e2a27f12d7ddad38e0 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 10:33:43 +0800 Subject: [PATCH 027/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/onlineupdate/push/DesignerPushUpdateManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java index ea80d122e..e24faacf6 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java @@ -84,7 +84,6 @@ public class DesignerPushUpdateManager { FineLoggerFactory.getLogger().debug("skip push update"); return; } - // todo: do pop final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); DesignerPushUpdateDialog.createAndShow(designerFrame, updateInfo); } From d842f295bbd7fbd74f382ff179ee273c96c2657f Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 12:26:20 +0800 Subject: [PATCH 028/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateDialog.java | 4 + .../ui/onlineupdate/push/pushUpdate.html | 222 +++++++----------- 2 files changed, 93 insertions(+), 133 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java index ab2d3447a..9178484f8 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java @@ -120,6 +120,10 @@ class DesignerPushUpdateDialog extends UIDialog { exit(); } + public String i18nText(String key) { + return com.fr.design.i18n.Toolkit.i18nText(key); + } + private void exit() { DesignerPushUpdateDialog.this.dialogExit(); } diff --git a/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html b/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html index 323295248..e0007c9dc 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html +++ b/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html @@ -30,148 +30,104 @@ From a2b246c1dc16dd8f256f38293710ff6eb67921fb Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 14:04:45 +0800 Subject: [PATCH 029/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateManager.java | 13 ++++++++++--- .../onlineupdate/push/DesignerUpdateInfo.java | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java index e24faacf6..c31b61336 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java @@ -5,12 +5,14 @@ import com.fr.design.mainframe.DesignerFrame; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; import com.fr.general.GeneralUtils; -import com.fr.general.http.HttpClient; +import com.fr.general.http.HttpToolbox; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; +import java.io.IOException; + /** * Created by plough on 2019/4/8. */ @@ -40,8 +42,13 @@ public class DesignerPushUpdateManager { } private String getFullLatestVersion() { - HttpClient hc = new HttpClient(CloudCenter.getInstance().acquireUrlByKind("jar10.update")); - return new JSONObject(hc.getResponseText()).optString("buildNO"); + try { + String res = HttpToolbox.get(CloudCenter.getInstance().acquireUrlByKind("jar10.update")); + return new JSONObject(res).optString("buildNO"); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return StringUtils.EMPTY; } private String getVersionByFullNO(String fullNO) { diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java index 8301d193e..6d7bd93a3 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java @@ -58,7 +58,7 @@ class DesignerUpdateInfo { return latestVersion; } - public String getLastIgnoredVersion() { + String getLastIgnoredVersion() { return lastIgnoredVersion; } From 519b8fa073f7ecfd8e653d8c1986455174e04147 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Mon, 15 Apr 2019 14:57:56 +0800 Subject: [PATCH 030/196] =?UTF-8?q?upload=E6=96=B9=E6=B3=95=E5=8E=9F?= =?UTF-8?q?=E5=85=88=E7=9A=84=E5=86=99=E6=B3=95=E5=8F=AF=E8=83=BD=E4=BC=9A?= =?UTF-8?q?=E5=AF=BC=E8=87=B4zip=E6=96=87=E4=BB=B6=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E8=A7=A3=E5=8E=8B=EF=BC=8C=E6=89=80=E4=BB=A5?= =?UTF-8?q?=E6=8D=A2=E7=A7=8D=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/FileEntityBuilder.java | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index e9eec71b8..c23a3b999 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -2,7 +2,6 @@ package com.fr.design.mainframe.messagecollect.entity; import com.fr.general.CloudCenter; import com.fr.general.IOUtils; -import com.fr.general.http.HttpRequestType; import com.fr.general.http.HttpToolbox; import com.fr.json.JSONArray; import com.fr.json.JSONException; @@ -13,18 +12,24 @@ import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.third.org.apache.http.entity.mime.MultipartEntityBuilder; -import com.fr.third.org.apache.http.entity.mime.content.FileBody; +import com.fr.third.org.apache.http.HttpEntity; +import com.fr.third.org.apache.http.HttpResponse; +import com.fr.third.org.apache.http.client.HttpClient; +import com.fr.third.org.apache.http.client.methods.HttpPut; +import com.fr.third.org.apache.http.entity.FileEntity; +import com.fr.third.org.apache.http.impl.client.DefaultHttpClient; +import com.fr.third.org.apache.http.util.EntityUtils; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; +import static com.fr.third.org.apache.http.HttpStatus.SC_OK; + /** * @author alex sung * @date 2019/4/8 @@ -35,6 +40,7 @@ public class FileEntityBuilder { private static final String OPERATION_URL = "https://cloud.fanruan.com/config/protect/operation"; private static final String ATTR_SIGNATURE = "signature"; private static final String ATTR_KEY = "key"; + private static final String FOCUS_POINT_FILE_ROOT_PATH = "FocusPoint"; /** * 文件名 */ @@ -118,15 +124,30 @@ public class FileEntityBuilder { * @throws IOException */ public static void uploadFile(File file, String keyFileName) throws IOException { - String url = generateSignedUploadUrl("FocusPoint/"+keyFileName); - if(StringUtils.isEmpty(url)){ - FineLoggerFactory.getLogger().error("url is null."); - }else { - MultipartEntityBuilder builder = MultipartEntityBuilder.create() - .addPart("file", new FileBody(file)); - Map headers = new HashMap(); - headers.put("Content-Type", "application/zip"); - HttpToolbox.upload(url, builder, Charset.forName("utf-8"), headers, HttpRequestType.PUT); + HttpClient httpclient = new DefaultHttpClient(); + try { + String signedUrl = generateSignedUploadUrl(FOCUS_POINT_FILE_ROOT_PATH + File.separator +keyFileName); + if(StringUtils.isEmpty(signedUrl)){ + FineLoggerFactory.getLogger().error("signedUrl is null."); + return; + } + HttpPut httpPost = new HttpPut(signedUrl); + httpPost.addHeader("Content-Type","application/octet-stream"); + FileEntity fileEntity = new FileEntity(file); + httpPost.setEntity(fileEntity); + HttpResponse response = httpclient.execute(httpPost); + + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode == SC_OK) { + HttpEntity resEntity = response.getEntity(); + EntityUtils.consume(resEntity); + } else { + HttpEntity entity = response.getEntity(); + String result = EntityUtils.toString(entity, "utf-8"); + FineLoggerFactory.getLogger().info("upload file result:" + result); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } From 8f7f1028e151dddc18b84758e9b816fa1c6a63e8 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 16:02:18 +0800 Subject: [PATCH 031/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateManager.java | 10 +++++++- .../ui/dialog/UpdateMainDialog.java | 25 ++++++++++++++++++- .../fr/start/module/DesignerActivator.java | 13 +++++++++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java index c31b61336..6e787166e 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java @@ -2,6 +2,7 @@ package com.fr.design.onlineupdate.push; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.onlineupdate.ui.dialog.UpdateMainDialog; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; import com.fr.general.GeneralUtils; @@ -141,7 +142,14 @@ public class DesignerPushUpdateManager { * 跳转到更新升级窗口,并自动开始更新 */ void doUpdate() { - // todo + new Thread() { + @Override + public void run() { + UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); + dialog.setAutoUpdateAfterInit(); + dialog.showDialog(); + } + }.start(); } /** diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java index 570042d4e..9e1f22b6b 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -59,7 +59,14 @@ import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -137,6 +144,8 @@ public class UpdateMainDialog extends UIDialog { private String lastUpdateCacheTime; private String lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; + private boolean autoUpdateAfterInit = false; // 是否在加载结束后,自动开始更新 + public UpdateMainDialog(Dialog parent) { super(parent); initComponents(); @@ -148,6 +157,13 @@ public class UpdateMainDialog extends UIDialog { initComponents(); } + /** + * 等待面板初始化结束后,点击"更新"按钮。 + */ + public void setAutoUpdateAfterInit() { + autoUpdateAfterInit = true; + } + private void initUpdateActionPane() { double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; @@ -428,6 +444,7 @@ public class UpdateMainDialog extends UIDialog { getUpdateInfoSuccess = true; //step4:update cache file,start from cacheRecordTime,end latest server jartime updateCachedInfoFile(jsonArray); + afterInit(); } catch (Exception e) { getUpdateInfoSuccess = true; FineLoggerFactory.getLogger().error(e.getMessage()); @@ -436,6 +453,12 @@ public class UpdateMainDialog extends UIDialog { }; } + private void afterInit() { + if (autoUpdateAfterInit) { + updateButton.doClick(); + } + } + //从文件中读取缓存的更新信息 private void getCachedUpdateInfo(String keyword) throws Exception { String cacheInfoPath = getUpdateCacheInfo(); diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index f4bb4acaa..4e36ac20c 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -21,6 +21,7 @@ import com.fr.design.actions.insert.flot.FormulaFloatAction; import com.fr.design.actions.insert.flot.ImageFloatAction; import com.fr.design.actions.insert.flot.TextBoxFloatAction; import com.fr.design.bridge.DesignToolbarProvider; +import com.fr.design.event.DesignerOpenedListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.form.parameter.FormParaDesigner; import com.fr.design.fun.ElementUIProvider; @@ -35,6 +36,7 @@ import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.javascript.ProcessTransitionAdapter; import com.fr.design.mainframe.BaseJForm; import com.fr.design.mainframe.CellElementPropertyPane; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.ElementCaseThumbnail; @@ -130,7 +132,16 @@ public class DesignerActivator extends Activator { loadLogAppender(); DesignerSocketIO.update(); UserInfoPane.getInstance().updateBBSUserInfo(); - DesignerPushUpdateManager.getInstance().checkAndPop(); + checkUpdateLater(); + } + + private void checkUpdateLater() { + DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + DesignerPushUpdateManager.getInstance().checkAndPop(); + } + }); } private void loadLogAppender() { From fd7fdf69892af3f97e5bd5ae29b8bed761dd6d6a Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 16:20:26 +0800 Subject: [PATCH 032/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=8C=85=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 2 +- .../design/actions/file/PreferencePane.java | 2 +- .../mainframe/toolbar/ToolBarMenuDock.java | 2 +- .../actions/FileDownloader.java | 6 ++--- .../actions/SoftwareUpdateAction.java | 5 ++-- .../domain/DownloadItem.java | 2 +- .../domain/UpdateConstants.java | 2 +- .../UpdateInfoCachePropertyManager.java | 2 +- .../factory/DirectoryOperationFactory.java | 2 +- .../push/DesignerPushUpdateConfigManager.java | 2 +- .../push/DesignerPushUpdateDialog.java | 2 +- .../push/DesignerPushUpdateManager.java | 4 ++-- .../push/DesignerUpdateInfo.java | 2 +- .../ui/dialog/EncodingDetect.java | 2 +- .../ui/dialog/RestoreDialog.java | 9 ++++--- .../ui/dialog/RestoreResultDialog.java | 5 ++-- .../ui/dialog/UpdateMainDialog.java | 24 +++++++++---------- .../ui/widget/ColorfulCellRender.java | 2 +- .../ui/widget/LoadingLabel.java | 2 +- .../ui/widget/UpdateActionLabel.java | 2 +- .../ui/widget/UpdateInfoTable.java | 2 +- .../ui/widget/UpdateInfoTableCellRender.java | 2 +- .../ui/widget/UpdateInfoTableModel.java | 2 +- .../widget/UpdateInfoTextAreaCellRender.java | 2 +- .../DesignerPushUpdateConfigManagerTest.java | 2 +- .../push/DesignerPushUpdateDialogTest.java | 2 +- .../push/DesignerPushUpdateManagerTest.java | 2 +- .../push/DesignerUpdateInfoTest.java | 2 +- .../fr/start/module/DesignerActivator.java | 2 +- 29 files changed, 48 insertions(+), 51 deletions(-) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/actions/FileDownloader.java (95%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/actions/SoftwareUpdateAction.java (83%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/domain/DownloadItem.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/domain/UpdateConstants.java (97%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/domain/UpdateInfoCachePropertyManager.java (95%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/factory/DirectoryOperationFactory.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/push/DesignerPushUpdateConfigManager.java (97%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/push/DesignerPushUpdateDialog.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/push/DesignerPushUpdateManager.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/push/DesignerUpdateInfo.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/dialog/EncodingDetect.java (99%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/dialog/RestoreDialog.java (93%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/dialog/RestoreResultDialog.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/dialog/UpdateMainDialog.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/ColorfulCellRender.java (97%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/LoadingLabel.java (96%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/UpdateActionLabel.java (98%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/UpdateInfoTable.java (96%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/UpdateInfoTableCellRender.java (96%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/UpdateInfoTableModel.java (96%) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/widget/UpdateInfoTextAreaCellRender.java (96%) rename designer-base/src/test/java/com/fr/design/{onlineupdate => update}/push/DesignerPushUpdateConfigManagerTest.java (98%) rename designer-base/src/test/java/com/fr/design/{onlineupdate => update}/push/DesignerPushUpdateDialogTest.java (95%) rename designer-base/src/test/java/com/fr/design/{onlineupdate => update}/push/DesignerPushUpdateManagerTest.java (96%) rename designer-base/src/test/java/com/fr/design/{onlineupdate => update}/push/DesignerUpdateInfoTest.java (98%) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 69de01d40..1fb6a94a8 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -14,7 +14,7 @@ import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.onlineupdate.push.DesignerPushUpdateConfigManager; +import com.fr.design.update.push.DesignerPushUpdateConfigManager; import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.utils.DesignUtils; import com.fr.file.FILEFactory; diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index af7daef83..aa679de9b 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -23,7 +23,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.onlineupdate.push.DesignerPushUpdateManager; +import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 3885ff71d..cc5148256 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -49,7 +49,7 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; -import com.fr.design.onlineupdate.actions.SoftwareUpdateAction; +import com.fr.design.update.actions.SoftwareUpdateAction; import com.fr.design.remote.action.RemoteDesignAuthManagerAction; import com.fr.design.utils.ThemeUtils; import com.fr.general.ComparatorUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java b/designer-base/src/main/java/com/fr/design/update/actions/FileDownloader.java similarity index 95% rename from designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java rename to designer-base/src/main/java/com/fr/design/update/actions/FileDownloader.java index d076cc01e..556fa5113 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/FileDownloader.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/FileDownloader.java @@ -1,9 +1,9 @@ -package com.fr.design.onlineupdate.actions; +package com.fr.design.update.actions; -import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.update.domain.UpdateConstants; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; -import com.fr.design.onlineupdate.domain.DownloadItem; +import com.fr.design.update.domain.DownloadItem; import com.fr.stable.ArrayUtils; import com.fr.stable.StableUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java b/designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java similarity index 83% rename from designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java rename to designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java index 1b14f5f0b..cb412dcb1 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/actions/SoftwareUpdateAction.java +++ b/designer-base/src/main/java/com/fr/design/update/actions/SoftwareUpdateAction.java @@ -1,10 +1,9 @@ -package com.fr.design.onlineupdate.actions; +package com.fr.design.update.actions; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.onlineupdate.ui.dialog.UpdateMainDialog; -import com.fr.locale.InterProviderFactory; +import com.fr.design.update.ui.dialog.UpdateMainDialog; import java.awt.event.ActionEvent; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java b/designer-base/src/main/java/com/fr/design/update/domain/DownloadItem.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java rename to designer-base/src/main/java/com/fr/design/update/domain/DownloadItem.java index 6871190aa..220f2602d 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/DownloadItem.java +++ b/designer-base/src/main/java/com/fr/design/update/domain/DownloadItem.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.domain; +package com.fr.design.update.domain; import com.fr.general.ComparatorUtils; import com.fr.json.JSONObject; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java b/designer-base/src/main/java/com/fr/design/update/domain/UpdateConstants.java similarity index 97% rename from designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java rename to designer-base/src/main/java/com/fr/design/update/domain/UpdateConstants.java index 293c5d1f0..737deafe6 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateConstants.java +++ b/designer-base/src/main/java/com/fr/design/update/domain/UpdateConstants.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.domain; +package com.fr.design.update.domain; /** * Created by XINZAI on 2018/8/21. diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java b/designer-base/src/main/java/com/fr/design/update/domain/UpdateInfoCachePropertyManager.java similarity index 95% rename from designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java rename to designer-base/src/main/java/com/fr/design/update/domain/UpdateInfoCachePropertyManager.java index 7895c6913..32537fcf4 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/domain/UpdateInfoCachePropertyManager.java +++ b/designer-base/src/main/java/com/fr/design/update/domain/UpdateInfoCachePropertyManager.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.domain; +package com.fr.design.update.domain; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java b/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java rename to designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java index 9d929c095..906b71412 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/factory/DirectoryOperationFactory.java +++ b/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.factory; +package com.fr.design.update.factory; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateConfigManager.java similarity index 97% rename from designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java rename to designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateConfigManager.java index fd1d5fb90..9ea734e73 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateConfigManager.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLPrintWriter; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java rename to designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 9178484f8..434c7fd1a 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.design.dialog.UIDialog; import com.fr.design.ui.ModernUIPane; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java rename to designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index 6e787166e..09e16303a 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -1,8 +1,8 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrame; -import com.fr.design.onlineupdate.ui.dialog.UpdateMainDialog; +import com.fr.design.update.ui.dialog.UpdateMainDialog; import com.fr.general.CloudCenter; import com.fr.general.GeneralContext; import com.fr.general.GeneralUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerUpdateInfo.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java rename to designer-base/src/main/java/com/fr/design/update/push/DesignerUpdateInfo.java index 6d7bd93a3..5d5e02a47 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/push/DesignerUpdateInfo.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerUpdateInfo.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.general.ComparatorUtils; import com.fr.json.JSONObject; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/EncodingDetect.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/EncodingDetect.java similarity index 99% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/EncodingDetect.java rename to designer-base/src/main/java/com/fr/design/update/ui/dialog/EncodingDetect.java index ecd63fa16..41bba0f4f 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/EncodingDetect.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/EncodingDetect.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.dialog; +package com.fr.design.update.ui.dialog; import java.io.File; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java similarity index 93% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java rename to designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java index c316311ab..402df06b8 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java @@ -1,13 +1,12 @@ -package com.fr.design.onlineupdate.ui.dialog; +package com.fr.design.update.ui.dialog; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.onlineupdate.domain.UpdateConstants; -import com.fr.design.onlineupdate.factory.DirectoryOperationFactory; -import com.fr.design.onlineupdate.ui.widget.ColorfulCellRender; +import com.fr.design.update.domain.UpdateConstants; +import com.fr.design.update.factory.DirectoryOperationFactory; +import com.fr.design.update.ui.widget.ColorfulCellRender; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.locale.InterProviderFactory; import com.fr.stable.ArrayUtils; import com.fr.stable.StableUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java rename to designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java index 680d3190d..cc2290216 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java @@ -1,14 +1,13 @@ -package com.fr.design.onlineupdate.ui.dialog; +package com.fr.design.update.ui.dialog; import com.fr.base.FRContext; import com.fr.design.RestartHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.update.domain.UpdateConstants; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.locale.InterProviderFactory; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java rename to designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index 9e1f22b6b..5e5943051 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.dialog; +package com.fr.design.update.ui.dialog; import com.fr.base.FRContext; import com.fr.design.RestartHelper; @@ -11,17 +11,17 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.onlineupdate.actions.FileDownloader; -import com.fr.design.onlineupdate.domain.DownloadItem; -import com.fr.design.onlineupdate.domain.UpdateConstants; -import com.fr.design.onlineupdate.domain.UpdateInfoCachePropertyManager; -import com.fr.design.onlineupdate.factory.DirectoryOperationFactory; -import com.fr.design.onlineupdate.ui.widget.LoadingLabel; -import com.fr.design.onlineupdate.ui.widget.UpdateActionLabel; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTable; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableCellRender; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableModel; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTextAreaCellRender; +import com.fr.design.update.actions.FileDownloader; +import com.fr.design.update.domain.DownloadItem; +import com.fr.design.update.domain.UpdateConstants; +import com.fr.design.update.domain.UpdateInfoCachePropertyManager; +import com.fr.design.update.factory.DirectoryOperationFactory; +import com.fr.design.update.ui.widget.LoadingLabel; +import com.fr.design.update.ui.widget.UpdateActionLabel; +import com.fr.design.update.ui.widget.UpdateInfoTable; +import com.fr.design.update.ui.widget.UpdateInfoTableCellRender; +import com.fr.design.update.ui.widget.UpdateInfoTableModel; +import com.fr.design.update.ui.widget.UpdateInfoTextAreaCellRender; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/ColorfulCellRender.java similarity index 97% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/ColorfulCellRender.java index 461489839..e5d644b20 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/ColorfulCellRender.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/ColorfulCellRender.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import javax.swing.JList; import javax.swing.JPanel; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/LoadingLabel.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/LoadingLabel.java index a21d67e46..f45f6d67f 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/LoadingLabel.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/LoadingLabel.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import com.fr.design.gui.ilable.UILabel; import com.fr.general.IOUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateActionLabel.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateActionLabel.java index 74c2b6ae5..efd10fb8b 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateActionLabel.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateActionLabel.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import com.fr.design.gui.ilable.UILabel; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java index f94a514ad..c7690f3d5 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTable.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import javax.swing.JTable; import javax.swing.table.TableModel; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java index 22c603c86..9a853762e 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableCellRender.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import com.fr.general.ComparatorUtils; import com.fr.stable.StringUtils; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableModel.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableModel.java index 147f88a29..0fa128e36 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTableModel.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableModel.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import javax.swing.table.AbstractTableModel; import java.util.List; diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java rename to designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java index 1e3cebdf8..4f9836d4c 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/widget/UpdateInfoTextAreaCellRender.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.ui.widget; +package com.fr.design.update.ui.widget; import javax.swing.BorderFactory; import javax.swing.JTable; diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateConfigManagerTest.java similarity index 98% rename from designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java rename to designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateConfigManagerTest.java index f9de98218..17831b0b7 100644 --- a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateConfigManagerTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateConfigManagerTest.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLPrintWriter; diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java similarity index 95% rename from designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java rename to designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java index 841a19429..ae3edf150 100644 --- a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateDialogTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.design.DesignerEnvManager; import com.fr.json.JSONObject; diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java similarity index 96% rename from designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java rename to designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java index 4e3f823e9..38491fbe2 100644 --- a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerPushUpdateManagerTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.invoke.Reflect; import org.junit.Test; diff --git a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerUpdateInfoTest.java similarity index 98% rename from designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java rename to designer-base/src/test/java/com/fr/design/update/push/DesignerUpdateInfoTest.java index 5736793fd..14f986e8e 100644 --- a/designer-base/src/test/java/com/fr/design/onlineupdate/push/DesignerUpdateInfoTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerUpdateInfoTest.java @@ -1,4 +1,4 @@ -package com.fr.design.onlineupdate.push; +package com.fr.design.update.push; import com.fr.json.JSONObject; import com.fr.stable.StringUtils; diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 4e36ac20c..ff0bef064 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -55,7 +55,7 @@ import com.fr.design.mainframe.loghandler.DesignerLogAppender; import com.fr.design.mainframe.loghandler.LogMessageBar; import com.fr.design.mainframe.socketio.DesignerSocketIO; import com.fr.design.module.DesignModuleFactory; -import com.fr.design.onlineupdate.push.DesignerPushUpdateManager; +import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; From e513ef1a861c171b6b7164f96ba7fe8f864cbe5b Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 16:33:23 +0800 Subject: [PATCH 033/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E6=94=B9=E7=94=A8=20wi?= =?UTF-8?q?thComponent=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/push/DesignerPushUpdateDialog.java | 23 ++- .../ui/onlineupdate/push/pushUpdate.html | 135 ------------------ .../fr/design/ui/update/push/pushUpdate.css | 20 +++ .../fr/design/ui/update/push/pushUpdate.js | 99 +++++++++++++ 4 files changed, 141 insertions(+), 136 deletions(-) delete mode 100644 designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html create mode 100644 designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css create mode 100644 designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 434c7fd1a..92f02e39d 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -3,6 +3,12 @@ package com.fr.design.update.push; import com.fr.design.dialog.UIDialog; import com.fr.design.ui.ModernUIPane; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.web.struct.AssembleComponent; +import com.fr.web.struct.Atom; +import com.fr.web.struct.browser.RequestClient; +import com.fr.web.struct.category.ScriptPath; +import com.fr.web.struct.category.StylePath; +import com.fr.web.struct.impl.FineUI; import javax.swing.JPanel; import java.awt.BorderLayout; @@ -34,7 +40,22 @@ class DesignerPushUpdateDialog extends UIDialog { contentPane.setLayout(new BorderLayout()); jsPane = new ModernUIPane.Builder() - .withEMB("/com/fr/design/ui/onlineupdate/push/pushUpdate.html").namespace("Pool").build(); + .withComponent(new AssembleComponent() { + @Override + public ScriptPath script(RequestClient req) { + return ScriptPath.build("/com/fr/design/ui/update/push/pushUpdate.js"); + } + + @Override + public StylePath style(RequestClient req) { + return StylePath.build("/com/fr/design/ui/update/push/pushUpdate.css"); + } + + @Override + public Atom[] refer() { + return new Atom[]{FineUI.KEY}; + } + }).namespace("Pool").build(); contentPane.add(jsPane); } diff --git a/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html b/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html deleted file mode 100644 index e0007c9dc..000000000 --- a/designer-base/src/main/resources/com/fr/design/ui/onlineupdate/push/pushUpdate.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - Push Update - - - - - - - - \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css new file mode 100644 index 000000000..dfbcc6851 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css @@ -0,0 +1,20 @@ +.title { + font-size: 30px; +} +.desc { + margin-top: 35px; +} +.moreInfo { + margin-top: 15px; +} +.buttonGroup { + margin-top: 35px; +} +.button-ignore { + +} +body { + padding-left: 30px; + padding-top: 30px; + color: white; +} \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js new file mode 100644 index 000000000..543ce292f --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js @@ -0,0 +1,99 @@ +function i18nText(key) { + return Pool.data.i18nText(key); +} + +window.addEventListener("load", function (ev) { + var title = BI.createWidget({ + type: "bi.vertical", + items: [ + { + type: "bi.label", + text: i18nText("Fine-Design_Find_New_Version"), + cls: "title", + textAlign: "left" + }, + { + type: "bi.label", + text: Pool.data.getVersion(), + textAlign: "left" + } + ] + }); + + var desc = BI.createWidget({ + type: "bi.vertical", + cls: "desc", + items: [ + { + type: "bi.label", + text: Pool.data.getContent(), + textAlign: "left" + } + ] + }); + + var moreInfo = BI.createWidget({ + type: "bi.text_button", + text: i18nText("Fine-Design_Basic_More_Information"), + cls: "moreInfo", + textAlign: "left" + }); + + var buttonGroup = BI.createWidget({ + type: 'bi.left', + cls: "buttonGroup", + items: [ + { + type: 'bi.button', + text: i18nText("Fine-Design_Update_Now"), + level: 'common', + height: 30, + handler: function() { + Pool.data.updateNow(); + } + }, + { + el: { + type: 'bi.button', + text: i18nText("Fine-Design_Remind_Me_Next_Time"), + level: 'ignore', + height: 30, + handler: function() { + Pool.data.remindNextTime(); + } + }, + lgap: 10 + }, + { + el: { + type: 'bi.button', + text: i18nText("Fine-Design_Skip_This_Version"), + level: 'ignore', + height: 30, + handler: function() { + Pool.data.skipThisVersion(); + } + }, + lgap: 10 + } + ] + }); + + BI.createWidget({ + type:"bi.vertical", + element: "body", + cls: "container", + items: [ + title, + desc, + moreInfo, + buttonGroup + ] + }); + + $(".container").css("background", "url(" + Pool.data.getBackgroundUrl() + ")"); + $(".button-ignore").css({ + "background-color": "white", + "border": "1px solid white" + }); +}); \ No newline at end of file From 8745e9d60eb3b7a587e176a807e41b43ddc8a519 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 16:55:34 +0800 Subject: [PATCH 034/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/ui/update/push/pushUpdate.css | 16 +++++++++------- .../com/fr/design/ui/update/push/pushUpdate.js | 8 ++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css index dfbcc6851..e583a96aa 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css @@ -1,3 +1,9 @@ +body { + padding-left: 30px; + padding-top: 30px; + color: white; +} + .title { font-size: 30px; } @@ -10,11 +16,7 @@ .buttonGroup { margin-top: 35px; } -.button-ignore { - -} -body { - padding-left: 30px; - padding-top: 30px; - color: white; +.button-ignore { + background-color: white !important; + border: 1px solid white !important; } \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js index 543ce292f..722b3d3cd 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js @@ -79,7 +79,7 @@ window.addEventListener("load", function (ev) { ] }); - BI.createWidget({ + var container = BI.createWidget({ type:"bi.vertical", element: "body", cls: "container", @@ -91,9 +91,5 @@ window.addEventListener("load", function (ev) { ] }); - $(".container").css("background", "url(" + Pool.data.getBackgroundUrl() + ")"); - $(".button-ignore").css({ - "background-color": "white", - "border": "1px solid white" - }); + container.element.css("background", "url(" + Pool.data.getBackgroundUrl() + ")"); }); \ No newline at end of file From 107c2e55ce054618d31ea18036c530d1a93ab672 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 15 Apr 2019 17:16:29 +0800 Subject: [PATCH 035/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/push/DesignerPushUpdateManager.java | 10 ++++++++++ .../java/com/fr/start/module/DesignerActivator.java | 13 ------------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index 09e16303a..7b9dfa757 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -1,5 +1,6 @@ package com.fr.design.update.push; +import com.fr.design.event.DesignerOpenedListener; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrame; import com.fr.design.update.ui.dialog.UpdateMainDialog; @@ -23,6 +24,15 @@ public class DesignerPushUpdateManager { private DesignerUpdateInfo updateInfo; private DesignerPushUpdateConfigManager config; + static { + DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + getInstance().checkAndPop(); + } + }); + } + private DesignerPushUpdateManager() { config = DesignerPushUpdateConfigManager.getInstance(); } diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index ff0bef064..f360f24b9 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -21,7 +21,6 @@ import com.fr.design.actions.insert.flot.FormulaFloatAction; import com.fr.design.actions.insert.flot.ImageFloatAction; import com.fr.design.actions.insert.flot.TextBoxFloatAction; import com.fr.design.bridge.DesignToolbarProvider; -import com.fr.design.event.DesignerOpenedListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.form.parameter.FormParaDesigner; import com.fr.design.fun.ElementUIProvider; @@ -36,7 +35,6 @@ import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.javascript.ProcessTransitionAdapter; import com.fr.design.mainframe.BaseJForm; import com.fr.design.mainframe.CellElementPropertyPane; -import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.ElementCaseThumbnail; @@ -55,7 +53,6 @@ import com.fr.design.mainframe.loghandler.DesignerLogAppender; import com.fr.design.mainframe.loghandler.LogMessageBar; import com.fr.design.mainframe.socketio.DesignerSocketIO; import com.fr.design.module.DesignModuleFactory; -import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; @@ -132,16 +129,6 @@ public class DesignerActivator extends Activator { loadLogAppender(); DesignerSocketIO.update(); UserInfoPane.getInstance().updateBBSUserInfo(); - checkUpdateLater(); - } - - private void checkUpdateLater() { - DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { - @Override - public void designerOpened() { - DesignerPushUpdateManager.getInstance().checkAndPop(); - } - }); } private void loadLogAppender() { From e5d554e1faf77767d8ea3b3044eee7f40fe59266 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Mon, 15 Apr 2019 19:10:34 +0800 Subject: [PATCH 036/196] =?UTF-8?q?=E6=94=B9=E4=B8=8B=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=90=8D=EF=BC=8C=E4=B8=8E=E4=BA=A7=E5=93=81=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java index c16b035cf..d22bcf75b 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfo.java @@ -116,7 +116,7 @@ public class ErrorInfo { jo.put("uploadtime", uploadtime); jo.put("logid", logid); jo.put("log", log); - jo.put("stackTrace", stackTrace); + jo.put("stacktrace", stackTrace); saveFileToCache(jo); } From 386932dd7c972c514cb1eb5047363cce235c285c Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 16 Apr 2019 14:05:02 +0800 Subject: [PATCH 037/196] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E7=94=A8=E4=BA=8EJS=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E7=9A=84JS=E5=BC=95=E6=93=8E=EF=BC=8C=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E5=A4=A7=E6=96=87=E6=9C=AC=E7=9A=84JS=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96CPU=E9=A3=99=E5=8D=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beautify/JavaScriptFormatHelper.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java b/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java index 7f1468a45..b2c5d200c 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java +++ b/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java @@ -1,9 +1,14 @@ package com.fr.design.javascript.beautify; +import com.eclipsesource.v8.V8; +import com.eclipsesource.v8.V8Array; +import com.eclipsesource.v8.V8Object; +import com.eclipsesource.v8.utils.V8ObjectUtils; import com.fr.log.FineLoggerFactory; import com.fr.general.IOUtils; import com.fr.script.ScriptFactory; +import com.fr.stable.EncodeConstants; import javax.script.Invocable; import javax.script.ScriptEngine; @@ -11,6 +16,7 @@ import javax.script.ScriptException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; +import java.io.UnsupportedEncodingException; public class JavaScriptFormatHelper { @@ -34,15 +40,21 @@ public class JavaScriptFormatHelper { */ public static String beautify(String jsCode, BeautifyOption option) { InputStream resourceAsStream = IOUtils.readResource("com/fr/design/javascript/beautify/beautify.js"); - ScriptEngine scriptEngine = ScriptFactory.newScriptEngine(); String result = jsCode; + V8 v8 = V8.createV8Runtime(); try { - Reader reader = new InputStreamReader(resourceAsStream); - scriptEngine.eval(reader); - Invocable invocable = (Invocable) scriptEngine; - result = (String) invocable.invokeFunction("js_beautify_global", jsCode, option.toFormatArgument()); - } catch (ScriptException | NoSuchMethodException e) { + v8.executeVoidScript(IOUtils.inputStream2String(resourceAsStream, EncodeConstants.ENCODING_UTF_8)); + V8Array parameters = new V8Array(v8); + parameters.push(jsCode); + V8Object arg = V8ObjectUtils.toV8Object(v8, option.toFormatArgument()); + parameters.push(arg); + result = v8.executeStringFunction("js_beautify_global", parameters); + parameters.release(); + arg.release(); + } catch (UnsupportedEncodingException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + v8.release(true); } return result; } From f821e18c07d8f48191fca154967e17dd357c43fb Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 16 Apr 2019 14:06:15 +0800 Subject: [PATCH 038/196] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=9A=84import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/beautify/JavaScriptFormatHelper.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java b/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java index b2c5d200c..8e794f192 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java +++ b/designer-base/src/main/java/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java @@ -5,17 +5,11 @@ import com.eclipsesource.v8.V8; import com.eclipsesource.v8.V8Array; import com.eclipsesource.v8.V8Object; import com.eclipsesource.v8.utils.V8ObjectUtils; -import com.fr.log.FineLoggerFactory; import com.fr.general.IOUtils; -import com.fr.script.ScriptFactory; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptException; import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; import java.io.UnsupportedEncodingException; public class JavaScriptFormatHelper { From c8e3f2eebbbf2532db84cd3737820b0f8a291e6e Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 16 Apr 2019 14:14:22 +0800 Subject: [PATCH 039/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E7=89=88=E6=9C=AC&=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateManager.java | 5 ++- .../push/DesignerPushUpdateManagerTest.java | 44 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index 7b9dfa757..3620b2962 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -166,6 +166,9 @@ public class DesignerPushUpdateManager { * 跳过当前的推送版本 */ void skipCurrentPushVersion() { - // todo + if (updateInfo == null) { + return; + } + config.setLastIgnoredVersion(updateInfo.getPushVersion()); } } diff --git a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java index 38491fbe2..333580f1a 100644 --- a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateManagerTest.java @@ -1,7 +1,17 @@ package com.fr.design.update.push; +import com.fr.design.event.DesignerOpenedListener; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; import com.fr.invoke.Reflect; +import com.fr.stable.StringUtils; +import org.easymock.EasyMock; +import org.junit.BeforeClass; import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; @@ -9,7 +19,21 @@ import static org.junit.Assert.assertSame; /** * Created by plough on 2019/4/8. */ +@RunWith(value = PowerMockRunner.class) +@PrepareForTest(DesignerContext.class) public class DesignerPushUpdateManagerTest { + + @BeforeClass + public static void setUp() { + DesignerFrame mockFrame = EasyMock.mock(DesignerFrame.class); + mockFrame.addDesignerOpenedListener(EasyMock.anyObject(DesignerOpenedListener.class)); + EasyMock.replay(mockFrame); + + PowerMock.mockStatic(DesignerContext.class); + EasyMock.expect(DesignerContext.getDesignerFrame()).andReturn(mockFrame).anyTimes(); + PowerMock.replayAll(); + } + @Test public void testSingleton() { DesignerPushUpdateManager m1 = DesignerPushUpdateManager.getInstance(); @@ -29,4 +53,24 @@ public class DesignerPushUpdateManagerTest { assertEquals(false, Reflect.on(pushUpdateManager).call("isAutoPushUpdateSupported", false, false).get()); } + @Test + public void testSkipCurrentPushVersion() { + DesignerPushUpdateManager pushUpdateManager = DesignerPushUpdateManager.getInstance(); + + // 1. updateInfo 为 null 的情况 + pushUpdateManager.skipCurrentPushVersion(); + assertEquals(StringUtils.EMPTY, DesignerPushUpdateConfigManager.getInstance().getLastIgnoredVersion()); + + + // 2. updateInfo 有值的情况 + final String PUSH_VERSION = "stable-2019.02.03.12.44.22"; + DesignerUpdateInfo mockInfo = EasyMock.mock(DesignerUpdateInfo.class); + EasyMock.expect(mockInfo.getPushVersion()).andReturn(PUSH_VERSION).anyTimes(); + Reflect.on(pushUpdateManager).set("updateInfo", mockInfo); + EasyMock.replay(mockInfo); + + pushUpdateManager.skipCurrentPushVersion(); + assertEquals(PUSH_VERSION, DesignerPushUpdateConfigManager.getInstance().getLastIgnoredVersion()); + } + } From 4425d7360bdb97bbb54dba050d590b019f33a201 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 16 Apr 2019 17:51:53 +0800 Subject: [PATCH 040/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=A7=86=E8=A7=89?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/push/DesignerPushUpdateDialog.java | 10 +- .../fr/design/ui/update/push/pushUpdate.css | 46 +++++++- .../fr/design/ui/update/push/pushUpdate.js | 107 ++++++++++++------ .../push/DesignerPushUpdateDialogTest.java | 2 +- 4 files changed, 123 insertions(+), 42 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 92f02e39d..0efa324d7 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -2,7 +2,9 @@ package com.fr.design.update.push; import com.fr.design.dialog.UIDialog; import com.fr.design.ui.ModernUIPane; +import com.fr.design.utils.BrowseUtils; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StringUtils; import com.fr.web.struct.AssembleComponent; import com.fr.web.struct.Atom; import com.fr.web.struct.browser.RequestClient; @@ -19,7 +21,7 @@ import java.awt.Frame; * Created by plough on 2019/4/10. */ class DesignerPushUpdateDialog extends UIDialog { - public static final Dimension DEFAULT = new Dimension(640, 320); + public static final Dimension DEFAULT = new Dimension(640, 360); private ModernUIPane jsPane; @@ -111,8 +113,10 @@ class DesignerPushUpdateDialog extends UIDialog { this.content = content; } - public String getMoreInfoUrl() { - return moreInfoUrl; + public void browseMoreInfoUrl() { + if (StringUtils.isNotEmpty(moreInfoUrl)) { + BrowseUtils.browser(moreInfoUrl); + } } public void setMoreInfoUrl(String moreInfoUrl) { diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css index e583a96aa..e50bf12a0 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css @@ -5,18 +5,56 @@ body { } .title { - font-size: 30px; + font-family: PingFangSC-Semibold; + font-size: 24px; + letter-spacing: 1.5px; + line-height: 24px; } + +.version { + font-family: PingFangSC-Semibold; + font-size: 12px; + line-height: 14px; + margin-top: 6px; +} + .desc { - margin-top: 35px; + margin-top: 40px; + font-family: PingFangSC-Regular; + font-size: 13px; + width: 540px; + margin-left: 19px; + text-indent: -19px; + overflow: visible !important; +} + +.desc .bi-label { + overflow: visible !important; } + .moreInfo { - margin-top: 15px; + margin-top: 20px; + font-family: PingFangSC-Regular; + font-size: 13px; + text-decoration: underline; } + .buttonGroup { - margin-top: 35px; + position: absolute !important; + bottom: 60px; } + +.buttonGroup .bi-button { + font-family: PingFangSC-Medium; + font-size: 11px; + text-align: center; + line-height: 12px; + box-shadow: 0 2px 4px 0 rgba(0,82,169,0.20); + border-radius: 12px; +} + .button-ignore { background-color: white !important; border: 1px solid white !important; + color: #51A6FF; } \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js index 722b3d3cd..a791e3ee4 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js @@ -1,9 +1,33 @@ +var MAX_DESC_NUM = 5; // 最多显示5条信息 + function i18nText(key) { return Pool.data.i18nText(key); } -window.addEventListener("load", function (ev) { - var title = BI.createWidget({ +function getDescArea(descList) { + var descItems = []; + for (var i in descList) { + var num = parseInt(i) + 1; + if (num > MAX_DESC_NUM) { + break; + } + descItems.push({ + type: "bi.label", + text: num + ")" + descList[i], + whiteSpace: "pre-wrap", + textAlign: "left" + }) + } + + return BI.createWidget({ + type: "bi.vertical", + cls: "desc", + items: descItems + }); +} + +function getTitleArea() { + return BI.createWidget({ type: "bi.vertical", items: [ { @@ -15,31 +39,15 @@ window.addEventListener("load", function (ev) { { type: "bi.label", text: Pool.data.getVersion(), + cls: "version", textAlign: "left" } ] }); +} - var desc = BI.createWidget({ - type: "bi.vertical", - cls: "desc", - items: [ - { - type: "bi.label", - text: Pool.data.getContent(), - textAlign: "left" - } - ] - }); - - var moreInfo = BI.createWidget({ - type: "bi.text_button", - text: i18nText("Fine-Design_Basic_More_Information"), - cls: "moreInfo", - textAlign: "left" - }); - - var buttonGroup = BI.createWidget({ +function getButtonGroup() { + return BI.createWidget({ type: 'bi.left', cls: "buttonGroup", items: [ @@ -47,8 +55,8 @@ window.addEventListener("load", function (ev) { type: 'bi.button', text: i18nText("Fine-Design_Update_Now"), level: 'common', - height: 30, - handler: function() { + height: 24, + handler: function () { Pool.data.updateNow(); } }, @@ -57,8 +65,8 @@ window.addEventListener("load", function (ev) { type: 'bi.button', text: i18nText("Fine-Design_Remind_Me_Next_Time"), level: 'ignore', - height: 30, - handler: function() { + height: 24, + handler: function () { Pool.data.remindNextTime(); } }, @@ -69,8 +77,8 @@ window.addEventListener("load", function (ev) { type: 'bi.button', text: i18nText("Fine-Design_Skip_This_Version"), level: 'ignore', - height: 30, - handler: function() { + height: 24, + handler: function () { Pool.data.skipThisVersion(); } }, @@ -78,17 +86,48 @@ window.addEventListener("load", function (ev) { } ] }); +} + +function getMoreInfo() { + return BI.createWidget({ + type: "bi.text_button", + text: i18nText("Fine-Design_See_More_New_Features"), + cls: "moreInfo", + textAlign: "left", + handler: function () { + // 为了使用系统的浏览器,只能从 Java 那边打开网页 + Pool.data.browseMoreInfoUrl(); + } + }); +} + +function getShowItems() { + var title = getTitleArea(); + + var descList = Pool.data.getContent().split("\n"); + var descArea = getDescArea(descList); + + var moreInfo = getMoreInfo(); + + var buttonGroup = getButtonGroup(); + + var showItems = [title, descArea]; + if (descList.length > MAX_DESC_NUM) { + showItems.push(moreInfo); + } + showItems.push(buttonGroup); + + return showItems; +} + +window.addEventListener("load", function (ev) { + var showItems = getShowItems(); var container = BI.createWidget({ type:"bi.vertical", element: "body", cls: "container", - items: [ - title, - desc, - moreInfo, - buttonGroup - ] + items: showItems }); container.element.css("background", "url(" + Pool.data.getBackgroundUrl() + ")"); diff --git a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java index ae3edf150..f461a5804 100644 --- a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java @@ -13,7 +13,7 @@ public class DesignerPushUpdateDialogTest { JSONObject jo = JSONObject.create(); jo.put("version", "2019.03.06.04.02.43.6"); - jo.put("content", "test content"); + jo.put("content", "设计器改进:去除右击弹框,让操作过程更流畅;增加报表块缩放功能,利于从全局角度整体设计报表\n插件重构:插件支持热部署,即装即用,不再需要重启服务器;\nsapbw:可用于bwcube和bwquery;\n私有云认证:可在客户本地部署私有云认证服务器,业务服务器可到此服务器进行认证;\n开放:打通简道云,可以在简道云里创建项目,并将数据同步到客户的私有库\nshould not display"); jo.put("more", "http://baidu.com"); jo.put("background", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1555043827901&di=fc266992abef5a7e13b4e0cb98975a75&imgtype=0&src=http%3A%2F%2Fi5.3conline.com%2Fimages%2Fpiclib%2F201203%2F20%2Fbatch%2F1%2F130280%2F1332249463721rez0li5fg0_medium.jpg"); DesignerUpdateInfo mockUpdateInfo = new DesignerUpdateInfo("111.22.11", "2211.231.1", "11.23.1", jo); From 2dd99acd4fe98f8847fa747efad50da669be6fec Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 16 Apr 2019 21:28:22 +0800 Subject: [PATCH 041/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E5=9F=8B=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/push/DesignerPushUpdateDialog.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 0efa324d7..62e206cf8 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -4,6 +4,9 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.ui.ModernUIPane; import com.fr.design.utils.BrowseUtils; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.intelli.record.FocusPoint; +import com.fr.intelli.record.MetricRegistry; +import com.fr.intelli.record.Original; import com.fr.stable.StringUtils; import com.fr.web.struct.AssembleComponent; import com.fr.web.struct.Atom; @@ -133,15 +136,18 @@ class DesignerPushUpdateDialog extends UIDialog { public void updateNow() { DesignerPushUpdateManager.getInstance().doUpdate(); + FocusPointManager.submit(FocusPointManager.OperateType.UPDATE); exit(); } public void remindNextTime() { + FocusPointManager.submit(FocusPointManager.OperateType.REMIND_NEXT_TIME); exit(); } public void skipThisVersion() { DesignerPushUpdateManager.getInstance().skipCurrentPushVersion(); + FocusPointManager.submit(FocusPointManager.OperateType.SKIP); exit(); } @@ -153,4 +159,28 @@ class DesignerPushUpdateDialog extends UIDialog { DesignerPushUpdateDialog.this.dialogExit(); } } + + private static class FocusPointManager { + + private static final String ID = "com.fr.update.push"; + private static final int SOURCE = Original.EMBED.toInt(); + private static final String TITLE = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Push_Update_Focus_Point"); + + private enum OperateType { + UPDATE(1), REMIND_NEXT_TIME(2), SKIP(3); + private int index; + OperateType(int index) { + this.index = index; + } + private String toText() { + return String.valueOf(this.index); + } + } + + private static void submit(OperateType opType) { + FocusPoint focusPoint = FocusPoint.create(ID, opType.toText(), SOURCE); + focusPoint.setTitle(TITLE); + MetricRegistry.getMetric().submit(focusPoint); + } + } } From d6b79f07429879822ea43d9bccd76bcce3642704 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 16 Apr 2019 22:37:59 +0800 Subject: [PATCH 042/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/update/push/DesignerPushUpdateManager.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index 3620b2962..7ac254c93 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -94,7 +94,7 @@ public class DesignerPushUpdateManager { /** * 检查更新,如果有合适的更新版本,则弹窗 */ - public void checkAndPop() { + private void checkAndPop() { new Thread() { @Override public void run() { @@ -111,11 +111,6 @@ public class DesignerPushUpdateManager { private boolean shouldPopUp() { if (updateInfo == null) { String fullCurrentVersion = GeneralUtils.readFullBuildNO(); - // todo: 开发测试用 - if (!fullCurrentVersion.contains(SPLIT_CHAR)) { - fullCurrentVersion = "stable-2019.01.03.17.01.05.257"; - } - String fullLatestVersion = getFullLatestVersion(); boolean isValidJarVersion = isValidJarVersion(fullCurrentVersion, fullLatestVersion); From 7e32059f84707fddb98f90412edc95383844b517 Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 17 Apr 2019 14:35:15 +0800 Subject: [PATCH 043/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E8=A7=86=E8=A7=89?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/push/DesignerPushUpdateDialog.java | 7 ++++- .../fr/design/ui/update/push/pushUpdate.css | 30 +++++++++++++++++-- .../fr/design/ui/update/push/pushUpdate.js | 17 ++++++++++- .../push/DesignerPushUpdateDialogTest.java | 2 +- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 62e206cf8..15c59e826 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -151,6 +151,11 @@ class DesignerPushUpdateDialog extends UIDialog { exit(); } + public void closeWindow() { + FocusPointManager.submit(FocusPointManager.OperateType.CLOSE_WINDOW); + exit(); + } + public String i18nText(String key) { return com.fr.design.i18n.Toolkit.i18nText(key); } @@ -167,7 +172,7 @@ class DesignerPushUpdateDialog extends UIDialog { private static final String TITLE = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Push_Update_Focus_Point"); private enum OperateType { - UPDATE(1), REMIND_NEXT_TIME(2), SKIP(3); + CLOSE_WINDOW(0), UPDATE(1), REMIND_NEXT_TIME(2), SKIP(3); private int index; OperateType(int index) { this.index = index; diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css index e50bf12a0..add1d3a3a 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css @@ -2,6 +2,26 @@ body { padding-left: 30px; padding-top: 30px; color: white; + background-size: 100% 100% !important; + -moz-background-size: 100% 100% !important; +} + +.close-btn { + position: fixed !important; + font-size: 15px !important; + color: white !important; + top: 8px; + right: 10px; + width: 19px; +} + +.close-btn .b-font { + height: 19px !important; + line-height: 19px !important; +} + +.close-btn .b-font:before { + color: white !important; } .title { @@ -53,8 +73,14 @@ body { border-radius: 12px; } -.button-ignore { +.buttonGroup .button-ignore { background-color: white !important; border: 1px solid white !important; color: #51A6FF; -} \ No newline at end of file +} + +.buttonGroup .button-common { + background-color: #51A6FF !important; + border: 1px solid #51A6FF !important; +} + diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js index a791e3ee4..1342cfb55 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js @@ -101,9 +101,24 @@ function getMoreInfo() { }); } +function getCloseButton() { + return BI.createWidget({ + type: "bi.button", + text: "", + iconCls: "close-font", + cls: "close-btn", + clear: true, + handler: function () { + Pool.data.closeWindow(); + } + }); +} + function getShowItems() { var title = getTitleArea(); + var closeButton = getCloseButton(); + var descList = Pool.data.getContent().split("\n"); var descArea = getDescArea(descList); @@ -111,7 +126,7 @@ function getShowItems() { var buttonGroup = getButtonGroup(); - var showItems = [title, descArea]; + var showItems = [title, closeButton, descArea]; if (descList.length > MAX_DESC_NUM) { showItems.push(moreInfo); } diff --git a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java index f461a5804..bc194fe06 100644 --- a/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java +++ b/designer-base/src/test/java/com/fr/design/update/push/DesignerPushUpdateDialogTest.java @@ -15,7 +15,7 @@ public class DesignerPushUpdateDialogTest { jo.put("version", "2019.03.06.04.02.43.6"); jo.put("content", "设计器改进:去除右击弹框,让操作过程更流畅;增加报表块缩放功能,利于从全局角度整体设计报表\n插件重构:插件支持热部署,即装即用,不再需要重启服务器;\nsapbw:可用于bwcube和bwquery;\n私有云认证:可在客户本地部署私有云认证服务器,业务服务器可到此服务器进行认证;\n开放:打通简道云,可以在简道云里创建项目,并将数据同步到客户的私有库\nshould not display"); jo.put("more", "http://baidu.com"); - jo.put("background", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1555043827901&di=fc266992abef5a7e13b4e0cb98975a75&imgtype=0&src=http%3A%2F%2Fi5.3conline.com%2Fimages%2Fpiclib%2F201203%2F20%2Fbatch%2F1%2F130280%2F1332249463721rez0li5fg0_medium.jpg"); + jo.put("background", "http://updateten.finereport.com/fr.png"); DesignerUpdateInfo mockUpdateInfo = new DesignerUpdateInfo("111.22.11", "2211.231.1", "11.23.1", jo); DesignerPushUpdateDialog.createAndShow(null, mockUpdateInfo); From d8690b5b93a632ab7f4bf241f83fd8f020c38e37 Mon Sep 17 00:00:00 2001 From: zack Date: Thu, 18 Apr 2019 10:43:43 +0800 Subject: [PATCH 044/196] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20=20?= =?UTF-8?q?=E6=89=93=E5=8C=85=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/update/push/DesignerPushUpdateDialog.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 15c59e826..3327dd9ed 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -168,7 +168,6 @@ class DesignerPushUpdateDialog extends UIDialog { private static class FocusPointManager { private static final String ID = "com.fr.update.push"; - private static final int SOURCE = Original.EMBED.toInt(); private static final String TITLE = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Push_Update_Focus_Point"); private enum OperateType { @@ -183,7 +182,7 @@ class DesignerPushUpdateDialog extends UIDialog { } private static void submit(OperateType opType) { - FocusPoint focusPoint = FocusPoint.create(ID, opType.toText(), SOURCE); + FocusPoint focusPoint = FocusPoint.create(ID, opType.toText(), Original.EMBED); focusPoint.setTitle(TITLE); MetricRegistry.getMetric().submit(focusPoint); } From ff97775129bbf6aedfb7edf7b2d20186ea9a49c0 Mon Sep 17 00:00:00 2001 From: "Wim.Zhai" Date: Thu, 18 Apr 2019 16:49:44 +0800 Subject: [PATCH 045/196] =?UTF-8?q?CHART-4177=20=E4=BA=A4=E4=BA=92=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=BB=84=E4=BB=B6=E8=BE=B9=E8=B7=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/extended/chart/ExtendedOtherPane.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java b/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java index 31aa2d003..6fba552b7 100644 --- a/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java +++ b/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java @@ -11,6 +11,7 @@ import com.fr.design.mainframe.chart.AbstractChartAttrPane; import com.fr.design.mainframe.chart.PaneTitleConstants; import com.fr.van.chart.designer.TableLayout4VanChartHelper; +import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -138,4 +139,10 @@ public class ExtendedOtherPane extends AbstractChartAtt return PaneTitleConstants.CHART_OTHER_TITLE; } + @Override + protected void initContentPane() { + leftContentPane = createContentPane(); + leftContentPane.setBorder(BorderFactory.createMatteBorder(10, 3, 0, 10, original)); + this.add(leftContentPane, BorderLayout.CENTER); + } } From 15682fbf2a799b439a05d27c91011cb4d1787e5f Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 18 Apr 2019 17:49:15 +0800 Subject: [PATCH 046/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 22 +- .../fr/design/mainframe/JVirtualTemplate.java | 2 +- .../mainframe/template/info/SendHelper.java | 52 ++ .../mainframe/template/info/TemplateInfo.java | 230 ++++++++ .../template/info/TemplateInfoCollector.java | 299 ++++++++++ .../info}/TemplateProcessInfo.java | 6 +- .../templateinfo/TemplateInfoCollector.java | 550 ------------------ .../designerbase/TemplateProcessTracker.aj | 58 -- .../info/TemplateInfoCollectorTest.java | 46 ++ .../designerchart/TemplateProcessTracker.aj | 3 - .../java/com/fr/design/mainframe/JForm.java | 4 +- .../info}/JFormProcessInfo.java | 2 +- .../designerform/TemplateProcessTracker.aj | 2 - .../mainframe/InformationCollector.java | 2 +- .../com/fr/design/mainframe/JWorkBook.java | 4 +- .../alphafine/component/AlphaFineDialog.java | 5 - .../info}/JWorkBookProcessInfo.java | 2 +- .../src/main/java/com/fr/start/Designer.java | 2 +- .../designer/TemplateProcessTracker.aj | 2 - 19 files changed, 645 insertions(+), 648 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java rename designer-base/src/main/java/com/fr/design/mainframe/{templateinfo => template/info}/TemplateProcessInfo.java (74%) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java delete mode 100644 designer-base/src/main/resources/com/fr/aspectj/designerbase/TemplateProcessTracker.aj create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java rename designer-form/src/main/java/com/fr/design/mainframe/{templateinfo => template/info}/JFormProcessInfo.java (95%) rename designer-realize/src/main/java/com/fr/design/mainframe/{templateinfo => template/info}/JWorkBookProcessInfo.java (98%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 415ff948c..bedeb4791 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -34,8 +34,8 @@ import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; -import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; +import com.fr.design.mainframe.template.info.TemplateInfoCollector; +import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.VcsScene; import com.fr.design.menu.MenuDef; @@ -92,8 +92,6 @@ public abstract class JTemplate> private DesignModelAdapter designModel; private PreviewProvider previewType; private long openTime = 0L; // 打开模板的时间点(包括新建模板) - private TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); - private StringBuilder process = new StringBuilder(""); // 制作模板的过程 public int resolution = ScreenResolution.getScreenResolution(); public JTemplate() { @@ -125,11 +123,9 @@ public abstract class JTemplate> this.undoState = createUndoState(); designModel = createDesignModel(); // 如果不是新建模板,并且在收集列表中 - if (!isNewFile && tic.inList(t)) { + if (!isNewFile && TemplateInfoCollector.getInstance().contains(t.getTemplateID())) { openTime = System.currentTimeMillis(); - process.append(tic.loadProcess(t)); } - } // 刷新右侧属性面板 @@ -153,7 +149,7 @@ public abstract class JTemplate> } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 try { - tic.collectInfo(template, this, openTime, saveTime); + TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), getProcessInfo(), openTime, saveTime); } catch (Throwable th) { // 不管收集过程中出现任何异常,都不应该影响模版保存 } openTime = saveTime; // 更新 openTime,准备下一次计算 @@ -161,16 +157,6 @@ public abstract class JTemplate> public abstract TemplateProcessInfo getProcessInfo(); - // 追加过程记录 - public void appendProcess(String s) { - process.append(s); - } - - // 获取过程记录 - public String getProcess() { - return process.toString(); - } - public U getUndoState() { return undoState; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JVirtualTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JVirtualTemplate.java index cea108892..2c1818614 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JVirtualTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JVirtualTemplate.java @@ -7,7 +7,7 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; import com.fr.design.gui.imenu.UIMenuItem; -import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; +import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; import com.fr.file.FILE; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java new file mode 100644 index 000000000..1a69dc4d7 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java @@ -0,0 +1,52 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.design.mainframe.SiteCenterToken; +import com.fr.general.CloudCenter; +import com.fr.general.ComparatorUtils; +import com.fr.general.http.HttpClient; +import com.fr.json.JSONObject; + +import java.util.HashMap; + +/** + * 负责向服务器发送信息 + * Created by plough on 2019/4/18. + */ +class SendHelper { + private static final String CONSUMING_URL = CloudCenter.getInstance().acquireUrlByKind("tempinfo.consuming") + "/single"; + private static final String PROCESS_URL = CloudCenter.getInstance().acquireUrlByKind("tempinfo.process") + "/single"; + + private static boolean sendConsumingInfo(String content) { + return sendSingleTemplateInfo(CONSUMING_URL, content); + } + + private static boolean sendProcessInfo(String content) { + return sendSingleTemplateInfo(PROCESS_URL, content); + } + + static boolean sendTemplateInfo(TemplateInfo templateInfo) { + return SendHelper.sendConsumingInfo(templateInfo.getConsumingMapJsonString()) && SendHelper.sendProcessInfo(templateInfo.getProcessMapJsonString()); + } + + private static boolean sendSingleTemplateInfo(String url, String content) { + HashMap para = new HashMap<>(); + para.put("token", SiteCenterToken.generateToken()); + para.put("content", content); + HttpClient httpClient = new HttpClient(url, para, true); + httpClient.setTimeout(5000); + httpClient.asGet(); + + if (!httpClient.isServerAlive()) { + return false; + } + + String res = httpClient.getResponseText(); + boolean success; + try { + success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + } catch (Exception ex) { + success = false; + } + return success; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java new file mode 100644 index 000000000..0d8696d63 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -0,0 +1,230 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; +import com.fr.general.GeneralUtils; +import com.fr.json.JSONObject; +import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLWriter; +import com.fr.stable.xml.XMLableReader; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; + +/** + * 对应一张模版的记录 + * Created by plough on 2019/4/18. + */ +class TemplateInfo implements XMLReadable, XMLWriter { + static final String XML_TAG = "TemplateInfo"; + + private static final String XML_PROCESS_MAP = "processMap"; + private static final String XML_CONSUMING_MAP = "consumingMap"; + private static final String ATTR_DAY_COUNT = "day_count"; + private static final String ATTR_TEMPLATE_ID = "templateID"; + private static final String ATTR_PROCESS = "process"; + private static final String ATTR_FLOAT_COUNT = "float_count"; + private static final String ATTR_WIDGET_COUNT = "widget_count"; + private static final String ATTR_CELL_COUNT = "cell_count"; + private static final String ATTR_BLOCK_COUNT = "block_count"; + private static final String ATTR_REPORT_TYPE = "report_type"; + private static final String ATTR_ACTIVITYKEY = "activitykey"; + private static final String ATTR_JAR_TIME = "jar_time"; + private static final String ATTR_CREATE_TIME = "create_time"; + private static final String ATTR_UUID = "uuid"; + private static final String ATTR_TIME_CONSUME = "time_consume"; + private static final String ATTR_VERSION = "version"; + private static final String ATTR_USERNAME = "username"; + + private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 + private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 + private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 + + + private int idleDayCount; // 到现在为止,模版闲置(上次保存后没有再编辑过)的天数 + private String templateID; + private HashMap processMap = new HashMap<>(); + private HashMap consumingMap = new HashMap<>(); + + private TemplateInfo() { + } + + static TemplateInfo newInstance(XMLableReader reader) { + TemplateInfo templateInfo = new TemplateInfo(); + reader.readXMLObject(templateInfo); + return templateInfo; + } + + static TemplateInfo newInstance(String templateID, long timeConsume) { + HashMap consumingMap = new HashMap<>(); + + String username = MarketConfig.getInstance().getBbsUsername(); + String uuid = DesignerEnvManager.getEnvManager().getUUID(); + String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); + String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); + String jarTime = GeneralUtils.readBuildNO(); + String version = ProductConstants.VERSION; + consumingMap.put(ATTR_USERNAME, username); + consumingMap.put(ATTR_UUID, uuid); + consumingMap.put(ATTR_ACTIVITYKEY, activitykey); + consumingMap.put(ATTR_TEMPLATE_ID, templateID); + consumingMap.put(ATTR_CREATE_TIME, createTime); + consumingMap.put(ATTR_TIME_CONSUME, timeConsume); + consumingMap.put(ATTR_JAR_TIME, jarTime); + consumingMap.put(ATTR_VERSION, version); + + TemplateInfo templateInfo = new TemplateInfo(); + templateInfo.consumingMap = consumingMap; + + return templateInfo; + } + + String getTemplateID() { + return templateID; + } + + HashMap getTemplateInfo() { + HashMap templateInfo = new HashMap<>(); + templateInfo.put(XML_PROCESS_MAP, processMap); + templateInfo.put(XML_CONSUMING_MAP, consumingMap); + templateInfo.put(ATTR_DAY_COUNT, idleDayCount); + return templateInfo; + } + + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TAG); + if (StringUtils.isNotEmpty(templateID)) { + writer.attr(ATTR_TEMPLATE_ID, this.templateID); + } + if (idleDayCount >= 0) { + writer.attr(ATTR_DAY_COUNT, this.idleDayCount); + } + writeProcessMap(writer); + writeConsumingMap(writer); + + writer.end(); + } + + private void writeProcessMap(XMLPrintWriter writer) { + writer.startTAG(XML_PROCESS_MAP); + writer.attr(ATTR_PROCESS, (String) processMap.get(ATTR_PROCESS)); + writer.attr(ATTR_FLOAT_COUNT, (int) processMap.get(ATTR_FLOAT_COUNT)); + writer.attr(ATTR_WIDGET_COUNT, (int) processMap.get(ATTR_WIDGET_COUNT)); + writer.attr(ATTR_CELL_COUNT, (int) processMap.get(ATTR_CELL_COUNT)); + writer.attr(ATTR_BLOCK_COUNT, (int) processMap.get(ATTR_BLOCK_COUNT)); + writer.attr(ATTR_REPORT_TYPE, (int) processMap.get(ATTR_REPORT_TYPE)); + writer.end(); + } + + private void writeConsumingMap(XMLPrintWriter writer) { + writer.startTAG(XML_CONSUMING_MAP); + writer.attr(ATTR_ACTIVITYKEY, (String) consumingMap.get(ATTR_ACTIVITYKEY)); + writer.attr(ATTR_JAR_TIME, (String) consumingMap.get(ATTR_JAR_TIME)); + writer.attr(ATTR_CREATE_TIME, (String) consumingMap.get(ATTR_CREATE_TIME)); + writer.attr(ATTR_UUID, (String) consumingMap.get(ATTR_UUID)); + writer.attr(ATTR_TIME_CONSUME, (long) consumingMap.get(ATTR_TIME_CONSUME)); + writer.attr(ATTR_VERSION, (String) consumingMap.get(ATTR_VERSION)); + writer.attr(ATTR_USERNAME, (String) consumingMap.get(ATTR_USERNAME)); + writer.end(); + } + + public void readXML(XMLableReader reader) { + if (!reader.isChildNode()) { + idleDayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); + templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); + } else { + try { + String name = reader.getTagName(); + if (XML_PROCESS_MAP.equals(name)) { + processMap.put(ATTR_PROCESS, reader.getAttrAsString(ATTR_PROCESS, StringUtils.EMPTY)); + processMap.put(ATTR_FLOAT_COUNT, reader.getAttrAsInt(ATTR_FLOAT_COUNT, 0)); + processMap.put(ATTR_WIDGET_COUNT, reader.getAttrAsInt(ATTR_WIDGET_COUNT, 0)); + processMap.put(ATTR_CELL_COUNT, reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); + processMap.put(ATTR_BLOCK_COUNT, reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); + processMap.put(ATTR_REPORT_TYPE, reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); + processMap.put(ATTR_TEMPLATE_ID, templateID); + } else if (XML_CONSUMING_MAP.equals(name)) { + consumingMap.put(ATTR_ACTIVITYKEY, reader.getAttrAsString(ATTR_ACTIVITYKEY, StringUtils.EMPTY)); + consumingMap.put(ATTR_JAR_TIME, reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); + consumingMap.put(ATTR_CREATE_TIME, reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); + consumingMap.put(ATTR_TEMPLATE_ID, templateID); + consumingMap.put(ATTR_UUID, reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); + consumingMap.put(ATTR_TIME_CONSUME, reader.getAttrAsLong(ATTR_TIME_CONSUME, 0)); + consumingMap.put(ATTR_VERSION, reader.getAttrAsString(ATTR_VERSION, "8.0")); + consumingMap.put(ATTR_USERNAME, reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); + } + } catch (Exception ex) { + // 什么也不做,使用默认值 + } + } + } + + boolean isTestTemplate() { + if (!isComplete()) { + return false; + } + + int reportType = (int) processMap.get(ATTR_REPORT_TYPE); + int cellCount = (int) processMap.get(ATTR_CELL_COUNT); + int floatCount = (int) processMap.get(ATTR_FLOAT_COUNT); + int blockCount = (int) processMap.get(ATTR_BLOCK_COUNT); + int widgetCount = (int) processMap.get(ATTR_WIDGET_COUNT); + boolean isTestTemplate = false; + if (reportType == 0) { // 普通报表 + isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; + } else if (reportType == 1) { // 聚合报表 + isTestTemplate = blockCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; + } else { // 表单(reportType == 2) + isTestTemplate = widgetCount <= 1; + } + return isTestTemplate; + } + + boolean isComplete() { + return idleDayCount > COMPLETE_DAY_COUNT; + } + + String getConsumingMapJsonString() { + return new JSONObject(consumingMap).toString(); + } + + String getProcessMapJsonString() { + return new JSONObject(processMap).toString(); + } + + boolean isReadyForSend() { + return isComplete() && !isTestTemplate(); + } + + void addTimeConsume(long timeConsume) { + timeConsume += (long) consumingMap.get(ATTR_TIME_CONSUME); // 加上之前的累计编辑时间 + consumingMap.put(ATTR_TIME_CONSUME, timeConsume); + } + + void updateProcessMap(TemplateProcessInfo processInfo) { + HashMap processMap = new HashMap<>(); + + // 暂不支持模版制作过程的收集 + processMap.put(ATTR_PROCESS, StringUtils.EMPTY); + + processMap.put(ATTR_REPORT_TYPE, processInfo.getReportType()); + processMap.put(ATTR_CELL_COUNT, processInfo.getCellCount()); + processMap.put(ATTR_FLOAT_COUNT, processInfo.getFloatCount()); + processMap.put(ATTR_BLOCK_COUNT, processInfo.getBlockCount()); + processMap.put(ATTR_WIDGET_COUNT, processInfo.getWidgetCount()); + + this.processMap = processMap; + } + + void setIdleDayCount(int idleDayCount) { + this.idleDayCount = idleDayCount; + } + + void addIdleDayCountByOne() { + this.idleDayCount += 1; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java new file mode 100644 index 000000000..d7239886f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -0,0 +1,299 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.base.FRContext; +import com.fr.design.DesignerEnvManager; +import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.EncodeConstants; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLTools; +import com.fr.stable.xml.XMLWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import com.fr.workspace.WorkContext; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + * 做模板的过程和耗时收集,辅助类 + * Created by plough on 2017/2/21. + */ +public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWriter { + private static final String XML_TAG = "TplInfo"; + private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; + private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; + + static final long serialVersionUID = 2007L; + private static final String XML_FILE_NAME = "tpl.info"; + private static final String OBJECT_FILE_NAME = "tplInfo.ser"; + + private static final int ONE_THOUSAND = 1000; + + private static TemplateInfoCollector instance; + private Map templateInfoMap; + private String designerOpenDate; //设计器最近一次打开日期 + + + @SuppressWarnings("unchecked") + private TemplateInfoCollector() { + templateInfoMap = new HashMap<>(); + setDesignerOpenDate(); + } + + /** + * 获取缓存文件存放路径 + */ + private static File getInfoFile(String fileName) { + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), fileName)); + } + + /** + * 获取缓存文件存放路径 + */ + private static File getInfoFile() { + return getInfoFile(XML_FILE_NAME); + } + + public static TemplateInfoCollector getInstance() { + if (instance == null) { + instance = new TemplateInfoCollector(); + + File xmlFile = getInfoFile(); + File objFile = getInfoFile(OBJECT_FILE_NAME); + if (xmlFile.exists()) { + readXMLFile(instance, xmlFile); + } else if (objFile.exists()) { + readFromObjectFile(objFile); + } + } + return instance; + } + + private static void readFromObjectFile(File objFile) { + try { + ObjectInputStream is = new ObjectInputStream(new FileInputStream(objFile)); + instance = (TemplateInfoCollector) is.readObject(); + } catch (Exception ex) { + // 什么也不做,instance 使用新值 + } + } + + /** + * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 + */ + public boolean contains(String templateID) { + return StringUtils.isNotEmpty(templateID) && templateInfoMap.containsKey(templateID); + } + + + + /** + * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 + * 同时将最新数据保存到文件中。 + */ + @SuppressWarnings("unchecked") + public void collectInfo(String templateID, TemplateProcessInfo processInfo, long openTime, long saveTime) { + if (!shouldCollectInfo()) { + return; + } + + long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) + + + TemplateInfo templateInfo; + + if (templateInfoMap.containsKey(templateID)) { // 已有记录 + templateInfo = templateInfoMap.get(templateID); + templateInfo.addTimeConsume(timeConsume); + } else { // 新增 + templateInfo = TemplateInfo.newInstance(templateID, timeConsume); + } + + templateInfo.updateProcessMap(processInfo); + + // 保存模板时,让 day_count 归零 + templateInfo.setIdleDayCount(0); + + templateInfoMap.put(templateID, templateInfo); + + saveInfo(); // 每次更新之后,都同步到暂存文件中 + } + + /** + * 发送本地模板信息到服务器,并清空已发送模版的本地记录 + */ + public void sendTemplateInfo() { + addDayCount(); + + removeTestTemplates(); + + for (String key : templateInfoMap.keySet()) { + TemplateInfo templateInfo = templateInfoMap.get(key); + if (templateInfo.isReadyForSend()) { + if (SendHelper.sendTemplateInfo(templateInfo)) { + // 清空记录 + removeFromTemplateInfoList(templateInfo.getTemplateID()); + } + } + } + + saveInfo(); + } + + private static void readXMLFile(XMLReadable xmlReadable, File xmlFile) { + String charset = EncodeConstants.ENCODING_UTF_8; + try { + String fileContent = getFileContent(xmlFile); + InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); + InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); + XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); + + if (xmlReader != null) { + xmlReader.readXMLObject(xmlReadable); + } + xmlInputStream.close(); + } catch (FileNotFoundException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } catch (XMLStreamException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + + } + + private static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { + InputStream is = new FileInputStream(xmlFile); + return IOUtils.inputStream2String(is); + } + + /** + * 把设计器最近打开日期设定为当前日期 + */ + private void setDesignerOpenDate() { + designerOpenDate = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + } + + /** + * 判断今天是否第一次打开设计器 + */ + private boolean designerOpenFirstTime() { + String today = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + return !ComparatorUtils.equals(today, designerOpenDate); + } + + private boolean shouldCollectInfo() { + //只收集本地环境的 + if (!WorkContext.getCurrent().isLocal()) { + return false; + } + return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); + } + + /** + * 将包含所有信息的对象保存到文件 + */ + private void saveInfo() { + try { + FileOutputStream out = new FileOutputStream(getInfoFile()); + XMLTools.writeOutputStreamXML(this, out); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage()); + } + } + + /** + * 更新 day_count:打开设计器却未编辑模板的连续日子 + */ + private void addDayCount() { + if (designerOpenFirstTime()) { + for (TemplateInfo templateInfo : templateInfoMap.values()) { + templateInfo.addIdleDayCountByOne(); + } + setDesignerOpenDate(); + } + } + + + private void removeTestTemplates() { + // 删除所有已完成的测试模版 + ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key + for (String key : templateInfoMap.keySet()) { + if (templateInfoMap.get(key).isTestTemplate()) { + testTemplateKeys.add(key); + } + } + // 删除测试模板 + for (String key : testTemplateKeys) { + removeFromTemplateInfoList(key); + } + } + + private void removeFromTemplateInfoList(String key) { + templateInfoMap.remove(key); + } + + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + try { + String name = reader.getTagName(); + if (XML_DESIGNER_OPEN_DATE.equals(name)) { + this.designerOpenDate = reader.getElementValue(); + } else if (XML_TEMPLATE_INFO_LIST.equals(name)) { + readTemplateInfoList(reader); + } + } catch (Exception ex) { + // 什么也不做,使用默认值 + } + } + } + + private void readTemplateInfoList(XMLableReader reader) { + reader.readXMLObject(new XMLReadable() { + public void readXML(XMLableReader reader) { + if (TemplateInfo.XML_TAG.equals(reader.getTagName())) { + TemplateInfo templateInfo = TemplateInfo.newInstance(reader); + templateInfoMap.put(templateInfo.getTemplateID(), templateInfo); + } + } + }); + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TAG); + + writer.startTAG(XML_DESIGNER_OPEN_DATE); + writer.textNode(designerOpenDate); + writer.end(); + + writer.startTAG(XML_TEMPLATE_INFO_LIST); + for (TemplateInfo templateInfo : templateInfoMap.values()) { + templateInfo.writeXML(writer); + } + writer.end(); + + writer.end(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java similarity index 74% rename from designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java rename to designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java index 0307e4fd6..427d48c73 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateProcessInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java @@ -1,10 +1,14 @@ -package com.fr.design.mainframe.templateinfo; +package com.fr.design.mainframe.template.info; import com.fr.base.io.BaseBook; /** * Created by plough on 2017/3/17. */ +// todo: 重构 +// 1. 命名不好,表意不清晰。 +// 2. 逻辑混乱,到底是一个 Info 类,还是一个 InfoCollector 类? +// 3. 耦合太强,用组合替代继承 public abstract class TemplateProcessInfo { protected T template; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java deleted file mode 100644 index 57ff2ce8a..000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ /dev/null @@ -1,550 +0,0 @@ -package com.fr.design.mainframe.templateinfo; - -import com.fr.base.FRContext; -import com.fr.base.io.BaseBook; -import com.fr.config.MarketConfig; -import com.fr.design.DesignerEnvManager; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.SiteCenterToken; -import com.fr.general.CloudCenter; -import com.fr.general.ComparatorUtils; -import com.fr.general.GeneralUtils; -import com.fr.general.IOUtils; -import com.fr.general.http.HttpClient; -import com.fr.json.JSONObject; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.EncodeConstants; -import com.fr.stable.ProductConstants; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; -import com.fr.stable.xml.XMLPrintWriter; -import com.fr.stable.xml.XMLReadable; -import com.fr.stable.xml.XMLTools; -import com.fr.stable.xml.XMLWriter; -import com.fr.stable.xml.XMLableReader; -import com.fr.third.javax.xml.stream.XMLStreamException; -import com.fr.workspace.WorkContext; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.ObjectInputStream; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.Map; - -/** - * 做模板的过程和耗时收集,辅助类 - * Created by plough on 2017/2/21. - */ -public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWriter { - static final long serialVersionUID = 2007L; - private static final String FILE_NAME = "tpl.info"; - private static final String OBJECT_FILE_NAME = "tplInfo.ser"; - private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 - private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 - private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 - private static final int ONE_THOUSAND = 1000; - private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; - private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; - private static final String XML_TEMPLATE_INFO = "TemplateInfo"; - private static final String XML_PROCESS_MAP = "processMap"; - private static final String XML_CONSUMING_MAP = "consumingMap"; - private static final String ATTR_DAY_COUNT = "day_count"; - private static final String ATTR_TEMPLATE_ID = "templateID"; - private static final String ATTR_PROCESS = "process"; - private static final String ATTR_FLOAT_COUNT = "float_count"; - private static final String ATTR_WIDGET_COUNT = "widget_count"; - private static final String ATTR_CELL_COUNT = "cell_count"; - private static final String ATTR_BLOCK_COUNT = "block_count"; - private static final String ATTR_REPORT_TYPE = "report_type"; - private static final String ATTR_ACTIVITYKEY = "activitykey"; - private static final String ATTR_JAR_TIME = "jar_time"; - private static final String ATTR_CREATE_TIME = "create_time"; - private static final String ATTR_UUID = "uuid"; - private static final String ATTR_TIME_CONSUME = "time_consume"; - private static final String ATTR_VERSION = "version"; - private static final String ATTR_USERNAME = "username"; - private static final String JSON_CONSUMING_MAP = "jsonConsumingMap"; - private static final String JSON_PROCESS_MAP = "jsonProcessMap"; - private static TemplateInfoCollector instance; - private Map> templateInfoList; - private String designerOpenDate; //设计器最近一次打开日期 - - - @SuppressWarnings("unchecked") - private TemplateInfoCollector() { - templateInfoList = new HashMap<>(); - setDesignerOpenDate(); - } - - /** - * 获取缓存文件存放路径 - */ - private static File getInfoFile() { - return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), FILE_NAME)); - } - - private static File getObjectInfoFile() { - return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), OBJECT_FILE_NAME)); - } - - public static TemplateInfoCollector getInstance() { - if (instance == null) { - instance = new TemplateInfoCollector(); - readXMLFile(instance, getInfoFile()); - // 兼容过渡。如果没有新文件,则从老文件读取数据。以后都是读写新的 xml 文件 - if (!getInfoFile().exists() && getObjectInfoFile().exists()) { - try { - ObjectInputStream is = new ObjectInputStream(new FileInputStream(getObjectInfoFile())); - instance = (TemplateInfoCollector) is.readObject(); - } catch (Exception ex) { - // 什么也不做,instance 使用新值 - } - } - } - return instance; - } - - private static void readXMLFile(XMLReadable xmlReadable, File xmlFile) { - if (xmlFile == null || !xmlFile.exists()) { - return; - } - String charset = EncodeConstants.ENCODING_UTF_8; - try { - String fileContent = getFileContent(xmlFile); - InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); - InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); - XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); - - if (xmlReader != null) { - xmlReader.readXMLObject(xmlReadable); - } - xmlInputStream.close(); - } catch (FileNotFoundException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (XMLStreamException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - - } - - private static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { - InputStream is = new FileInputStream(xmlFile); - return IOUtils.inputStream2String(is); - } - - public static void main(String[] args) { - TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); - tic.sendTemplateInfo(); - } - - /** - * 把设计器最近打开日期设定为当前日期 - */ - private void setDesignerOpenDate() { - designerOpenDate = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); - } - - /** - * 判断今天是否第一次打开设计器 - */ - private boolean designerOpenFirstTime() { - String today = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); - return !ComparatorUtils.equals(today, designerOpenDate); - } - - private boolean shouldCollectInfo() { - //只收集本地环境的 - if (!WorkContext.getCurrent().isLocal()) { - return false; - } - return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); - } - - public void appendProcess(String log) { - if (!shouldCollectInfo()) { - return; - } - // 获取当前编辑的模板 - JTemplate jt = DesignerContext.getDesignerFrame().getSelectedJTemplate(); - // 追加过程记录 - jt.appendProcess(log); - } - - /** - * 加载已经存储的模板过程 - */ - @SuppressWarnings("unchecked") - public String loadProcess(T t) { - HashMap processMap = (HashMap) templateInfoList.get(t.getTemplateID()).get(XML_PROCESS_MAP); - return (String) processMap.get(ATTR_PROCESS); - } - - /** - * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 - */ - public boolean inList(T t) { - return templateInfoList.containsKey(t.getTemplateID()); - } - - /** - * 将包含所有信息的对象保存到文件 - */ - private void saveInfo() { - try { - FileOutputStream out = new FileOutputStream(getInfoFile()); - XMLTools.writeOutputStreamXML(this, out); - } catch (Exception ex) { - FineLoggerFactory.getLogger().error(ex.getMessage()); - } - } - - /** - * 更新 day_count:打开设计器却未编辑模板的连续日子 - */ - private void addDayCount() { - if (designerOpenFirstTime()) { - for (String key : templateInfoList.keySet()) { - HashMap templateInfo = templateInfoList.get(key); - int dayCount = (int) templateInfo.get(ATTR_DAY_COUNT) + 1; - templateInfo.put(ATTR_DAY_COUNT, dayCount); - } - setDesignerOpenDate(); - } - } - - /** - * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 - * 同时将最新数据保存到文件中。 - */ - @SuppressWarnings("unchecked") - public void collectInfo(T t, JTemplate jt, long openTime, long saveTime) { - if (!shouldCollectInfo()) { - return; - } - - HashMap templateInfo; - - long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) - String templateID = t.getTemplateID(); - - if (inList(t)) { // 已有记录 - templateInfo = templateInfoList.get(templateID); - // 更新 conusmingMap - HashMap consumingMap = (HashMap) templateInfo.get(XML_CONSUMING_MAP); - timeConsume += (long) consumingMap.get(ATTR_TIME_CONSUME); // 加上之前的累计编辑时间 - consumingMap.put(ATTR_TIME_CONSUME, timeConsume); - } else { // 新增 - templateInfo = new HashMap<>(); - templateInfo.put(XML_CONSUMING_MAP, getNewConsumingMap(templateID, openTime, timeConsume)); - } - - // 直接覆盖 processMap - templateInfo.put(XML_PROCESS_MAP, getProcessMap(templateID, jt)); - - // 保存模板时,让 day_count 归零 - templateInfo.put(ATTR_DAY_COUNT, 0); - - templateInfoList.put(templateID, templateInfo); - - saveInfo(); // 每次更新之后,都同步到暂存文件中 - } - - private HashMap getNewConsumingMap(String templateID, long openTime, long timeConsume) { - HashMap consumingMap = new HashMap<>(); - - String username = MarketConfig.getInstance().getBbsUsername(); - String uuid = DesignerEnvManager.getEnvManager().getUUID(); - String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); - String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); - String jarTime = GeneralUtils.readBuildNO(); - String version = ProductConstants.VERSION; - consumingMap.put(ATTR_USERNAME, username); - consumingMap.put(ATTR_UUID, uuid); - consumingMap.put(ATTR_ACTIVITYKEY, activitykey); - consumingMap.put(ATTR_TEMPLATE_ID, templateID); - consumingMap.put(ATTR_CREATE_TIME, createTime); - consumingMap.put(ATTR_TIME_CONSUME, timeConsume); - consumingMap.put(ATTR_JAR_TIME, jarTime); - consumingMap.put(ATTR_VERSION, version); - - return consumingMap; - } - - private HashMap getProcessMap(String templateID, JTemplate jt) { - HashMap processMap = new HashMap<>(); - - processMap.put(ATTR_TEMPLATE_ID, templateID); - processMap.put(ATTR_PROCESS, jt.getProcess()); - - TemplateProcessInfo info = jt.getProcessInfo(); - processMap.put(ATTR_REPORT_TYPE, info.getReportType()); - processMap.put(ATTR_CELL_COUNT, info.getCellCount()); - processMap.put(ATTR_FLOAT_COUNT, info.getFloatCount()); - processMap.put(ATTR_BLOCK_COUNT, info.getBlockCount()); - processMap.put(ATTR_WIDGET_COUNT, info.getWidgetCount()); - - return processMap; - } - - /** - * 发送本地模板信息到服务器 - */ - public void sendTemplateInfo() { - addDayCount(); - String consumingUrl = CloudCenter.getInstance().acquireUrlByKind("tempinfo.consuming") + "/single"; - String processUrl = CloudCenter.getInstance().acquireUrlByKind("tempinfo.process") + "/single"; - ArrayList> completeTemplatesInfo = getCompleteTemplatesInfo(); - for (HashMap templateInfo : completeTemplatesInfo) { - String jsonConsumingMap = templateInfo.get(JSON_CONSUMING_MAP); - String jsonProcessMap = templateInfo.get(JSON_PROCESS_MAP); - if (sendSingleTemplateInfo(consumingUrl, jsonConsumingMap) && sendSingleTemplateInfo(processUrl, jsonProcessMap)) { - // 清空记录 - removeFromTemplateInfoList(templateInfo.get(ATTR_TEMPLATE_ID)); - } - } - saveInfo(); - } - - private boolean sendSingleTemplateInfo(String url, String content) { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", content); - HttpClient httpClient = new HttpClient(url, para, true); - httpClient.setTimeout(5000); - httpClient.asGet(); - - if (!httpClient.isServerAlive()) { - return false; - } - - String res = httpClient.getResponseText(); - boolean success; - try { - success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - } catch (Exception ex) { - success = false; - } - return success; - } - - /** - * 返回已完成的模板信息 - */ - @SuppressWarnings("unchecked") - private ArrayList> getCompleteTemplatesInfo() { - ArrayList> completeTemplatesInfo = new ArrayList<>(); - ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key - for (String key : templateInfoList.keySet()) { - HashMap templateInfo = templateInfoList.get(key); - if ((int) templateInfo.get(ATTR_DAY_COUNT) <= COMPLETE_DAY_COUNT) { // 未完成模板 - continue; - } - if (isTestTemplate(templateInfo)) { - testTemplateKeys.add(key); - continue; - } - HashMap consumingMap = (HashMap) templateInfo.get(XML_CONSUMING_MAP); - HashMap processMap = (HashMap) templateInfo.get(XML_PROCESS_MAP); - String jsonConsumingMap = new JSONObject(consumingMap).toString(); - String jsonProcessMap = new JSONObject(processMap).toString(); - HashMap jsonTemplateInfo = new HashMap<>(); - jsonTemplateInfo.put(JSON_CONSUMING_MAP, jsonConsumingMap); - jsonTemplateInfo.put(JSON_PROCESS_MAP, jsonProcessMap); - jsonTemplateInfo.put(ATTR_TEMPLATE_ID, key); - completeTemplatesInfo.add(jsonTemplateInfo); - } - // 删除测试模板 - for (String key : testTemplateKeys) { - removeFromTemplateInfoList(key); - } - return completeTemplatesInfo; - } - - private void removeFromTemplateInfoList(String key) { - templateInfoList.remove(key); - } - - @SuppressWarnings("unchecked") - private boolean isTestTemplate(HashMap templateInfo) { - HashMap processMap = (HashMap) templateInfo.get(XML_PROCESS_MAP); - int reportType = (int) processMap.get(ATTR_REPORT_TYPE); - int cellCount = (int) processMap.get(ATTR_CELL_COUNT); - int floatCount = (int) processMap.get(ATTR_FLOAT_COUNT); - int blockCount = (int) processMap.get(ATTR_BLOCK_COUNT); - int widgetCount = (int) processMap.get(ATTR_WIDGET_COUNT); - boolean isTestTemplate = false; - if (reportType == 0) { // 普通报表 - isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; - } else if (reportType == 1) { // 聚合报表 - isTestTemplate = blockCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; - } else { // 表单(reportType == 2) - isTestTemplate = widgetCount <= 1; - } - return isTestTemplate; - } - - @SuppressWarnings("unchecked") - @Override - public void readXML(XMLableReader reader) { - if (reader.isChildNode()) { - try { - String name = reader.getTagName(); - if (XML_DESIGNER_OPEN_DATE.equals(name)) { - this.designerOpenDate = reader.getElementValue(); - } else if (XML_TEMPLATE_INFO_LIST.equals(name)) { - readTemplateInfoList(reader); - } - } catch (Exception ex) { - // 什么也不做,使用默认值 - } - } - } - - private void readTemplateInfoList(XMLableReader reader) { - reader.readXMLObject(new XMLReadable() { - public void readXML(XMLableReader reader) { - if (XML_TEMPLATE_INFO.equals(reader.getTagName())) { - TemplateInfo templateInfo = new TemplateInfo(); - reader.readXMLObject(templateInfo); - templateInfoList.put(templateInfo.getTemplateID(), templateInfo.getTemplateInfo()); - } - } - }); - } - - @Override - public void writeXML(XMLPrintWriter writer) { - writer.startTAG("TplInfo"); - - writer.startTAG(XML_DESIGNER_OPEN_DATE); - writer.textNode(designerOpenDate); - writer.end(); - - writeTemplateInfoList(writer); - - writer.end(); - } - - private void writeTemplateInfoList(XMLPrintWriter writer) { - //启停 - writer.startTAG(XML_TEMPLATE_INFO_LIST); - for (String templateID : templateInfoList.keySet()) { - new TemplateInfo(templateInfoList.get(templateID)).writeXML(writer); - } - writer.end(); - } - - private class TemplateInfo implements XMLReadable, XMLWriter { - - private int dayCount; - private String templateID; - private HashMap processMap = new HashMap<>(); - private HashMap consumingMap = new HashMap<>(); - - @SuppressWarnings("unchecked") - public TemplateInfo(HashMap templateInfo) { - this.dayCount = (int) templateInfo.get(ATTR_DAY_COUNT); - this.processMap = (HashMap) templateInfo.get(XML_PROCESS_MAP); - this.consumingMap = (HashMap) templateInfo.get(XML_CONSUMING_MAP); - this.templateID = (String) processMap.get(ATTR_TEMPLATE_ID); - } - - public TemplateInfo() { - } - - public String getTemplateID() { - return templateID; - } - - public HashMap getTemplateInfo() { - HashMap templateInfo = new HashMap<>(); - templateInfo.put(XML_PROCESS_MAP, processMap); - templateInfo.put(XML_CONSUMING_MAP, consumingMap); - templateInfo.put(ATTR_DAY_COUNT, dayCount); - return templateInfo; - } - - public void writeXML(XMLPrintWriter writer) { - writer.startTAG(XML_TEMPLATE_INFO); - if (StringUtils.isNotEmpty(templateID)) { - writer.attr(ATTR_TEMPLATE_ID, this.templateID); - } - if (dayCount >= 0) { - writer.attr(ATTR_DAY_COUNT, this.dayCount); - } - writeProcessMap(writer); - writeConsumingMap(writer); - - writer.end(); - } - - private void writeProcessMap(XMLPrintWriter writer) { - writer.startTAG(XML_PROCESS_MAP); - writer.attr(ATTR_PROCESS, (String) processMap.get(ATTR_PROCESS)); - writer.attr(ATTR_FLOAT_COUNT, (int) processMap.get(ATTR_FLOAT_COUNT)); - writer.attr(ATTR_WIDGET_COUNT, (int) processMap.get(ATTR_WIDGET_COUNT)); - writer.attr(ATTR_CELL_COUNT, (int) processMap.get(ATTR_CELL_COUNT)); - writer.attr(ATTR_BLOCK_COUNT, (int) processMap.get(ATTR_BLOCK_COUNT)); - writer.attr(ATTR_REPORT_TYPE, (int) processMap.get(ATTR_REPORT_TYPE)); - writer.end(); - } - - private void writeConsumingMap(XMLPrintWriter writer) { - writer.startTAG(XML_CONSUMING_MAP); - writer.attr(ATTR_ACTIVITYKEY, (String) consumingMap.get(ATTR_ACTIVITYKEY)); - writer.attr(ATTR_JAR_TIME, (String) consumingMap.get(ATTR_JAR_TIME)); - writer.attr(ATTR_CREATE_TIME, (String) consumingMap.get(ATTR_CREATE_TIME)); - writer.attr(ATTR_UUID, (String) consumingMap.get(ATTR_UUID)); - writer.attr(ATTR_TIME_CONSUME, (long) consumingMap.get(ATTR_TIME_CONSUME)); - writer.attr(ATTR_VERSION, (String) consumingMap.get(ATTR_VERSION)); - writer.attr(ATTR_USERNAME, (String) consumingMap.get(ATTR_USERNAME)); - writer.end(); - } - - public void readXML(XMLableReader reader) { - if (!reader.isChildNode()) { - dayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); - templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); - } else { - try { - String name = reader.getTagName(); - if (XML_PROCESS_MAP.equals(name)) { - processMap.put(ATTR_PROCESS, reader.getAttrAsString(ATTR_PROCESS, StringUtils.EMPTY)); - processMap.put(ATTR_FLOAT_COUNT, reader.getAttrAsInt(ATTR_FLOAT_COUNT, 0)); - processMap.put(ATTR_WIDGET_COUNT, reader.getAttrAsInt(ATTR_WIDGET_COUNT, 0)); - processMap.put(ATTR_CELL_COUNT, reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); - processMap.put(ATTR_BLOCK_COUNT, reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); - processMap.put(ATTR_REPORT_TYPE, reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); - processMap.put(ATTR_TEMPLATE_ID, templateID); - } else if (XML_CONSUMING_MAP.equals(name)) { - consumingMap.put(ATTR_ACTIVITYKEY, reader.getAttrAsString(ATTR_ACTIVITYKEY, StringUtils.EMPTY)); - consumingMap.put(ATTR_JAR_TIME, reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); - consumingMap.put(ATTR_CREATE_TIME, reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); - consumingMap.put(ATTR_TEMPLATE_ID, templateID); - consumingMap.put(ATTR_UUID, reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); - consumingMap.put(ATTR_TIME_CONSUME, reader.getAttrAsLong(ATTR_TIME_CONSUME, 0)); - consumingMap.put(ATTR_VERSION, reader.getAttrAsString(ATTR_VERSION, "8.0")); - consumingMap.put(ATTR_USERNAME, reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); - } - } catch (Exception ex) { - // 什么也不做,使用默认值 - } - } - } - - } -} diff --git a/designer-base/src/main/resources/com/fr/aspectj/designerbase/TemplateProcessTracker.aj b/designer-base/src/main/resources/com/fr/aspectj/designerbase/TemplateProcessTracker.aj deleted file mode 100644 index 1ab23100b..000000000 --- a/designer-base/src/main/resources/com/fr/aspectj/designerbase/TemplateProcessTracker.aj +++ /dev/null @@ -1,58 +0,0 @@ -package com.fr.aspectj.designerbase; - -/** - * 记录模板过程 - * Created by plough on 2017/3/3. - */ - -import org.aspectj.lang.reflect.SourceLocation; - -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; - -public aspect TemplateProcessTracker { - //声明一个pointcut,匹配你需要的方法 - pointcut onMouseClicked(MouseEvent e): - execution(* mouseClicked(MouseEvent)) && args(e); - pointcut onMousePressed(MouseEvent e): - execution(* mousePressed(MouseEvent)) && args(e); - pointcut onMouseReleased(MouseEvent e): - execution(* mouseReleased(MouseEvent)) && args(e); - pointcut onActionPerformed(ActionEvent e): - execution(* actionPerformed(ActionEvent)) && args(e); - pointcut onSetValueAt(Object v, int r, int c): - execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); - - //before表示之前的意思 - //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 - before(MouseEvent e): onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { - SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 - - //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); - String log = ""; - //TemplateInfoCollector.appendProcess(log); - } - //同上 - before(ActionEvent e): onActionPerformed(e) { - SourceLocation sl = thisJoinPoint.getSourceLocation(); - // !within(LogHandlerBar) 没用, 手动过滤 - if (e != null && e.getSource().toString().contains("javax.swing.Timer")) { - return; - } - - //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); - String log = ""; - //TemplateInfoCollector.appendProcess(log); - - } - //同上 - before(Object v, int r, int c): onSetValueAt(v, r, c) { - SourceLocation sl = thisJoinPoint.getSourceLocation(); - - //String log getSourceLocation= String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); - String log = ""; - // TemplateInfoCollector.appendProcess(log); - } - - -} diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java new file mode 100644 index 000000000..d3ced2922 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -0,0 +1,46 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.invoke.Reflect; +import com.fr.stable.ProductConstants; +import org.easymock.EasyMock; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * Created by plough on 2019/4/18. + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest(ProductConstants.class) +public class TemplateInfoCollectorTest { + + @Before + public void setUp() { + PowerMock.mockStatic(ProductConstants.class); + EasyMock.expect(ProductConstants.getEnvHome()).andReturn("/Users/plough/.FineReport100").anyTimes(); + EasyMock.replay(); + PowerMock.replayAll(); + } + + // todo: 单元测试需要一般化,不能依赖特定电脑 + @Test + public void testReadXML() { + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + assertEquals("2019-04-18", Reflect.on(collector).field("designerOpenDate").get()); + assertTrue(((Map)Reflect.on(collector).field("templateInfoMap").get()).size() > 0); + } + + @Test + public void testSend() { + TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); +// tic.sendTemplateInfo(); + } +} diff --git a/designer-chart/src/main/resources/com/fr/aspectj/designerchart/TemplateProcessTracker.aj b/designer-chart/src/main/resources/com/fr/aspectj/designerchart/TemplateProcessTracker.aj index 89ed91033..a2d2fb7b4 100644 --- a/designer-chart/src/main/resources/com/fr/aspectj/designerchart/TemplateProcessTracker.aj +++ b/designer-chart/src/main/resources/com/fr/aspectj/designerchart/TemplateProcessTracker.aj @@ -4,13 +4,10 @@ package com.fr.aspectj.designerchart; * Created by plough on 2017/3/3. */ import com.fr.chart.chartattr.Chart; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import org.aspectj.lang.reflect.SourceLocation; -import javax.swing.event.ListSelectionEvent; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; -import java.util.Date; public aspect TemplateProcessTracker { //声明一个pointcut,匹配你需要的方法 diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index d25ba6fee..bcf761fac 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -37,8 +37,8 @@ import com.fr.design.gui.xpane.FormHyperlinkGroupPaneNoPop; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; -import com.fr.design.mainframe.templateinfo.JFormProcessInfo; -import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; +import com.fr.design.mainframe.template.info.JFormProcessInfo; +import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java similarity index 95% rename from designer-form/src/main/java/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java rename to designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java index 15f501b13..fce5ab809 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/templateinfo/JFormProcessInfo.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java @@ -1,4 +1,4 @@ -package com.fr.design.mainframe.templateinfo; +package com.fr.design.mainframe.template.info; import com.fr.form.main.Form; import com.fr.form.ui.container.WLayout; diff --git a/designer-form/src/main/resources/com/fr/aspectj/designerform/TemplateProcessTracker.aj b/designer-form/src/main/resources/com/fr/aspectj/designerform/TemplateProcessTracker.aj index 3be1a77fa..9daec5009 100644 --- a/designer-form/src/main/resources/com/fr/aspectj/designerform/TemplateProcessTracker.aj +++ b/designer-form/src/main/resources/com/fr/aspectj/designerform/TemplateProcessTracker.aj @@ -3,12 +3,10 @@ package com.fr.aspectj.designerform; /** * Created by plough on 2017/3/3. */ -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import org.aspectj.lang.reflect.SourceLocation; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; -import java.util.Date; public aspect TemplateProcessTracker { //声明一个pointcut,匹配你需要的方法 diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index 7a3966c17..61f39b81d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -8,7 +8,7 @@ import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; import com.fr.design.mainframe.messagecollect.impl.FocusPointMessageUploader; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java b/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java index 44becbd9c..07136bc1e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java @@ -41,8 +41,8 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIModeControlContainer; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.mainframe.cell.QuickEditorRegion; -import com.fr.design.mainframe.templateinfo.JWorkBookProcessInfo; -import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; +import com.fr.design.mainframe.template.info.JWorkBookProcessInfo; +import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java index c8ecd9303..044a484b1 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java @@ -33,15 +33,12 @@ import com.fr.design.mainframe.alphafine.search.manager.impl.RecentSearchManager import com.fr.design.mainframe.alphafine.search.manager.impl.RecommendSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.SegmentationManager; import com.fr.design.mainframe.alphafine.search.manager.impl.SimilarSearchManager; -import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.form.main.Form; import com.fr.form.main.FormIO; import com.fr.general.ComparatorUtils; import com.fr.general.http.HttpClient; import com.fr.io.TemplateWorkBookIO; import com.fr.io.exporter.ImageExporter; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.main.impl.WorkBook; @@ -958,8 +955,6 @@ public class AlphaFineDialog extends UIDialog { RecentSearchManager searchManager = RecentSearchManager.getInstance(); searchManager.addModel(storeText, cellModel); sendDataToServer(storeText, cellModel); - TemplateInfoCollector.getInstance().sendTemplateInfo(); - ErrorInfoUploader.getInstance().sendErrorInfo(); } } }); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java similarity index 98% rename from designer-realize/src/main/java/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java rename to designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java index 306c6b0d1..eec777328 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/templateinfo/JWorkBookProcessInfo.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java @@ -1,4 +1,4 @@ -package com.fr.design.mainframe.templateinfo; +package com.fr.design.mainframe.template.info; import com.fr.base.parameter.ParameterUI; import com.fr.main.impl.WorkBook; diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index d262359dd..23bf2f0ff 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -28,7 +28,7 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; diff --git a/designer-realize/src/main/resources/com/fr/aspectj/designer/TemplateProcessTracker.aj b/designer-realize/src/main/resources/com/fr/aspectj/designer/TemplateProcessTracker.aj index 8e4eeb716..2c5433818 100644 --- a/designer-realize/src/main/resources/com/fr/aspectj/designer/TemplateProcessTracker.aj +++ b/designer-realize/src/main/resources/com/fr/aspectj/designer/TemplateProcessTracker.aj @@ -5,13 +5,11 @@ package com.fr.aspectj.designer; * Created by plough on 2017/3/3. */ -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.grid.Grid; import org.aspectj.lang.reflect.SourceLocation; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; -import java.util.Date; public aspect TemplateProcessTracker { //声明一个pointcut,匹配你需要的方法 From 61fd215bacec88366751847112c9348c4e88aaf3 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 18 Apr 2019 17:49:46 +0800 Subject: [PATCH 047/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E9=87=8D=E6=9E=84=3D>?= =?UTF-8?q?=E5=8E=BB=E6=8E=898.0=E6=97=B6=E6=9C=9F=E7=9A=84=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/info/TemplateInfoCollector.java | 69 ++++--------------- 1 file changed, 15 insertions(+), 54 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index d7239886f..2a4fa1a04 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -22,11 +22,10 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.ObjectInputStream; -import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -38,14 +37,12 @@ import java.util.Map; * 做模板的过程和耗时收集,辅助类 * Created by plough on 2017/2/21. */ -public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWriter { +public class TemplateInfoCollector implements XMLReadable, XMLWriter { private static final String XML_TAG = "TplInfo"; private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; - static final long serialVersionUID = 2007L; private static final String XML_FILE_NAME = "tpl.info"; - private static final String OBJECT_FILE_NAME = "tplInfo.ser"; private static final int ONE_THOUSAND = 1000; @@ -56,48 +53,37 @@ public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWrit @SuppressWarnings("unchecked") private TemplateInfoCollector() { - templateInfoMap = new HashMap<>(); setDesignerOpenDate(); + + loadTemplateInfoMap(); } - /** - * 获取缓存文件存放路径 - */ - private static File getInfoFile(String fileName) { - return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), fileName)); + private void loadTemplateInfoMap() { + templateInfoMap = new HashMap<>(); + try { + XMLableReader xmlReader = XMLableReader.createXMLableReader(new FileReader(getInfoFile())); + xmlReader.readXMLObject(this); + } catch (XMLStreamException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } } /** * 获取缓存文件存放路径 */ private static File getInfoFile() { - return getInfoFile(XML_FILE_NAME); + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), XML_FILE_NAME)); } public static TemplateInfoCollector getInstance() { if (instance == null) { instance = new TemplateInfoCollector(); - - File xmlFile = getInfoFile(); - File objFile = getInfoFile(OBJECT_FILE_NAME); - if (xmlFile.exists()) { - readXMLFile(instance, xmlFile); - } else if (objFile.exists()) { - readFromObjectFile(objFile); - } } return instance; } - private static void readFromObjectFile(File objFile) { - try { - ObjectInputStream is = new ObjectInputStream(new FileInputStream(objFile)); - instance = (TemplateInfoCollector) is.readObject(); - } catch (Exception ex) { - // 什么也不做,instance 使用新值 - } - } - /** * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 */ @@ -105,13 +91,10 @@ public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWrit return StringUtils.isNotEmpty(templateID) && templateInfoMap.containsKey(templateID); } - - /** * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 * 同时将最新数据保存到文件中。 */ - @SuppressWarnings("unchecked") public void collectInfo(String templateID, TemplateProcessInfo processInfo, long openTime, long saveTime) { if (!shouldCollectInfo()) { return; @@ -160,28 +143,6 @@ public class TemplateInfoCollector implements Serializable, XMLReadable, XMLWrit saveInfo(); } - private static void readXMLFile(XMLReadable xmlReadable, File xmlFile) { - String charset = EncodeConstants.ENCODING_UTF_8; - try { - String fileContent = getFileContent(xmlFile); - InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); - InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); - XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); - - if (xmlReader != null) { - xmlReader.readXMLObject(xmlReadable); - } - xmlInputStream.close(); - } catch (FileNotFoundException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } catch (XMLStreamException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - - } - private static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { InputStream is = new FileInputStream(xmlFile); return IOUtils.inputStream2String(is); From 5e5815d88b473121af76b73357796b5fc17a615a Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 18 Apr 2019 19:13:18 +0800 Subject: [PATCH 048/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E9=87=8D=E6=9E=84=3D>?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 4 +- .../mainframe/template/info/TemplateInfo.java | 6 +- .../template/info/TemplateInfoCollector.java | 117 +++++++----------- .../info/TemplateInfoCollectorTest.java | 16 +-- .../design/mainframe/template/info/tpl.info | 35 ++++++ 5 files changed, 92 insertions(+), 86 deletions(-) create mode 100644 designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index bedeb4791..f4aa5bc9b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -78,6 +78,7 @@ import java.util.regex.Pattern; public abstract class JTemplate> extends TargetComponent implements ToolBarMenuDockPlus, DesignerProxy { // TODO ALEX_SEP editingFILE这个属性一定要吗?如果非要不可,有没有可能保证不为null private static final int PREFIX_NUM = 3000; + private static final int ONE_THOUSAND = 1000; private FILE editingFILE = null; // alex:初始状态为saved,这样不管是新建模板,还是打开模板,如果未做任何操作直接关闭,不提示保存 private boolean saved = true; @@ -149,7 +150,8 @@ public abstract class JTemplate> } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 try { - TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), getProcessInfo(), openTime, saveTime); + long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) + TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), getProcessInfo(), timeConsume); } catch (Throwable th) { // 不管收集过程中出现任何异常,都不应该影响模版保存 } openTime = saveTime; // 更新 openTime,准备下一次计算 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index 0d8696d63..0def268ab 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -53,13 +53,13 @@ class TemplateInfo implements XMLReadable, XMLWriter { private TemplateInfo() { } - static TemplateInfo newInstance(XMLableReader reader) { + static TemplateInfo newInstanceByRead(XMLableReader reader) { TemplateInfo templateInfo = new TemplateInfo(); reader.readXMLObject(templateInfo); return templateInfo; } - static TemplateInfo newInstance(String templateID, long timeConsume) { + static TemplateInfo newInstance(String templateID) { HashMap consumingMap = new HashMap<>(); String username = MarketConfig.getInstance().getBbsUsername(); @@ -73,7 +73,7 @@ class TemplateInfo implements XMLReadable, XMLWriter { consumingMap.put(ATTR_ACTIVITYKEY, activitykey); consumingMap.put(ATTR_TEMPLATE_ID, templateID); consumingMap.put(ATTR_CREATE_TIME, createTime); - consumingMap.put(ATTR_TIME_CONSUME, timeConsume); + consumingMap.put(ATTR_TIME_CONSUME, 0); consumingMap.put(ATTR_JAR_TIME, jarTime); consumingMap.put(ATTR_VERSION, version); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 2a4fa1a04..2bd302282 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -3,9 +3,7 @@ package com.fr.design.mainframe.template.info; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; -import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; @@ -17,16 +15,10 @@ import com.fr.stable.xml.XMLableReader; import com.fr.third.javax.xml.stream.XMLStreamException; import com.fr.workspace.WorkContext; -import java.io.ByteArrayInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -41,40 +33,13 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { private static final String XML_TAG = "TplInfo"; private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; - private static final String XML_FILE_NAME = "tpl.info"; - - private static final int ONE_THOUSAND = 1000; - private static TemplateInfoCollector instance; private Map templateInfoMap; private String designerOpenDate; //设计器最近一次打开日期 - - @SuppressWarnings("unchecked") private TemplateInfoCollector() { - setDesignerOpenDate(); - - loadTemplateInfoMap(); - } - - private void loadTemplateInfoMap() { - templateInfoMap = new HashMap<>(); - try { - XMLableReader xmlReader = XMLableReader.createXMLableReader(new FileReader(getInfoFile())); - xmlReader.readXMLObject(this); - } catch (XMLStreamException e) { - e.printStackTrace(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - /** - * 获取缓存文件存放路径 - */ - private static File getInfoFile() { - return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), XML_FILE_NAME)); + init(); } public static TemplateInfoCollector getInstance() { @@ -94,32 +59,23 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { /** * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 * 同时将最新数据保存到文件中。 + * @param timeConsume 本次制作耗时,单位为 s */ - public void collectInfo(String templateID, TemplateProcessInfo processInfo, long openTime, long saveTime) { + public void collectInfo(String templateID, TemplateProcessInfo processInfo, long timeConsume) { if (!shouldCollectInfo()) { return; } - long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) - - - TemplateInfo templateInfo; - - if (templateInfoMap.containsKey(templateID)) { // 已有记录 - templateInfo = templateInfoMap.get(templateID); - templateInfo.addTimeConsume(timeConsume); - } else { // 新增 - templateInfo = TemplateInfo.newInstance(templateID, timeConsume); - } - + TemplateInfo templateInfo = getOrCreateTemplateInfoByID(templateID); + // 收集制作耗时 + templateInfo.addTimeConsume(timeConsume); + // 收集模版基本信息 templateInfo.updateProcessMap(processInfo); - - // 保存模板时,让 day_count 归零 + // 刷新闲置日计数器 templateInfo.setIdleDayCount(0); - templateInfoMap.put(templateID, templateInfo); - - saveInfo(); // 每次更新之后,都同步到暂存文件中 + // 每次更新之后,都同步到暂存文件中 + saveInfo(); } /** @@ -143,9 +99,37 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { saveInfo(); } - private static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { - InputStream is = new FileInputStream(xmlFile); - return IOUtils.inputStream2String(is); + /** + * 获取缓存文件存放路径 + */ + private static File getInfoFile() { + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), XML_FILE_NAME)); + } + + private void init() { + templateInfoMap = new HashMap<>(); + setDesignerOpenDate(); + + if (!getInfoFile().exists()) { + return; + } + try { + XMLableReader xmlReader = XMLableReader.createXMLableReader(new FileReader(getInfoFile())); + xmlReader.readXMLObject(this); + } catch (XMLStreamException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } catch (FileNotFoundException e) { + // do nothing + } + } + + private TemplateInfo getOrCreateTemplateInfoByID(String templateID) { + if (templateInfoMap.containsKey(templateID)) { + return templateInfoMap.get(templateID); + } + TemplateInfo templateInfo = TemplateInfo.newInstance(templateID); + templateInfoMap.put(templateID, templateInfo); + return templateInfo; } /** @@ -156,7 +140,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } /** - * 判断今天是否第一次打开设计器 + * 判断今天是否第一次打开设计器,为了防止同一天内,多次 addDayCount */ private boolean designerOpenFirstTime() { String today = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); @@ -195,7 +179,6 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } } - private void removeTestTemplates() { // 删除所有已完成的测试模版 ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key @@ -221,8 +204,9 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { String name = reader.getTagName(); if (XML_DESIGNER_OPEN_DATE.equals(name)) { this.designerOpenDate = reader.getElementValue(); - } else if (XML_TEMPLATE_INFO_LIST.equals(name)) { - readTemplateInfoList(reader); + } else if (TemplateInfo.XML_TAG.equals(name)) { + TemplateInfo templateInfo = TemplateInfo.newInstanceByRead(reader); + templateInfoMap.put(templateInfo.getTemplateID(), templateInfo); } } catch (Exception ex) { // 什么也不做,使用默认值 @@ -230,17 +214,6 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } } - private void readTemplateInfoList(XMLableReader reader) { - reader.readXMLObject(new XMLReadable() { - public void readXML(XMLableReader reader) { - if (TemplateInfo.XML_TAG.equals(reader.getTagName())) { - TemplateInfo templateInfo = TemplateInfo.newInstance(reader); - templateInfoMap.put(templateInfo.getTemplateID(), templateInfo); - } - } - }); - } - @Override public void writeXML(XMLPrintWriter writer) { writer.startTAG(XML_TAG); diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index d3ced2922..1c3823501 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -13,7 +13,6 @@ import org.powermock.modules.junit4.PowerMockRunner; import java.util.Map; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; /** * Created by plough on 2019/4/18. @@ -25,22 +24,19 @@ public class TemplateInfoCollectorTest { @Before public void setUp() { PowerMock.mockStatic(ProductConstants.class); - EasyMock.expect(ProductConstants.getEnvHome()).andReturn("/Users/plough/.FineReport100").anyTimes(); + + String filePath = getClass().getResource("tpl.info").getPath(); + String dirPath = filePath.substring(0, filePath.indexOf("tpl.info")); + EasyMock.expect(ProductConstants.getEnvHome()).andReturn(dirPath).anyTimes(); + EasyMock.replay(); PowerMock.replayAll(); } - // todo: 单元测试需要一般化,不能依赖特定电脑 @Test public void testReadXML() { TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); assertEquals("2019-04-18", Reflect.on(collector).field("designerOpenDate").get()); - assertTrue(((Map)Reflect.on(collector).field("templateInfoMap").get()).size() > 0); - } - - @Test - public void testSend() { - TemplateInfoCollector tic = TemplateInfoCollector.getInstance(); -// tic.sendTemplateInfo(); + assertEquals(7, ((Map) Reflect.on(collector).field("templateInfoMap").get()).size()); } } diff --git a/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info b/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info new file mode 100644 index 000000000..39bec0006 --- /dev/null +++ b/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1599fffaa991fed6f07aa9c3f357a64025f374cd Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 18 Apr 2019 19:24:00 +0800 Subject: [PATCH 049/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/template/info/TemplateInfo.java | 6 +++--- .../mainframe/template/info/TemplateInfoCollector.java | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index 0def268ab..7f2e1e766 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -44,9 +44,9 @@ class TemplateInfo implements XMLReadable, XMLWriter { private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 - private int idleDayCount; // 到现在为止,模版闲置(上次保存后没有再编辑过)的天数 private String templateID; + // todo: processMap 和 consumingMap 还可以再拆解为小类,以后继续重构 private HashMap processMap = new HashMap<>(); private HashMap consumingMap = new HashMap<>(); @@ -220,8 +220,8 @@ class TemplateInfo implements XMLReadable, XMLWriter { this.processMap = processMap; } - void setIdleDayCount(int idleDayCount) { - this.idleDayCount = idleDayCount; + void resetIdleDayCount() { + this.idleDayCount = 0; } void addIdleDayCountByOne() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 2bd302282..103047be7 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -72,7 +72,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { // 收集模版基本信息 templateInfo.updateProcessMap(processInfo); // 刷新闲置日计数器 - templateInfo.setIdleDayCount(0); + templateInfo.resetIdleDayCount(); // 每次更新之后,都同步到暂存文件中 saveInfo(); @@ -82,7 +82,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { * 发送本地模板信息到服务器,并清空已发送模版的本地记录 */ public void sendTemplateInfo() { - addDayCount(); + addIdleDayCount(); removeTestTemplates(); @@ -140,7 +140,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } /** - * 判断今天是否第一次打开设计器,为了防止同一天内,多次 addDayCount + * 判断今天是否第一次打开设计器,为了防止同一天内,多次 addIdleDayCount */ private boolean designerOpenFirstTime() { String today = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); @@ -170,7 +170,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { /** * 更新 day_count:打开设计器却未编辑模板的连续日子 */ - private void addDayCount() { + private void addIdleDayCount() { if (designerOpenFirstTime()) { for (TemplateInfo templateInfo : templateInfoMap.values()) { templateInfo.addIdleDayCountByOne(); @@ -179,8 +179,8 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } } + // 删除所有已完成的测试模版 private void removeTestTemplates() { - // 删除所有已完成的测试模版 ArrayList testTemplateKeys = new ArrayList<>(); // 保存测试模板的key for (String key : templateInfoMap.keySet()) { if (templateInfoMap.get(key).isTestTemplate()) { From 2a520423a459a4d48f3fc5c4ed87389a4af9080a Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 18 Apr 2019 21:29:34 +0800 Subject: [PATCH 050/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E9=87=8D=E6=9E=84=3D>?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/template/info/SendHelper.java | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java index 1a69dc4d7..1f7aeec63 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java @@ -3,9 +3,10 @@ package com.fr.design.mainframe.template.info; import com.fr.design.mainframe.SiteCenterToken; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; -import com.fr.general.http.HttpClient; +import com.fr.general.http.HttpToolbox; import com.fr.json.JSONObject; +import java.io.IOException; import java.util.HashMap; /** @@ -32,21 +33,12 @@ class SendHelper { HashMap para = new HashMap<>(); para.put("token", SiteCenterToken.generateToken()); para.put("content", content); - HttpClient httpClient = new HttpClient(url, para, true); - httpClient.setTimeout(5000); - httpClient.asGet(); - if (!httpClient.isServerAlive()) { - return false; - } - - String res = httpClient.getResponseText(); - boolean success; try { - success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - } catch (Exception ex) { - success = false; + String res = HttpToolbox.get(url, para); + return ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + } catch (IOException ignore) { } - return success; + return false; } } From d68ad46855e63b13165a65507b5c81a65a34b9b4 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 18 Apr 2019 22:13:44 +0800 Subject: [PATCH 051/196] =?UTF-8?q?KERNEL-442=20=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E9=87=8D=E6=9E=84=E8=BF=87?= =?UTF-8?q?=E7=9A=84=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E5=99=A8=E5=BC=80?= =?UTF-8?q?=E5=85=B3=EF=BC=88=E5=9F=BA=E4=BA=8EFineUI=E5=92=8CTypeScript?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 21 +- .../actions/server/PluginManagerAction.java | 15 +- .../com/fr/design/bridge/exec/JSBridge.java | 17 + .../com/fr/design/bridge/exec/JSCallback.java | 18 + .../callback => bridge/exec}/JSExecutor.java | 2 +- .../exec/JSUtils.java} | 58 +-- .../fr/design/extra/PluginJavaFxExecutor.java | 42 ++ .../fr/design/extra/PluginOperateUtils.java | 2 +- .../com/fr/design/extra/PluginWebBridge.java | 20 +- .../exe/callback/InstallFromDiskCallback.java | 1 + .../exe/callback/InstallOnlineCallback.java | 1 + .../exe/callback/ModifyStatusCallback.java | 1 + .../exe/callback/UninstallPluginCallback.java | 1 + .../exe/callback/UpdateFromDiskCallback.java | 1 + .../exe/callback/UpdateOnlineCallback.java | 1 + .../main/java/com/fr/design/ui/Assistant.java | 1 + .../com/fr/design/ui/EmbProtocolHandler.java | 34 +- .../java/com/fr/design/ui/ModernUIPane.java | 22 + .../java/com/fr/design/upm/UPMBridge.java | 373 ++++++++++++++++- .../java/com/fr/design/upm/UPMDialog.java | 4 +- .../main/java/com/fr/design/upm/UPMPane.java | 20 +- .../java/com/fr/design/upm/UpmBridge.java | 378 ++++++++++++++++++ .../java/com/fr/design/upm/UpmDialog.java | 34 ++ .../design/upm/{UPM.java => UpmFinder.java} | 24 +- .../main/java/com/fr/design/upm/UpmPane.java | 72 ++++ .../main/java/com/fr/design/upm/UpmUtils.java | 21 + .../fr/design/upm/event/CertificateEvent.java | 12 + .../design/upm/exec/UpmBrowserExecutor.java | 30 ++ .../upm/loader/UpmDesignResourceLoader.java | 27 ++ .../com/fr/design/upm/task/UpmTaskWorker.java | 52 +++ .../main/resources/com/fr/design/upm/warn.js | 4 +- .../design/mainframe/bbs/UserInfoLabel.java | 16 + 32 files changed, 1237 insertions(+), 88 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java rename designer-base/src/main/java/com/fr/design/{extra/exe/callback => bridge/exec}/JSExecutor.java (72%) rename designer-base/src/main/java/com/fr/design/{extra/exe/callback/JSCallback.java => bridge/exec/JSUtils.java} (59%) create mode 100644 designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmDialog.java rename designer-base/src/main/java/com/fr/design/upm/{UPM.java => UpmFinder.java} (70%) create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmPane.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmUtils.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 4edf71c3b..ae6ba4c25 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -2,6 +2,7 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; import com.fr.config.Configuration; +import com.fr.config.ServerPreferenceConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.dialog.BasicDialog; @@ -24,7 +25,6 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; @@ -133,6 +133,7 @@ public class PreferencePane extends BasicPane { private UICheckBox oracleSpace; private UISpinner cachingTemplateSpinner; private UICheckBox openDebugComboBox; + private UICheckBox useOptimizedUPMCheckbox; private UICheckBox joinProductImprove; public PreferencePane() { @@ -178,6 +179,11 @@ public class PreferencePane extends BasicPane { debuggerPane.add(openDebugComboBox, BorderLayout.CENTER); advancePane.add(debuggerPane); + JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager")); + useOptimizedUPMCheckbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager")); + upmSelectorPane.add(useOptimizedUPMCheckbox); + advancePane.add(upmSelectorPane); + JPanel improvePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); @@ -560,6 +566,8 @@ public class PreferencePane extends BasicPane { openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); + useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM()); + this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); @@ -641,6 +649,17 @@ public class PreferencePane extends BasicPane { return new Class[]{Log4jConfig.class}; } }); + Configurations.update(new Worker() { + @Override + public void run() { + ServerPreferenceConfig.getInstance().setUseOptimizedUPM(useOptimizedUPMCheckbox.isSelected()); + } + + @Override + public Class[] targets() { + return new Class[] {ServerPreferenceConfig.class}; + } + }); } diff --git a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java index aa2eef705..1b7d7bbc4 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java @@ -1,20 +1,12 @@ package com.fr.design.actions.server; -import com.fr.base.BaseUtils; import com.fr.config.ServerPreferenceConfig; -import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; -import com.fr.design.dialog.UIDialog; -import com.fr.design.extra.ShopDialog; import com.fr.design.extra.WebViewDlgHelper; -import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.MenuKeySet; -import com.fr.design.upm.UPM; -import com.fr.design.upm.UPMDialog; -import com.fr.design.upm.UPMPane; +import com.fr.design.upm.UpmFinder; import com.fr.general.IOUtils; - import javax.swing.*; import java.awt.event.ActionEvent; @@ -35,9 +27,8 @@ public class PluginManagerAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { // 可以启用新版本的插件商店(使用JxBrowser作为容器) - if (DesignerEnvManager.getEnvManager().isOpenDebug() - ||ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { - UPM.showUPMDialog(); + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { + UpmFinder.showUPMDialog(); } else { WebViewDlgHelper.createPluginDialog(); } diff --git a/designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java new file mode 100644 index 000000000..4c7995243 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java @@ -0,0 +1,17 @@ +package com.fr.design.bridge.exec; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + * 用于标记一个方法是用于和JS做桥接的,避免被误删除 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.SOURCE) +public @interface JSBridge { +} diff --git a/designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java new file mode 100644 index 000000000..0a0451b54 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java @@ -0,0 +1,18 @@ +package com.fr.design.bridge.exec; + +/** + * Created by ibm on 2017/5/27. + */ +public class JSCallback { + + private JSExecutor executeScript; + + public JSCallback(JSExecutor jsExecutor) { + this.executeScript = jsExecutor; + } + + public void execute(String newValue) { + executeScript.executor(newValue); + } +} + diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSExecutor.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java similarity index 72% rename from designer-base/src/main/java/com/fr/design/extra/exe/callback/JSExecutor.java rename to designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java index 2adbadc87..9ded472eb 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSExecutor.java +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java @@ -1,4 +1,4 @@ -package com.fr.design.extra.exe.callback; +package com.fr.design.bridge.exec; /** * Created by ibm on 2017/6/21. diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSCallback.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSUtils.java similarity index 59% rename from designer-base/src/main/java/com/fr/design/extra/exe/callback/JSCallback.java rename to designer-base/src/main/java/com/fr/design/bridge/exec/JSUtils.java index d01446ee0..730a283e1 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSCallback.java +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSUtils.java @@ -1,46 +1,20 @@ -package com.fr.design.extra.exe.callback; +package com.fr.design.bridge.exec; +import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; -import javafx.application.Platform; -import javafx.scene.web.WebEngine; import netscape.javascript.JSObject; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * Created by ibm on 2017/5/27. + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 */ -public class JSCallback { - - private JSExecutor executeScript; - - public JSCallback(final WebEngine webEngine, final JSObject callback) { - init(webEngine, callback); - } - - public void init(final WebEngine webEngine, final JSObject callback){ - executeScript = new JSExecutor() { - @Override - public void executor(final String newValue) { - Platform.runLater(new Runnable() { - @Override - public void run() { - String fun = "(" + callback + ")(\"" + trimText(newValue) + "\")"; - try { - webEngine.executeScript(fun); - } catch (Exception e) { - webEngine.executeScript("alert(\"" + e.getMessage() + "\")"); - } - } - }); - } - }; - } - - public void execute(String newValue) { - executeScript.executor(newValue); - } +public class JSUtils { /** @@ -60,7 +34,7 @@ public class JSCallback { * @param old 原始字符串 * @return 处理之后的字符串 */ - private String trimText(String old) { + public static String trimText(String old) { if (StringUtils.isNotBlank(old)) { String b = filterHtmlTag(old); return b.replaceAll("\\\\n", StringUtils.EMPTY).replaceAll("\\\\t", StringUtils.EMPTY).replaceAll("\"", "\\\\\"").replaceAll("\'", "\\\\\'").replaceAll("\\\\\\\\", "\\\\\\\\\\\\"); @@ -73,7 +47,7 @@ public class JSCallback { * @param origin 原始字符串 * @return 处理之后的字符串 */ - private String filterHtmlTag(String origin) { + public static String filterHtmlTag(String origin) { String regHtml = "<[^>]+>"; Pattern patternHtml = Pattern.compile(regHtml, Pattern.CASE_INSENSITIVE); Matcher matchHtml = patternHtml.matcher(origin); @@ -81,5 +55,15 @@ public class JSCallback { return origin; } + public String[] jsObjectToStringArray(JSObject obj) { + if (obj == null) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + int len = (int) obj.getMember("length"); + List list = new ArrayList<>(); + for (int i = 0; i < len; i++) { + list.add(obj.getSlot(i).toString()); + } + return list.toArray(new String[len]); + } } - diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java b/designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java new file mode 100644 index 000000000..c3863a46d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java @@ -0,0 +1,42 @@ +package com.fr.design.extra; + +import com.fr.design.bridge.exec.JSExecutor; +import com.fr.design.bridge.exec.JSUtils; +import javafx.application.Platform; +import javafx.scene.web.WebEngine; +import netscape.javascript.JSObject; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class PluginJavaFxExecutor implements JSExecutor { + + public static PluginJavaFxExecutor create(WebEngine webEngine, JSObject callback) { + return new PluginJavaFxExecutor(webEngine, callback); + } + + private WebEngine webEngine; + private JSObject callback; + + private PluginJavaFxExecutor(WebEngine webEngine, JSObject callback) { + this.webEngine = webEngine; + this.callback = callback; + } + + @Override + public void executor(final String newValue) { + Platform.runLater(new Runnable() { + @Override + public void run() { + String fun = "(" + callback + ")(\"" + JSUtils.trimText(newValue) + "\")"; + try { + webEngine.executeScript(fun); + } catch (Exception e) { + webEngine.executeScript("alert(\"" + e.getMessage() + "\")"); + } + } + }); + } +} diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java index 99e02bdc1..774578630 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java @@ -3,7 +3,7 @@ package com.fr.design.extra; import com.fr.config.MarketConfig; import com.fr.design.extra.exe.callback.InstallFromDiskCallback; import com.fr.design.extra.exe.callback.InstallOnlineCallback; -import com.fr.design.extra.exe.callback.JSCallback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.exe.callback.ModifyStatusCallback; import com.fr.design.extra.exe.callback.UninstallPluginCallback; import com.fr.design.extra.exe.callback.UpdateFromDiskCallback; diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java index 02a51ad3f..492bbfd97 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java @@ -3,6 +3,7 @@ package com.fr.design.extra; import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; import com.fr.design.RestartHelper; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.GetInstalledPluginsExecutor; import com.fr.design.extra.exe.GetPluginCategoriesExecutor; @@ -11,12 +12,9 @@ import com.fr.design.extra.exe.GetPluginPrefixExecutor; import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor; -import com.fr.design.extra.exe.callback.JSCallback; import com.fr.design.gui.ilable.UILabel; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; - import com.fr.general.CloudCenter; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; @@ -172,7 +170,7 @@ public class PluginWebBridge { * @param callback 回调函数 */ public void installPluginOnline(final String pluginInfo, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); } @@ -183,7 +181,7 @@ public class PluginWebBridge { * @param filePath 插件包的路径 */ public void installPluginFromDisk(final String filePath, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); File file = new File(filePath); PluginOperateUtils.installPluginFromDisk(file, jsCallback); } @@ -194,7 +192,7 @@ public class PluginWebBridge { * @param pluginInfo 插件信息 */ public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); } @@ -204,7 +202,7 @@ public class PluginWebBridge { * @param pluginIDs 插件集合 */ public void updatePluginOnline(JSObject pluginIDs, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); String[] pluginInfos = jsObjectToStringArray(pluginIDs); List pluginMarkerList = new ArrayList(); for (int i = 0; i < pluginInfos.length; i++) { @@ -219,7 +217,7 @@ public class PluginWebBridge { * @param filePath 插件包的路径 */ public void updatePluginFromDisk(String filePath, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); File file = new File(filePath); PluginOperateUtils.updatePluginFromDisk(file, jsCallback); } @@ -230,7 +228,7 @@ public class PluginWebBridge { * @param pluginID 插件ID */ public void setPluginActive(String pluginID, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginOperateUtils.setPluginActive(pluginID, jsCallback); } @@ -427,7 +425,7 @@ public class PluginWebBridge { * @param callback */ public void registerLoginInfo(final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginOperateUtils.getLoginInfo(jsCallback, uiLabel); } @@ -559,7 +557,7 @@ public class PluginWebBridge { } public void getPackInfo(final JSObject callback){ - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); jsCallback.execute(StringUtils.EMPTY); } diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java index 1e170c844..e8096efbf 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java index 9b86641e6..23b6679b6 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java index 681180053..b7b817ef4 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginUtils; import com.fr.plugin.manage.control.PluginTaskCallback; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java index a6f781b94..db8a69188 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginUtils; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java index cd0ccab84..26315fd03 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java index c857960c7..28f4f6a31 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/ui/Assistant.java b/designer-base/src/main/java/com/fr/design/ui/Assistant.java index 601f0ac36..7a51c188c 100644 --- a/designer-base/src/main/java/com/fr/design/ui/Assistant.java +++ b/designer-base/src/main/java/com/fr/design/ui/Assistant.java @@ -49,5 +49,6 @@ public class Assistant { ProtocolService protocolService = browserContext.getProtocolService(); // 支持读取jar包中文件的自定义协议————emb:/com/fr/design/images/bbs.png protocolService.setProtocolHandler("emb", handler); + //protocolService.setProtocolHandler("file", handler); } } diff --git a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java index 6636e2874..94456df97 100644 --- a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java +++ b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java @@ -1,7 +1,11 @@ package com.fr.design.ui; +import com.fr.base.TemplateUtils; import com.fr.general.IOUtils; import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.codec.net.URLCodec; +import com.fr.third.org.apache.commons.io.FileUtils; +import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.web.struct.AssembleComponent; import com.fr.web.struct.AtomBuilder; import com.fr.web.struct.PathGroup; @@ -11,7 +15,12 @@ import com.teamdev.jxbrowser.chromium.ProtocolHandler; import com.teamdev.jxbrowser.chromium.URLRequest; import com.teamdev.jxbrowser.chromium.URLResponse; +import java.io.File; +import java.io.FileInputStream; import java.io.InputStream; +import java.io.StringReader; +import java.net.URI; +import java.util.Map; /** * @author richie @@ -21,6 +30,7 @@ import java.io.InputStream; public class EmbProtocolHandler implements ProtocolHandler { private AssembleComponent component; + private Map map; public EmbProtocolHandler() { @@ -30,17 +40,35 @@ public class EmbProtocolHandler implements ProtocolHandler { this.component = component; } + public EmbProtocolHandler(AssembleComponent component, Map map) { + this.component = component; + this.map = map; + } + + public EmbProtocolHandler(Map map) { + this.map = map; + } @Override public URLResponse onRequest(URLRequest req) { try { String path = req.getURL(); - if (path.startsWith("emb:dynamic")) { + if (path.startsWith("file:")) { + String url = new URLCodec().decode(path); + String filePath = TemplateUtils.renderParameter4Tpl(url, map); + File file = new File(URI.create(filePath).getPath()); + InputStream inputStream = new FileInputStream(file); + if (path.endsWith(".svg")) { + System.out.println(path); + } + return Assistant.inputStream2Response(inputStream, "file:///" + file.getAbsolutePath()); + } + else if (path.startsWith("emb:dynamic")) { URLResponse response = new URLResponse(); response.setData(htmlText().getBytes()); response.getHeaders().setHeader("Content-Type", "text/html"); return response; - } else { + } else { int index = path.indexOf("="); if (index > 0) { path = path.substring(index + 1); @@ -51,7 +79,7 @@ public class EmbProtocolHandler implements ProtocolHandler { return Assistant.inputStream2Response(inputStream, path); } } catch (Exception ignore) { - + ignore.printStackTrace(); } return null; } diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index 5f6c8c955..99a4fe97c 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -22,6 +22,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Map; /** * @author richie @@ -164,6 +165,16 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载url指向的资源 + * @param url 文件的地址 + */ + public Builder withURL(final String url, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(map)); + pane.browser.loadURL(url); + return this; + } + /** * 加载Atom组件 * @param component Atom组件 @@ -174,6 +185,17 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载Atom组件 + * @param component Atom组件 + */ + public Builder withComponent(AssembleComponent component, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(component, map)); + pane.browser.loadURL("emb:dynamic"); + return this; + } + + /** * 加载html文本内容 * @param html 要加载html文本内容 diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java index 4fa98ed32..8984e4191 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java @@ -1,7 +1,46 @@ package com.fr.design.upm; +import com.fr.base.passport.FinePassportManager; +import com.fr.config.MarketConfig; +import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; +import com.fr.design.bridge.exec.JSBridge; +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.extra.PluginOperateUtils; +import com.fr.design.extra.PluginUtils; +import com.fr.design.extra.exe.GetInstalledPluginsExecutor; +import com.fr.design.extra.exe.GetPluginCategoriesExecutor; +import com.fr.design.extra.exe.GetPluginFromStoreExecutor; +import com.fr.design.extra.exe.PluginLoginExecutor; +import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; +import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.i18n.Toolkit; +import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; +import com.fr.design.upm.exec.UpmBrowserExecutor; +import com.fr.design.upm.task.UpmTaskWorker; import com.fr.event.EventDispatcher; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralUtils; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginMarker; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.JSArray; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +import javax.swing.*; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.awt.*; +import java.io.File; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; +import java.util.concurrent.RunnableFuture; /** * @author richie @@ -9,23 +48,343 @@ import com.fr.event.EventDispatcher; * Created by richie on 2019-04-12 * 桥接Java和JavaScript的类 */ -public class UPMBridge { +public class UpmBridge { + + public static UpmBridge getBridge(Browser browser) { + return new UpmBridge(browser); + } - private static UPMBridge bridge = new UPMBridge(); + private JSObject window; - public static UPMBridge getBridge() { - return bridge; + private UpmBridge(Browser browser) { + this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } public void startDownload() { - // do something..... + try { + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } EventDispatcher.fire(DownloadEvent.FINISH, "start"); } + @JSBridge + public String i18nText(String key) { + return Toolkit.i18nText(key); + } - + @JSBridge public void closeWindow() { - UPM.closeWindow(); + UpmFinder.closeWindow(); + } + + + @JSBridge + public boolean isDesigner() { + return true; + } + + @JSBridge + public void getPackInfo(final JSFunction callback) { + callback.invoke(window, StringUtils.EMPTY); + } + + /** + * 在线获取插件分类 + * + * @param callback 回调函数 + */ + @JSBridge + public void getPluginCategories(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); + task.execute(); + } + + /** + * 根据条件获取在线插件 + * + * @param info 插件信息 + * @param callback 回调函数 + */ + @JSBridge + public void getPluginFromStoreNew(String info, final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); + task.execute(); } + /** + * 已安装插件检查更新 + */ + @JSBridge + public void readUpdateOnline(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); + task.execute(); + } + + /** + * 获取已经安装的插件的数组 + */ + @JSBridge + public void getInstalledPlugins(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); + task.execute(); + } + + /** + * 从插件服务器上更新选中的插件 + * + * @param pluginIDs 插件集合 + */ + @JSBridge + public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + List pluginMarkerList = new ArrayList<>(); + if (pluginIDs instanceof String) { + pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); + } else if (pluginIDs instanceof JSArray) { + JSArray pluginInfos = (JSArray) pluginIDs; + for (int i = 0, len = pluginInfos.length(); i < len; i++) { + String value = pluginInfos.get(i).asString().getValue(); + pluginMarkerList.add(PluginUtils.createPluginMarker(value)); + } + } + PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); + } + + /** + * 搜索在线插件 + * + * @param keyword 关键字 + */ + @JSBridge + public void searchPlugin(String keyword, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); + worker.execute(); + } + + /** + * 从磁盘上选择插件安装包进行安装 + * + * @param filePath 插件包的路径 + */ + @JSBridge + public void installPluginFromDisk(final String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.installPluginFromDisk(file, jsCallback); + } + + /** + * 卸载当前选中的插件 + * + * @param pluginInfo 插件信息 + */ + @JSBridge + public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); + } + + /** + * 从插件服务器上安装插件 + * + * @param pluginInfo 插件的ID + * @param callback 回调函数 + */ + @JSBridge + public void installPluginOnline(final String pluginInfo, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); + PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); + } + + /** + * 从磁盘上选择插件安装包进行插件升级 + * + * @param filePath 插件包的路径 + */ + public void updatePluginFromDisk(String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.updatePluginFromDisk(file, jsCallback); + } + + /** + * 修改选中的插件的活跃状态 + * + * @param pluginID 插件ID + */ + @JSBridge + public void setPluginActive(String pluginID, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.setPluginActive(pluginID, jsCallback); + } + + /** + * 选择文件对话框 + * + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooser() { + return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param filter 文件的后缀 + * @return 选择的文件的路径 + * 这里换用JFileChooser会卡死,不知道为什么 + */ + @JSBridge + public String showFileChooserWithFilter(final String des, final String filter) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + if (StringUtils.isNotEmpty(filter)) { + fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); + } + + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param args 文件的后缀 + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooserWithFilters(final String des, final Object args) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + List filterList = new ArrayList<>(); + if (args instanceof String) { + filterList.add(GeneralUtils.objectToString(args)); + } else if (args instanceof JSArray) { + JSArray array = (JSArray)args; + for (int i = 0, len = array.length(); i < len; i ++) { + filterList.add(array.get(i).getStringValue()); + } + } + String[] filters = filterList.toArray(new String[0]); + if (ArrayUtils.isNotEmpty(filters)) { + FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); + fileChooser.setFileFilter(filter); + } + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + ////////登录相关/////// + + /** + * 获取系统登录的用户名 + */ + @JSBridge + public String getLoginInfo(final JSFunction callback) { + registerLoginInfo(callback); + return MarketConfig.getInstance().getBbsUsername(); + } + + /** + * 系统登录注册 + * + * @param callback 回调函数 + */ + @JSBridge + public void registerLoginInfo(final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + String username = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isEmpty(username)) { + jsCallback.execute(StringUtils.EMPTY); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } else { + jsCallback.execute(username); + EventDispatcher.fire(CertificateEvent.LOGIN, username); + } + } + + + /** + * 设计器端的用户登录 + * + * @param username 用户名 + * @param password 密码 + * @param callback 回调函数 + */ + @JSBridge + public void defaultLogin(String username, String password, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); + worker.execute(); + } + + /** + * 清除用户信息 + */ + public void clearUserInfo() { + MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); + FinePassportManager.getInstance().logout(); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } + + /** + * 打开论坛消息界面 + */ + @JSBridge + public void getPriviteMessage() { + try { + String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); + Desktop.getDesktop().browse(new URI(loginUrl)); + } catch (Exception exp) { + FineLoggerFactory.getLogger().info(exp.getMessage()); + } + } + + /** + * 忘记密码 + */ + @JSBridge + public void forgetHref() { + try { + Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); + } catch (Exception e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + } + } } diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java b/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java index d5a2f4b79..a03fe1d8f 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java @@ -13,11 +13,11 @@ import java.awt.*; * @version 10.0 * Created by richie on 2019-04-12 */ -public class UPMDialog extends UIDialog { +public class UpmDialog extends UIDialog { private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); - public UPMDialog(Frame frame, BasicPane pane) { + public UpmDialog(Frame frame, BasicPane pane) { super(frame); setUndecorated(true); JPanel panel = (JPanel) getContentPane(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java index 6480d8ad7..ec0b542f4 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java @@ -1,6 +1,5 @@ package com.fr.design.upm; -import com.fr.base.FRContext; import com.fr.design.dialog.BasicPane; import com.fr.design.ui.ModernUIPane; import com.fr.design.upm.event.DownloadEvent; @@ -19,7 +18,7 @@ import java.awt.*; * Created by richie on 2019-04-12 * Update Plugin Manager容器 */ -public class UPMPane extends BasicPane { +public class UpmPane extends BasicPane { private ModernUIPane modernUIPane; @@ -28,11 +27,18 @@ public class UPMPane extends BasicPane { return "UPM"; } - public UPMPane() { + public UpmPane() { setLayout(new BorderLayout()); - if (false) { + if (UpmFinder.checkUPMResourcesExist()) { modernUIPane = new ModernUIPane.Builder<>() - .withURL(UPM.getMainResourcePath()) + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + } + }) + .withURL(UpmFinder.getMainResourcePath()) .build(); } else { modernUIPane = new ModernUIPane.Builder<>() @@ -41,13 +47,13 @@ public class UPMPane extends BasicPane { @Override public void onScriptContextCreated(ScriptContextEvent event) { JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginBridgeTest", UPMBridge.getBridge()); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); } }).build(); EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { @Override public void on(Event event, String param) { - modernUIPane.redirect(UPM.getMainResourcePath()); + modernUIPane.redirect(UpmFinder.getMainResourcePath()); } }); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java new file mode 100644 index 000000000..73e4d2f1a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -0,0 +1,378 @@ +package com.fr.design.upm; + +import com.fr.base.passport.FinePassportManager; +import com.fr.config.MarketConfig; +import com.fr.design.bridge.exec.JSBridge; +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.extra.PluginOperateUtils; +import com.fr.design.extra.PluginUtils; +import com.fr.design.extra.exe.GetInstalledPluginsExecutor; +import com.fr.design.extra.exe.GetPluginCategoriesExecutor; +import com.fr.design.extra.exe.GetPluginFromStoreExecutor; +import com.fr.design.extra.exe.PluginLoginExecutor; +import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; +import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.upm.event.CertificateEvent; +import com.fr.design.upm.event.DownloadEvent; +import com.fr.design.upm.exec.UpmBrowserExecutor; +import com.fr.design.upm.task.UpmTaskWorker; +import com.fr.event.EventDispatcher; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralUtils; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginMarker; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.JSArray; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +import javax.swing.*; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.awt.*; +import java.io.File; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; +import java.util.concurrent.RunnableFuture; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + * 桥接Java和JavaScript的类 + */ +public class UpmBridge { + + public static UpmBridge getBridge(Browser browser) { + return new UpmBridge(browser); + } + + private JSObject window; + + private UpmBridge(Browser browser) { + this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); + } + + public void startDownload() { + // do something..... + EventDispatcher.fire(DownloadEvent.FINISH, "start"); + } + + @JSBridge + public void closeWindow() { + UpmFinder.closeWindow(); + } + + + @JSBridge + public boolean isDesigner() { + return true; + } + + @JSBridge + public void getPackInfo(final JSFunction callback) { + callback.invoke(window, StringUtils.EMPTY); + } + + /** + * 在线获取插件分类 + * + * @param callback 回调函数 + */ + @JSBridge + public void getPluginCategories(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); + task.execute(); + } + + /** + * 根据条件获取在线插件 + * + * @param info 插件信息 + * @param callback 回调函数 + */ + @JSBridge + public void getPluginFromStoreNew(String info, final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); + task.execute(); + } + + /** + * 已安装插件检查更新 + */ + @JSBridge + public void readUpdateOnline(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); + task.execute(); + } + + /** + * 获取已经安装的插件的数组 + */ + @JSBridge + public void getInstalledPlugins(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); + task.execute(); + } + + /** + * 从插件服务器上更新选中的插件 + * + * @param pluginIDs 插件集合 + */ + @JSBridge + public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + List pluginMarkerList = new ArrayList<>(); + if (pluginIDs instanceof String) { + pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); + } else if (pluginIDs instanceof JSArray) { + JSArray pluginInfos = (JSArray) pluginIDs; + for (int i = 0, len = pluginInfos.length(); i < len; i++) { + String value = pluginInfos.get(i).asString().getValue(); + pluginMarkerList.add(PluginUtils.createPluginMarker(value)); + } + } + PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); + } + + /** + * 搜索在线插件 + * + * @param keyword 关键字 + */ + @JSBridge + public void searchPlugin(String keyword, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); + worker.execute(); + } + + /** + * 从磁盘上选择插件安装包进行安装 + * + * @param filePath 插件包的路径 + */ + @JSBridge + public void installPluginFromDisk(final String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.installPluginFromDisk(file, jsCallback); + } + + /** + * 卸载当前选中的插件 + * + * @param pluginInfo 插件信息 + */ + @JSBridge + public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); + } + + /** + * 从插件服务器上安装插件 + * + * @param pluginInfo 插件的ID + * @param callback 回调函数 + */ + @JSBridge + public void installPluginOnline(final String pluginInfo, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); + PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); + } + + /** + * 从磁盘上选择插件安装包进行插件升级 + * + * @param filePath 插件包的路径 + */ + public void updatePluginFromDisk(String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.updatePluginFromDisk(file, jsCallback); + } + + /** + * 修改选中的插件的活跃状态 + * + * @param pluginID 插件ID + */ + @JSBridge + public void setPluginActive(String pluginID, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.setPluginActive(pluginID, jsCallback); + } + + /** + * 选择文件对话框 + * + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooser() { + return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param filter 文件的后缀 + * @return 选择的文件的路径 + * 这里换用JFileChooser会卡死,不知道为什么 + */ + @JSBridge + public String showFileChooserWithFilter(final String des, final String filter) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + if (StringUtils.isNotEmpty(filter)) { + fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); + } + + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param args 文件的后缀 + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooserWithFilters(final String des, final Object args) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + List filterList = new ArrayList<>(); + if (args instanceof String) { + filterList.add(GeneralUtils.objectToString(args)); + } else if (args instanceof JSArray) { + JSArray array = (JSArray)args; + for (int i = 0, len = array.length(); i < len; i ++) { + filterList.add(array.get(i).getStringValue()); + } + } + String[] filters = filterList.toArray(new String[0]); + if (ArrayUtils.isNotEmpty(filters)) { + FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); + fileChooser.setFileFilter(filter); + } + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + ////////登录相关/////// + + /** + * 获取系统登录的用户名 + */ + @JSBridge + public String getLoginInfo(final JSFunction callback) { + registerLoginInfo(callback); + return MarketConfig.getInstance().getBbsUsername(); + } + + /** + * 系统登录注册 + * + * @param callback 回调函数 + */ + @JSBridge + public void registerLoginInfo(final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + String username = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isEmpty(username)) { + jsCallback.execute(StringUtils.EMPTY); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } else { + jsCallback.execute(username); + EventDispatcher.fire(CertificateEvent.LOGIN, username); + } + } + + + /** + * 设计器端的用户登录 + * + * @param username 用户名 + * @param password 密码 + * @param callback 回调函数 + */ + @JSBridge + public void defaultLogin(String username, String password, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); + worker.execute(); + } + + /** + * 清除用户信息 + */ + public void clearUserInfo() { + MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); + FinePassportManager.getInstance().logout(); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } + + /** + * 打开论坛消息界面 + */ + @JSBridge + public void getPriviteMessage() { + try { + String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); + Desktop.getDesktop().browse(new URI(loginUrl)); + } catch (Exception exp) { + FineLoggerFactory.getLogger().info(exp.getMessage()); + } + } + + /** + * 忘记密码 + */ + @JSBridge + public void forgetHref() { + try { + Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); + } catch (Exception e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java b/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java new file mode 100644 index 000000000..a03fe1d8f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java @@ -0,0 +1,34 @@ +package com.fr.design.upm; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StableUtils; + +import javax.swing.*; +import java.awt.*; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + */ +public class UpmDialog extends UIDialog { + + private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); + + public UpmDialog(Frame frame, BasicPane pane) { + super(frame); + setUndecorated(true); + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); + setSize(DEFAULT_SHOP); + GUICoreUtils.centerWindow(this); + setResizable(false); + } + + @Override + public void checkValid() throws Exception { + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UPM.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java similarity index 70% rename from designer-base/src/main/java/com/fr/design/upm/UPM.java rename to designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index b8b95fab6..84e0ad5b7 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPM.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -1,26 +1,38 @@ package com.fr.design.upm; import com.fr.base.FRContext; +import com.fr.base.TemplateUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.mainframe.DesignerContext; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.workspace.Workspace; import com.fr.workspace.WorkspaceEvent; import javax.swing.*; import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; /** * @author richie * @version 10.0 * Created by richie on 2019-04-12 */ -public class UPM { +public class UpmFinder { - private static final String MAIN_RESOURCE_PATH = "/upm/plugin.html"; + private static final String UPM_DIR = "/upm"; + private static final String MAIN_RESOURCE_PATH = UPM_DIR + "/plugin_design.html"; public static String installHome = FRContext.getCommonOperator().getWebRootPath(); @@ -45,10 +57,14 @@ public class UPM { return "file:///" + StableUtils.pathJoin(installHome, MAIN_RESOURCE_PATH); } + public static UIDialog getDialog() { + return dialog; + } + public static void showUPMDialog() { - UPMPane upmPane = new UPMPane(); + UpmPane upmPane = new UpmPane(); if (dialog == null) { - dialog = new UPMDialog(DesignerContext.getDesignerFrame(), upmPane); + dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); } dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java new file mode 100644 index 000000000..1021f6175 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java @@ -0,0 +1,72 @@ +package com.fr.design.upm; + +import com.fr.base.TemplateUtils; +import com.fr.design.dialog.BasicPane; +import com.fr.design.ui.ModernUIPane; +import com.fr.design.upm.event.DownloadEvent; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.JSValue; +import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; +import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; + +import java.awt.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + * Update Plugin Manager容器 + */ +public class UpmPane extends BasicPane { + + private ModernUIPane modernUIPane; + + @Override + protected String title4PopupWindow() { + return "UPM"; + } + + public UpmPane() { + setLayout(new BorderLayout()); + if (UpmFinder.checkUPMResourcesExist()) { + modernUIPane = new ModernUIPane.Builder<>() + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + } + }) + .withURL(UpmFinder.getMainResourcePath()) + .build(); + } else { + modernUIPane = new ModernUIPane.Builder<>() + .withComponent(WarnComponent.KEY) + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + } + }).build(); + EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + @Override + public void on(Event event, String param) { + modernUIPane.redirect(UpmFinder.getMainResourcePath()); + } + }); + } + add(modernUIPane, BorderLayout.CENTER); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmUtils.java b/designer-base/src/main/java/com/fr/design/upm/UpmUtils.java new file mode 100644 index 000000000..a74f0f616 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmUtils.java @@ -0,0 +1,21 @@ +package com.fr.design.upm; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class UpmUtils { + + public static String[] findMatchedExtension(String... extensions) { + List list = new ArrayList<>(); + for (String ext : extensions) { + String[] arr = ext.split("\\."); + list.add(arr[arr.length - 1]); + } + return list.toArray(new String[0]); + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java b/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java new file mode 100644 index 000000000..571076844 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java @@ -0,0 +1,12 @@ +package com.fr.design.upm.event; + +import com.fr.event.Event; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public enum CertificateEvent implements Event { + LOGIN,LOGOUT +} diff --git a/designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java b/designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java new file mode 100644 index 000000000..572f7b5f2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java @@ -0,0 +1,30 @@ +package com.fr.design.upm.exec; + +import com.fr.design.bridge.exec.JSExecutor; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class UpmBrowserExecutor implements JSExecutor { + + public static UpmBrowserExecutor create(JSObject window, JSFunction callback) { + return new UpmBrowserExecutor(window, callback); + } + + private JSObject window; + private JSFunction callback; + + private UpmBrowserExecutor(JSObject window, JSFunction callback) { + this.window = window; + this.callback = callback; + } + + @Override + public void executor(String newValue) { + callback.invoke(window, newValue); + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java new file mode 100644 index 000000000..5a26c312f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java @@ -0,0 +1,27 @@ +package com.fr.design.upm.loader; + +import com.fr.decision.webservice.bean.plugin.store.ProjectInfoBean; +import com.fr.decision.webservice.v10.plugin.helper.category.impl.BaseResourceLoader; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class UpmDesignResourceLoader extends BaseResourceLoader { + + @Override + public String getPluginPath() { + return "upm/plugin_design.html"; + } + + @Override + public void checkResourceExist(ProjectInfoBean projectInfoBean) throws Exception { + + } + + @Override + public String getDownloadPath() throws Exception { + return "http://fanruan-market.oss-cn-shanghai.aliyuncs.com/upm/upm-10.0.zip"; + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java b/designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java new file mode 100644 index 000000000..4de519837 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java @@ -0,0 +1,52 @@ +package com.fr.design.upm.task; + +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.bridge.exec.JSUtils; +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.stable.StringUtils; + +import javax.swing.*; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-17 + */ +public class UpmTaskWorker extends SwingWorker { + + private Executor executor; + private JSCallback callback; + + public UpmTaskWorker(final JSCallback callback, final Executor executor) { + this.executor = executor; + this.callback = callback; + } + + @Override + protected V doInBackground() throws Exception { + Command[] commands = executor.getCommands(); + for (Command command : commands) { + String message = command.getExecuteMessage(); + if (StringUtils.isNotBlank(message)) { + publish(message); + } + command.run(new Process() { + @Override + public void process(String s) { + if (StringUtils.isNotBlank(s)) { + publish(JSUtils.trimText(s)); + } + } + }); + } + return null; + } + + @Override + protected void done() { + String result = executor.getTaskFinishMessage(); + callback.execute(result); + } +} diff --git a/designer-base/src/main/resources/com/fr/design/upm/warn.js b/designer-base/src/main/resources/com/fr/design/upm/warn.js index f09b9b9ad..7b9d5d84a 100644 --- a/designer-base/src/main/resources/com/fr/design/upm/warn.js +++ b/designer-base/src/main/resources/com/fr/design/upm/warn.js @@ -1,11 +1,11 @@ window.onload = function () { let button = BI.createWidget({ type : "bi.button", - text : "点击我跳转到插件商店", + text : PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Resource_Warn"), level: 'common', height: 30, handler : function () { - PluginBridgeTest.startDownload(); + PluginHelper.startDownload(); } }); BI.createWidget({ diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java index 6f329c39d..7fe8b8ff8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -16,8 +16,12 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.upm.event.CertificateEvent; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; @@ -208,6 +212,18 @@ public class UserInfoLabel extends UILabel { updateInfoPane(); } }); + EventDispatcher.listen(CertificateEvent.LOGIN, new Listener() { + @Override + public void on(Event event, String text) { + setText(text); + } + }); + EventDispatcher.listen(CertificateEvent.LOGOUT, new Listener() { + @Override + public void on(Event event, String text) { + setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); + } + }); } private void clearLoginInformation() { From f3973fc6fe09ef060b73f933ff111785acf36fa8 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 18 Apr 2019 22:15:12 +0800 Subject: [PATCH 052/196] =?UTF-8?q?KERNEL-442=20=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E9=87=8D=E6=9E=84=E8=BF=87?= =?UTF-8?q?=E7=9A=84=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E5=99=A8=E5=BC=80?= =?UTF-8?q?=E5=85=B3=EF=BC=88=E5=9F=BA=E4=BA=8EFineUI=E5=92=8CTypeScript?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/upm/UpmBridge.java | 14 +++++++++++++- .../src/main/java/com/fr/design/upm/UpmPane.java | 9 --------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index 73e4d2f1a..8984e4191 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -2,6 +2,7 @@ package com.fr.design.upm; import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; +import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; import com.fr.design.bridge.exec.JSBridge; import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; @@ -12,6 +13,7 @@ import com.fr.design.extra.exe.GetPluginFromStoreExecutor; import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.i18n.Toolkit; import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; @@ -59,10 +61,20 @@ public class UpmBridge { } public void startDownload() { - // do something..... + try { + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } EventDispatcher.fire(DownloadEvent.FINISH, "start"); } + @JSBridge + public String i18nText(String key) { + return Toolkit.i18nText(key); + } + @JSBridge public void closeWindow() { UpmFinder.closeWindow(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java index 1021f6175..ec0b542f4 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java @@ -1,25 +1,16 @@ package com.fr.design.upm; -import com.fr.base.TemplateUtils; import com.fr.design.dialog.BasicPane; import com.fr.design.ui.ModernUIPane; import com.fr.design.upm.event.DownloadEvent; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; -import com.fr.general.GeneralContext; -import com.fr.general.IOUtils; -import com.fr.stable.StringUtils; import com.teamdev.jxbrowser.chromium.JSValue; import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; import java.awt.*; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; /** * @author richie From 2f5f49dc0debd786859f37d997e7d2e132118515 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 18 Apr 2019 22:40:05 +0800 Subject: [PATCH 053/196] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=86=99=E6=AD=BB?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/loader/UpmDesignResourceLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java index 5a26c312f..93857dc8b 100644 --- a/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java +++ b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java @@ -22,6 +22,6 @@ public class UpmDesignResourceLoader extends BaseResourceLoader { @Override public String getDownloadPath() throws Exception { - return "http://fanruan-market.oss-cn-shanghai.aliyuncs.com/upm/upm-10.0.zip"; + return "http://fanruan-market.oss-cn-shanghai.aliyuncs.com/upm/1.0/upm-10.0.zip"; } } From f11a5605c66567f462848b09ec0ddcc185bb20ce Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 11:19:01 +0800 Subject: [PATCH 054/196] =?UTF-8?q?KERNEL-442=20=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6=E6=97=B6=E7=9A=84=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/UpmBridge.java | 33 +++++++--- .../main/java/com/fr/design/upm/UpmPane.java | 2 +- .../fr/design/upm/event/DownloadEvent.java | 2 +- .../main/resources/com/fr/design/upm/warn.js | 63 +++++++++++++++---- 4 files changed, 79 insertions(+), 21 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index 8984e4191..bc2fe0b03 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -18,6 +18,7 @@ import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; import com.fr.design.upm.task.UpmTaskWorker; +import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.general.CloudCenter; import com.fr.general.GeneralUtils; @@ -60,14 +61,30 @@ public class UpmBridge { this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } - public void startDownload() { - try { - UpmResourceLoader.INSTANCE.download(); - UpmResourceLoader.INSTANCE.install(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - EventDispatcher.fire(DownloadEvent.FINISH, "start"); + public void startDownload(final JSFunction callback) { + + new SwingWorker(){ + @Override + protected Void doInBackground() throws Exception { + callback.invoke(window, Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download_Start")); + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + return null; + } + + @Override + protected void done() { + try { + get(); + callback.invoke(window, Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download_Success")); + EventDispatcher.fire(DownloadEvent.SUCCESS, "success"); + } catch (Exception e) { + callback.invoke(window, Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download_Error")); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + EventDispatcher.fire(DownloadEvent.ERROR, "error"); + } + } + }.execute(); } @JSBridge diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java index ec0b542f4..3e4ccc581 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java @@ -50,7 +50,7 @@ public class UpmPane extends BasicPane { window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); } }).build(); - EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { @Override public void on(Event event, String param) { modernUIPane.redirect(UpmFinder.getMainResourcePath()); diff --git a/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java b/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java index 7ac53dd17..e07156b83 100644 --- a/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java +++ b/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java @@ -9,5 +9,5 @@ import com.fr.event.Event; */ public enum DownloadEvent implements Event { - FINISH + SUCCESS, ERROR } diff --git a/designer-base/src/main/resources/com/fr/design/upm/warn.js b/designer-base/src/main/resources/com/fr/design/upm/warn.js index 7b9d5d84a..1eb5fb640 100644 --- a/designer-base/src/main/resources/com/fr/design/upm/warn.js +++ b/designer-base/src/main/resources/com/fr/design/upm/warn.js @@ -1,20 +1,61 @@ window.onload = function () { - let button = BI.createWidget({ - type : "bi.button", - text : PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Resource_Warn"), + let label = BI.createWidget({ + type: "bi.label", + text: PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Resource_Warn"), + height: 30 + }); + let callback = function(text) { + download.setValue(text); + }; + let buttonOK = BI.createWidget({ + type: "bi.button", + text: PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download"), level: 'common', height: 30, - handler : function () { - PluginHelper.startDownload(); + handler: function () { + PluginHelper.startDownload(callback); } }); + let buttonClose = BI.createWidget({ + type: "bi.button", + text: PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Close"), + level: 'warning', + height: 30, + handler: function () { + PluginHelper.closeWindow(); + } + }); + + let download = BI.createWidget({ + type: "bi.label", + height: 30 + }); + let left = 300; + let top = 200; BI.createWidget({ - type:"bi.absolute", + type: "bi.absolute", element: "body", - items: [{ - el: button, - left: 100, - top: 100 - }] + items: [ + { + el: label, + left: left, + top: top + }, + { + el : buttonOK, + left : left, + top : top + 40 + }, + { + el : buttonClose, + left : left + 100, + top : top + 40 + }, + { + el : download, + left : left, + top : top + 80 + } + ] }); }; \ No newline at end of file From e16c65f0398f5c04e930632d06c2d485e5e21734 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 13:43:44 +0800 Subject: [PATCH 055/196] =?UTF-8?q?KERNEL-442=20=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E8=A2=AB?= =?UTF-8?q?=E8=BF=AB=E6=94=B9=E4=B8=AA=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/UPMBridge.java | 390 ------------------ .../java/com/fr/design/upm/UpmFinder.java | 13 +- .../upm/{UpmBridge.java => UpmJSBridge.java} | 9 +- .../upm/{UpmPane.java => UpmModernPane.java} | 8 +- 4 files changed, 9 insertions(+), 411 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/upm/UPMBridge.java rename designer-base/src/main/java/com/fr/design/upm/{UpmBridge.java => UpmJSBridge.java} (98%) rename designer-base/src/main/java/com/fr/design/upm/{UpmPane.java => UpmModernPane.java} (92%) diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java deleted file mode 100644 index 8984e4191..000000000 --- a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java +++ /dev/null @@ -1,390 +0,0 @@ -package com.fr.design.upm; - -import com.fr.base.passport.FinePassportManager; -import com.fr.config.MarketConfig; -import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; -import com.fr.design.bridge.exec.JSBridge; -import com.fr.design.bridge.exec.JSCallback; -import com.fr.design.extra.PluginOperateUtils; -import com.fr.design.extra.PluginUtils; -import com.fr.design.extra.exe.GetInstalledPluginsExecutor; -import com.fr.design.extra.exe.GetPluginCategoriesExecutor; -import com.fr.design.extra.exe.GetPluginFromStoreExecutor; -import com.fr.design.extra.exe.PluginLoginExecutor; -import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; -import com.fr.design.extra.exe.SearchOnlineExecutor; -import com.fr.design.i18n.Toolkit; -import com.fr.design.upm.event.CertificateEvent; -import com.fr.design.upm.event.DownloadEvent; -import com.fr.design.upm.exec.UpmBrowserExecutor; -import com.fr.design.upm.task.UpmTaskWorker; -import com.fr.event.EventDispatcher; -import com.fr.general.CloudCenter; -import com.fr.general.GeneralUtils; -import com.fr.json.JSONObject; -import com.fr.log.FineLoggerFactory; -import com.fr.plugin.context.PluginMarker; -import com.fr.stable.ArrayUtils; -import com.fr.stable.StringUtils; -import com.teamdev.jxbrowser.chromium.Browser; -import com.teamdev.jxbrowser.chromium.JSArray; -import com.teamdev.jxbrowser.chromium.JSFunction; -import com.teamdev.jxbrowser.chromium.JSObject; - -import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import java.awt.*; -import java.io.File; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.FutureTask; -import java.util.concurrent.RunnableFuture; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2019-04-12 - * 桥接Java和JavaScript的类 - */ -public class UpmBridge { - - public static UpmBridge getBridge(Browser browser) { - return new UpmBridge(browser); - } - - private JSObject window; - - private UpmBridge(Browser browser) { - this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); - } - - public void startDownload() { - try { - UpmResourceLoader.INSTANCE.download(); - UpmResourceLoader.INSTANCE.install(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - EventDispatcher.fire(DownloadEvent.FINISH, "start"); - } - - @JSBridge - public String i18nText(String key) { - return Toolkit.i18nText(key); - } - - @JSBridge - public void closeWindow() { - UpmFinder.closeWindow(); - } - - - @JSBridge - public boolean isDesigner() { - return true; - } - - @JSBridge - public void getPackInfo(final JSFunction callback) { - callback.invoke(window, StringUtils.EMPTY); - } - - /** - * 在线获取插件分类 - * - * @param callback 回调函数 - */ - @JSBridge - public void getPluginCategories(final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); - task.execute(); - } - - /** - * 根据条件获取在线插件 - * - * @param info 插件信息 - * @param callback 回调函数 - */ - @JSBridge - public void getPluginFromStoreNew(String info, final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); - task.execute(); - } - - /** - * 已安装插件检查更新 - */ - @JSBridge - public void readUpdateOnline(final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); - task.execute(); - } - - /** - * 获取已经安装的插件的数组 - */ - @JSBridge - public void getInstalledPlugins(final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); - task.execute(); - } - - /** - * 从插件服务器上更新选中的插件 - * - * @param pluginIDs 插件集合 - */ - @JSBridge - public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - List pluginMarkerList = new ArrayList<>(); - if (pluginIDs instanceof String) { - pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); - } else if (pluginIDs instanceof JSArray) { - JSArray pluginInfos = (JSArray) pluginIDs; - for (int i = 0, len = pluginInfos.length(); i < len; i++) { - String value = pluginInfos.get(i).asString().getValue(); - pluginMarkerList.add(PluginUtils.createPluginMarker(value)); - } - } - PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); - } - - /** - * 搜索在线插件 - * - * @param keyword 关键字 - */ - @JSBridge - public void searchPlugin(String keyword, final JSFunction callback) { - UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); - worker.execute(); - } - - /** - * 从磁盘上选择插件安装包进行安装 - * - * @param filePath 插件包的路径 - */ - @JSBridge - public void installPluginFromDisk(final String filePath, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - File file = new File(filePath); - PluginOperateUtils.installPluginFromDisk(file, jsCallback); - } - - /** - * 卸载当前选中的插件 - * - * @param pluginInfo 插件信息 - */ - @JSBridge - public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); - } - - /** - * 从插件服务器上安装插件 - * - * @param pluginInfo 插件的ID - * @param callback 回调函数 - */ - @JSBridge - public void installPluginOnline(final String pluginInfo, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); - PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); - } - - /** - * 从磁盘上选择插件安装包进行插件升级 - * - * @param filePath 插件包的路径 - */ - public void updatePluginFromDisk(String filePath, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - File file = new File(filePath); - PluginOperateUtils.updatePluginFromDisk(file, jsCallback); - } - - /** - * 修改选中的插件的活跃状态 - * - * @param pluginID 插件ID - */ - @JSBridge - public void setPluginActive(String pluginID, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - PluginOperateUtils.setPluginActive(pluginID, jsCallback); - } - - /** - * 选择文件对话框 - * - * @return 选择的文件的路径 - */ - @JSBridge - public String showFileChooser() { - return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); - } - - /** - * 选择文件对话框 - * - * @param des 过滤文件描述 - * @param filter 文件的后缀 - * @return 选择的文件的路径 - * 这里换用JFileChooser会卡死,不知道为什么 - */ - @JSBridge - public String showFileChooserWithFilter(final String des, final String filter) { - RunnableFuture future = new FutureTask<>(new Callable() { - @Override - public String call() { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - - if (StringUtils.isNotEmpty(filter)) { - fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); - } - - int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); - if (result == JFileChooser.APPROVE_OPTION) { - return fileChooser.getSelectedFile().getAbsolutePath(); - } - return null; - } - }); - SwingUtilities.invokeLater(future); - try { - return future.get(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - return null; - } - - /** - * 选择文件对话框 - * - * @param des 过滤文件描述 - * @param args 文件的后缀 - * @return 选择的文件的路径 - */ - @JSBridge - public String showFileChooserWithFilters(final String des, final Object args) { - RunnableFuture future = new FutureTask<>(new Callable() { - @Override - public String call() { - JFileChooser fileChooser = new JFileChooser(); - List filterList = new ArrayList<>(); - if (args instanceof String) { - filterList.add(GeneralUtils.objectToString(args)); - } else if (args instanceof JSArray) { - JSArray array = (JSArray)args; - for (int i = 0, len = array.length(); i < len; i ++) { - filterList.add(array.get(i).getStringValue()); - } - } - String[] filters = filterList.toArray(new String[0]); - if (ArrayUtils.isNotEmpty(filters)) { - FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); - fileChooser.setFileFilter(filter); - } - int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); - if (result == JFileChooser.APPROVE_OPTION) { - return fileChooser.getSelectedFile().getAbsolutePath(); - } - return null; - } - }); - SwingUtilities.invokeLater(future); - try { - return future.get(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - return null; - } - - ////////登录相关/////// - - /** - * 获取系统登录的用户名 - */ - @JSBridge - public String getLoginInfo(final JSFunction callback) { - registerLoginInfo(callback); - return MarketConfig.getInstance().getBbsUsername(); - } - - /** - * 系统登录注册 - * - * @param callback 回调函数 - */ - @JSBridge - public void registerLoginInfo(final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - String username = MarketConfig.getInstance().getBbsUsername(); - if (StringUtils.isEmpty(username)) { - jsCallback.execute(StringUtils.EMPTY); - EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); - } else { - jsCallback.execute(username); - EventDispatcher.fire(CertificateEvent.LOGIN, username); - } - } - - - /** - * 设计器端的用户登录 - * - * @param username 用户名 - * @param password 密码 - * @param callback 回调函数 - */ - @JSBridge - public void defaultLogin(String username, String password, final JSFunction callback) { - UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); - worker.execute(); - } - - /** - * 清除用户信息 - */ - public void clearUserInfo() { - MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); - FinePassportManager.getInstance().logout(); - EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); - } - - /** - * 打开论坛消息界面 - */ - @JSBridge - public void getPriviteMessage() { - try { - String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); - Desktop.getDesktop().browse(new URI(loginUrl)); - } catch (Exception exp) { - FineLoggerFactory.getLogger().info(exp.getMessage()); - } - } - - /** - * 忘记密码 - */ - @JSBridge - public void forgetHref() { - try { - Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); - } catch (Exception e) { - FineLoggerFactory.getLogger().info(e.getMessage()); - } - } -} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index 84e0ad5b7..a74923577 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -1,28 +1,17 @@ package com.fr.design.upm; import com.fr.base.FRContext; -import com.fr.base.TemplateUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.mainframe.DesignerContext; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; -import com.fr.general.GeneralContext; -import com.fr.general.IOUtils; -import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; import com.fr.workspace.Workspace; import com.fr.workspace.WorkspaceEvent; import javax.swing.*; import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; /** * @author richie @@ -62,7 +51,7 @@ public class UpmFinder { } public static void showUPMDialog() { - UpmPane upmPane = new UpmPane(); + UpmModernPane upmPane = new UpmModernPane(); if (dialog == null) { dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/upm/UpmBridge.java rename to designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java index bc2fe0b03..af3fa4858 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java @@ -18,7 +18,6 @@ import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; import com.fr.design.upm.task.UpmTaskWorker; -import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.general.CloudCenter; import com.fr.general.GeneralUtils; @@ -49,15 +48,15 @@ import java.util.concurrent.RunnableFuture; * Created by richie on 2019-04-12 * 桥接Java和JavaScript的类 */ -public class UpmBridge { +public class UpmJSBridge { - public static UpmBridge getBridge(Browser browser) { - return new UpmBridge(browser); + public static UpmJSBridge getBridge(Browser browser) { + return new UpmJSBridge(browser); } private JSObject window; - private UpmBridge(Browser browser) { + private UpmJSBridge(Browser browser) { this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java similarity index 92% rename from designer-base/src/main/java/com/fr/design/upm/UpmPane.java rename to designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java index 3e4ccc581..86bee5476 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java @@ -18,7 +18,7 @@ import java.awt.*; * Created by richie on 2019-04-12 * Update Plugin Manager容器 */ -public class UpmPane extends BasicPane { +public class UpmModernPane extends BasicPane { private ModernUIPane modernUIPane; @@ -27,7 +27,7 @@ public class UpmPane extends BasicPane { return "UPM"; } - public UpmPane() { + public UpmModernPane() { setLayout(new BorderLayout()); if (UpmFinder.checkUPMResourcesExist()) { modernUIPane = new ModernUIPane.Builder<>() @@ -35,7 +35,7 @@ public class UpmPane extends BasicPane { @Override public void onScriptContextCreated(ScriptContextEvent event) { JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); } }) .withURL(UpmFinder.getMainResourcePath()) @@ -47,7 +47,7 @@ public class UpmPane extends BasicPane { @Override public void onScriptContextCreated(ScriptContextEvent event) { JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); } }).build(); EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { From d2345cd070b9c72d6fbc57c85c23b720efe13660 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 13:45:07 +0800 Subject: [PATCH 056/196] =?UTF-8?q?KERNEL-442=20=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E8=A2=AB?= =?UTF-8?q?=E8=BF=AB=E6=94=B9=E4=B8=AA=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/upm/UPMPane.java | 2 +- .../upm/{UpmJSBridge.java => UpmBridge.java} | 8 +-- .../java/com/fr/design/upm/UpmFinder.java | 2 +- .../java/com/fr/design/upm/UpmModernPane.java | 63 ------------------- 4 files changed, 6 insertions(+), 69 deletions(-) rename designer-base/src/main/java/com/fr/design/upm/{UpmJSBridge.java => UpmBridge.java} (98%) delete mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java index ec0b542f4..3e4ccc581 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java @@ -50,7 +50,7 @@ public class UpmPane extends BasicPane { window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); } }).build(); - EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { @Override public void on(Event event, String param) { modernUIPane.redirect(UpmFinder.getMainResourcePath()); diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java rename to designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index af3fa4858..3d0f28613 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -48,15 +48,15 @@ import java.util.concurrent.RunnableFuture; * Created by richie on 2019-04-12 * 桥接Java和JavaScript的类 */ -public class UpmJSBridge { +public class UpmBridge { - public static UpmJSBridge getBridge(Browser browser) { - return new UpmJSBridge(browser); + public static UpmBridge getBridge(Browser browser) { + return new UpmBridge(browser); } private JSObject window; - private UpmJSBridge(Browser browser) { + private UpmBridge(Browser browser) { this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index a74923577..3e012f545 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -51,7 +51,7 @@ public class UpmFinder { } public static void showUPMDialog() { - UpmModernPane upmPane = new UpmModernPane(); + UpmPane upmPane = new UpmPane(); if (dialog == null) { dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java deleted file mode 100644 index 86bee5476..000000000 --- a/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.fr.design.upm; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.ui.ModernUIPane; -import com.fr.design.upm.event.DownloadEvent; -import com.fr.event.Event; -import com.fr.event.EventDispatcher; -import com.fr.event.Listener; -import com.teamdev.jxbrowser.chromium.JSValue; -import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; -import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; - -import java.awt.*; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2019-04-12 - * Update Plugin Manager容器 - */ -public class UpmModernPane extends BasicPane { - - private ModernUIPane modernUIPane; - - @Override - protected String title4PopupWindow() { - return "UPM"; - } - - public UpmModernPane() { - setLayout(new BorderLayout()); - if (UpmFinder.checkUPMResourcesExist()) { - modernUIPane = new ModernUIPane.Builder<>() - .prepare(new ScriptContextAdapter() { - @Override - public void onScriptContextCreated(ScriptContextEvent event) { - JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); - } - }) - .withURL(UpmFinder.getMainResourcePath()) - .build(); - } else { - modernUIPane = new ModernUIPane.Builder<>() - .withComponent(WarnComponent.KEY) - .prepare(new ScriptContextAdapter() { - @Override - public void onScriptContextCreated(ScriptContextEvent event) { - JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); - } - }).build(); - EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { - @Override - public void on(Event event, String param) { - modernUIPane.redirect(UpmFinder.getMainResourcePath()); - } - }); - } - add(modernUIPane, BorderLayout.CENTER); - } - -} From 80c2fdb8e5671e02b8520fd272518dc9a6d4edf6 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 13:47:27 +0800 Subject: [PATCH 057/196] =?UTF-8?q?KERNEL-442=20=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E8=A2=AB?= =?UTF-8?q?=E8=BF=AB=E6=94=B9=E4=B8=AA=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/UpmDialog.java | 34 ------------------- .../java/com/fr/design/upm/UpmFinder.java | 4 +-- .../{UPMDialog.java => UpmShowDialog.java} | 4 +-- .../upm/{UPMPane.java => UpmShowPane.java} | 4 +-- 4 files changed, 6 insertions(+), 40 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmDialog.java rename designer-base/src/main/java/com/fr/design/upm/{UPMDialog.java => UpmShowDialog.java} (87%) rename designer-base/src/main/java/com/fr/design/upm/{UPMPane.java => UpmShowPane.java} (96%) diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java b/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java deleted file mode 100644 index a03fe1d8f..000000000 --- a/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.fr.design.upm; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.UIDialog; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2019-04-12 - */ -public class UpmDialog extends UIDialog { - - private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); - - public UpmDialog(Frame frame, BasicPane pane) { - super(frame); - setUndecorated(true); - JPanel panel = (JPanel) getContentPane(); - panel.setLayout(new BorderLayout()); - add(pane, BorderLayout.CENTER); - setSize(DEFAULT_SHOP); - GUICoreUtils.centerWindow(this); - setResizable(false); - } - - @Override - public void checkValid() throws Exception { - } -} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index 3e012f545..5b90d4330 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -51,9 +51,9 @@ public class UpmFinder { } public static void showUPMDialog() { - UpmPane upmPane = new UpmPane(); + UpmShowPane upmPane = new UpmShowPane(); if (dialog == null) { - dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); + dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane); } dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java b/designer-base/src/main/java/com/fr/design/upm/UpmShowDialog.java similarity index 87% rename from designer-base/src/main/java/com/fr/design/upm/UPMDialog.java rename to designer-base/src/main/java/com/fr/design/upm/UpmShowDialog.java index a03fe1d8f..704e01121 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmShowDialog.java @@ -13,11 +13,11 @@ import java.awt.*; * @version 10.0 * Created by richie on 2019-04-12 */ -public class UpmDialog extends UIDialog { +public class UpmShowDialog extends UIDialog { private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); - public UpmDialog(Frame frame, BasicPane pane) { + public UpmShowDialog(Frame frame, BasicPane pane) { super(frame); setUndecorated(true); JPanel panel = (JPanel) getContentPane(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/upm/UPMPane.java rename to designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java index 3e4ccc581..e64e5f02e 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java @@ -18,7 +18,7 @@ import java.awt.*; * Created by richie on 2019-04-12 * Update Plugin Manager容器 */ -public class UpmPane extends BasicPane { +public class UpmShowPane extends BasicPane { private ModernUIPane modernUIPane; @@ -27,7 +27,7 @@ public class UpmPane extends BasicPane { return "UPM"; } - public UpmPane() { + public UpmShowPane() { setLayout(new BorderLayout()); if (UpmFinder.checkUPMResourcesExist()) { modernUIPane = new ModernUIPane.Builder<>() From 7fdb747e80fec43b3b75105f25dae18cb22cbd50 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 19 Apr 2019 15:21:23 +0800 Subject: [PATCH 058/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E5=8F=A6=E5=AD=98?= =?UTF-8?q?=E4=B8=BA=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 15 ++- .../mainframe/template/info/TemplateInfo.java | 50 ++++--- .../template/info/TemplateInfoCollector.java | 24 +++- .../info/TemplateInfoCollectorTest.java | 119 ++++++++++++++++- .../template/info/TemplateInfoTest.java | 125 ++++++++++++++++++ .../template/info/TemplateInfoTestHelper.java | 49 +++++++ 6 files changed, 356 insertions(+), 26 deletions(-) create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index f4aa5bc9b..9708dcb65 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -145,13 +145,17 @@ public abstract class JTemplate> } private void collectInfo() { // 执行收集操作 + collectInfo(StringUtils.EMPTY); + } + + private void collectInfo(String originID) { // 执行收集操作 if (openTime == 0) { // 旧模板,不收集数据 return; } long saveTime = System.currentTimeMillis(); // 保存模板的时间点 try { long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) - TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), getProcessInfo(), timeConsume); + TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), originID, getProcessInfo(), (int)timeConsume); } catch (Throwable th) { // 不管收集过程中出现任何异常,都不应该影响模版保存 } openTime = saveTime; // 更新 openTime,准备下一次计算 @@ -605,15 +609,20 @@ public abstract class JTemplate> } } + // 保存新模板时会进入此方法(新建模板直接保存,或者另存为) protected boolean saveNewFile(FILE editingFILE, String oldName) { + String originID = StringUtils.EMPTY; + if (StringUtils.isNotEmpty(this.template.getTemplateID())) { + originID = this.template.getTemplateID(); + } // 在保存之前,初始化 templateID - initForCollect(); // 如果保存新模板(新建模板直接保存,或者另存为),则添加 templateID + initForCollect(); this.editingFILE = editingFILE; boolean result = this.saveFile(); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); - collectInfo(); + collectInfo(originID); } //更换最近打开 DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getPath()); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index 7f2e1e766..af644a1e8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -14,6 +14,7 @@ import com.fr.stable.xml.XMLableReader; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; +import java.util.Map; /** * 对应一张模版的记录 @@ -26,6 +27,7 @@ class TemplateInfo implements XMLReadable, XMLWriter { private static final String XML_CONSUMING_MAP = "consumingMap"; private static final String ATTR_DAY_COUNT = "day_count"; private static final String ATTR_TEMPLATE_ID = "templateID"; + private static final String ATTR_ORIGIN_ID = "originID"; private static final String ATTR_PROCESS = "process"; private static final String ATTR_FLOAT_COUNT = "float_count"; private static final String ATTR_WIDGET_COUNT = "widget_count"; @@ -37,6 +39,7 @@ class TemplateInfo implements XMLReadable, XMLWriter { private static final String ATTR_CREATE_TIME = "create_time"; private static final String ATTR_UUID = "uuid"; private static final String ATTR_TIME_CONSUME = "time_consume"; + private static final String ATTR_ORIGIN_TIME = "originTime"; private static final String ATTR_VERSION = "version"; private static final String ATTR_USERNAME = "username"; @@ -45,14 +48,20 @@ class TemplateInfo implements XMLReadable, XMLWriter { private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 private int idleDayCount; // 到现在为止,模版闲置(上次保存后没有再编辑过)的天数 - private String templateID; + private String templateID = StringUtils.EMPTY; + private String originID = StringUtils.EMPTY; // todo: processMap 和 consumingMap 还可以再拆解为小类,以后继续重构 - private HashMap processMap = new HashMap<>(); - private HashMap consumingMap = new HashMap<>(); + private Map processMap = new HashMap<>(); + private Map consumingMap = new HashMap<>(); private TemplateInfo() { } + private TemplateInfo(String templateID, String originID) { + this.templateID = templateID; + this.originID = originID; + } + static TemplateInfo newInstanceByRead(XMLableReader reader) { TemplateInfo templateInfo = new TemplateInfo(); reader.readXMLObject(templateInfo); @@ -60,6 +69,10 @@ class TemplateInfo implements XMLReadable, XMLWriter { } static TemplateInfo newInstance(String templateID) { + return newInstance(templateID, StringUtils.EMPTY, 0); + } + + static TemplateInfo newInstance(String templateID, String originID, int originTime) { HashMap consumingMap = new HashMap<>(); String username = MarketConfig.getInstance().getBbsUsername(); @@ -72,12 +85,14 @@ class TemplateInfo implements XMLReadable, XMLWriter { consumingMap.put(ATTR_UUID, uuid); consumingMap.put(ATTR_ACTIVITYKEY, activitykey); consumingMap.put(ATTR_TEMPLATE_ID, templateID); + consumingMap.put(ATTR_ORIGIN_ID, originID); consumingMap.put(ATTR_CREATE_TIME, createTime); - consumingMap.put(ATTR_TIME_CONSUME, 0); + consumingMap.put(ATTR_TIME_CONSUME, originTime); // timeConsume 在原来模版的基础上累加 + consumingMap.put(ATTR_ORIGIN_TIME, originTime); consumingMap.put(ATTR_JAR_TIME, jarTime); consumingMap.put(ATTR_VERSION, version); - TemplateInfo templateInfo = new TemplateInfo(); + TemplateInfo templateInfo = new TemplateInfo(templateID, originID); templateInfo.consumingMap = consumingMap; return templateInfo; @@ -87,12 +102,8 @@ class TemplateInfo implements XMLReadable, XMLWriter { return templateID; } - HashMap getTemplateInfo() { - HashMap templateInfo = new HashMap<>(); - templateInfo.put(XML_PROCESS_MAP, processMap); - templateInfo.put(XML_CONSUMING_MAP, consumingMap); - templateInfo.put(ATTR_DAY_COUNT, idleDayCount); - return templateInfo; + int getTimeConsume() { + return (int)consumingMap.get(ATTR_TIME_CONSUME); } public void writeXML(XMLPrintWriter writer) { @@ -100,6 +111,9 @@ class TemplateInfo implements XMLReadable, XMLWriter { if (StringUtils.isNotEmpty(templateID)) { writer.attr(ATTR_TEMPLATE_ID, this.templateID); } + if (StringUtils.isNotEmpty(originID)) { + writer.attr(ATTR_ORIGIN_ID, this.originID); + } if (idleDayCount >= 0) { writer.attr(ATTR_DAY_COUNT, this.idleDayCount); } @@ -126,7 +140,8 @@ class TemplateInfo implements XMLReadable, XMLWriter { writer.attr(ATTR_JAR_TIME, (String) consumingMap.get(ATTR_JAR_TIME)); writer.attr(ATTR_CREATE_TIME, (String) consumingMap.get(ATTR_CREATE_TIME)); writer.attr(ATTR_UUID, (String) consumingMap.get(ATTR_UUID)); - writer.attr(ATTR_TIME_CONSUME, (long) consumingMap.get(ATTR_TIME_CONSUME)); + writer.attr(ATTR_TIME_CONSUME, (int)consumingMap.get(ATTR_TIME_CONSUME)); + writer.attr(ATTR_ORIGIN_TIME, (int)consumingMap.get(ATTR_ORIGIN_TIME)); writer.attr(ATTR_VERSION, (String) consumingMap.get(ATTR_VERSION)); writer.attr(ATTR_USERNAME, (String) consumingMap.get(ATTR_USERNAME)); writer.end(); @@ -136,6 +151,7 @@ class TemplateInfo implements XMLReadable, XMLWriter { if (!reader.isChildNode()) { idleDayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); + originID = reader.getAttrAsString(ATTR_ORIGIN_ID, StringUtils.EMPTY); } else { try { String name = reader.getTagName(); @@ -152,8 +168,10 @@ class TemplateInfo implements XMLReadable, XMLWriter { consumingMap.put(ATTR_JAR_TIME, reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); consumingMap.put(ATTR_CREATE_TIME, reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); consumingMap.put(ATTR_TEMPLATE_ID, templateID); + consumingMap.put(ATTR_ORIGIN_ID, originID); consumingMap.put(ATTR_UUID, reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); - consumingMap.put(ATTR_TIME_CONSUME, reader.getAttrAsLong(ATTR_TIME_CONSUME, 0)); + consumingMap.put(ATTR_TIME_CONSUME, reader.getAttrAsInt(ATTR_TIME_CONSUME, 0)); + consumingMap.put(ATTR_ORIGIN_TIME, reader.getAttrAsInt(ATTR_ORIGIN_TIME, 0)); consumingMap.put(ATTR_VERSION, reader.getAttrAsString(ATTR_VERSION, "8.0")); consumingMap.put(ATTR_USERNAME, reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); } @@ -173,7 +191,7 @@ class TemplateInfo implements XMLReadable, XMLWriter { int floatCount = (int) processMap.get(ATTR_FLOAT_COUNT); int blockCount = (int) processMap.get(ATTR_BLOCK_COUNT); int widgetCount = (int) processMap.get(ATTR_WIDGET_COUNT); - boolean isTestTemplate = false; + boolean isTestTemplate; if (reportType == 0) { // 普通报表 isTestTemplate = cellCount <= VALID_CELL_COUNT && floatCount <= 1 && widgetCount <= VALID_WIDGET_COUNT; } else if (reportType == 1) { // 聚合报表 @@ -200,8 +218,8 @@ class TemplateInfo implements XMLReadable, XMLWriter { return isComplete() && !isTestTemplate(); } - void addTimeConsume(long timeConsume) { - timeConsume += (long) consumingMap.get(ATTR_TIME_CONSUME); // 加上之前的累计编辑时间 + void addTimeConsume(int timeConsume) { + timeConsume += (int)consumingMap.get(ATTR_TIME_CONSUME); // 加上之前的累计编辑时间 consumingMap.put(ATTR_TIME_CONSUME, timeConsume); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 103047be7..5d5e5dd5b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -59,14 +59,28 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { /** * 收集模板信息。如果之前没有记录,则新增;如果已有记录,则更新。 * 同时将最新数据保存到文件中。 + * @param templateID 模版id + * @param originID 模版的原始id,仅对另存为的模版有效,对于非另存为的模版,值总是为空 + * @param processInfo 包含模版的一些基本信息(如模版类型、包含控件数量等) * @param timeConsume 本次制作耗时,单位为 s */ - public void collectInfo(String templateID, TemplateProcessInfo processInfo, long timeConsume) { + public void collectInfo(String templateID, String originID, TemplateProcessInfo processInfo, int timeConsume) { if (!shouldCollectInfo()) { return; } - TemplateInfo templateInfo = getOrCreateTemplateInfoByID(templateID); + TemplateInfo templateInfo; + if (this.contains(templateID)) { + templateInfo = templateInfoMap.get(templateID); + } else if (!this.contains(originID)) { + templateInfo = TemplateInfo.newInstance(templateID); + templateInfoMap.put(templateID, templateInfo); + } else { + int originTime = templateInfoMap.get(originID).getTimeConsume(); + templateInfo = TemplateInfo.newInstance(templateID, originID, originTime); + templateInfoMap.put(templateID, templateInfo); + } + // 收集制作耗时 templateInfo.addTimeConsume(timeConsume); // 收集模版基本信息 @@ -110,6 +124,10 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { templateInfoMap = new HashMap<>(); setDesignerOpenDate(); + loadFromFile(); + } + + void loadFromFile() { if (!getInfoFile().exists()) { return; } @@ -123,7 +141,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } } - private TemplateInfo getOrCreateTemplateInfoByID(String templateID) { + TemplateInfo getOrCreateTemplateInfoByID(String templateID) { if (templateInfoMap.containsKey(templateID)) { return templateInfoMap.get(templateID); } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index 1c3823501..eb9aa2346 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -1,8 +1,13 @@ package com.fr.design.mainframe.template.info; +import com.fr.config.MarketConfig; +import com.fr.general.GeneralUtils; import com.fr.invoke.Reflect; import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.io.FileUtils; import org.easymock.EasyMock; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -10,27 +15,53 @@ import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.io.File; +import java.io.IOException; import java.util.Map; +import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.assertJsonStringEquals; +import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.setUpMockForNewInstance; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * Created by plough on 2019/4/18. */ @RunWith(PowerMockRunner.class) -@PrepareForTest(ProductConstants.class) +@PrepareForTest({ProductConstants.class, MarketConfig.class, ProductConstants.class, GeneralUtils.class}) public class TemplateInfoCollectorTest { + private String filePath; + private String initialFileContent; + private TemplateProcessInfo mockProcessInfo; @Before - public void setUp() { + public void setUp() throws IOException { PowerMock.mockStatic(ProductConstants.class); - String filePath = getClass().getResource("tpl.info").getPath(); + filePath = getClass().getResource("tpl.info").getPath(); String dirPath = filePath.substring(0, filePath.indexOf("tpl.info")); EasyMock.expect(ProductConstants.getEnvHome()).andReturn(dirPath).anyTimes(); - EasyMock.replay(); PowerMock.replayAll(); + + mockProcessInfo = EasyMock.mock(TemplateProcessInfo.class); + EasyMock.expect(mockProcessInfo.getBlockCount()).andReturn(3).anyTimes(); + EasyMock.expect(mockProcessInfo.getCellCount()).andReturn(13).anyTimes(); + EasyMock.expect(mockProcessInfo.getFloatCount()).andReturn(1).anyTimes(); + EasyMock.expect(mockProcessInfo.getReportType()).andReturn(0).anyTimes(); + EasyMock.expect(mockProcessInfo.getWidgetCount()).andReturn(0).anyTimes(); + EasyMock.replay(mockProcessInfo); + + // 缓存 tpl.info + initialFileContent = FileUtils.readFileToString(new File(filePath), "utf-8"); + + Reflect.on(TemplateInfoCollector.class).set("instance", null); + } + + @After + public void tearDown() throws IOException { + // 恢复 tpl.info + FileUtils.writeStringToFile(new File(filePath), initialFileContent, "utf-8"); } @Test @@ -39,4 +70,84 @@ public class TemplateInfoCollectorTest { assertEquals("2019-04-18", Reflect.on(collector).field("designerOpenDate").get()); assertEquals(7, ((Map) Reflect.on(collector).field("templateInfoMap").get()).size()); } + + @Test + public void testCollectInfo() { + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + + String templateID = "16a988ce-8529-42f5-b17c-2ee849355071"; + int timeConsume = 200; + + collector.collectInfo(templateID, StringUtils.EMPTY, mockProcessInfo, timeConsume); + + // 检查是否写入成功 + collector.loadFromFile(); + TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + + assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + + "\"cell_count\":13,\"block_count\":3,\"report_type\":0," + + "\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\"}",templateInfo.getProcessMapJsonString()); + + assertJsonStringEquals("{\"activitykey\":\"2e0ea413-fa9c241e0-9723-4354fce51e81\"," + + "\"jar_time\":\"不是安装版本\",\"create_time\":\"2019-03-26 16:13\"," + + "\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\",\"originID\":\"\"," + + "\"uuid\":\"476ca2cc-f789-4c5d-8e89-ef146580775c\",\"time_consume\":329,\"originTime\":0," + + "\"version\":\"10.0\",\"username\":\"plough\"}", templateInfo.getConsumingMapJsonString()); + } + + @Test + public void testCollectInfoForNewTemplate() throws Exception { + setUpMockForNewInstance(); + + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + + String templateID = "73a97777-8jnk-47cd-b57c-2ee89991279796"; + int timeConsume = 200; + + collector.collectInfo(templateID, StringUtils.EMPTY, mockProcessInfo, timeConsume); + + // 检查是否写入成功 + collector.loadFromFile(); + assertTrue(collector.contains(templateID)); + + TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + assertEquals(templateID, templateInfo.getTemplateID()); + + assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + + "\"cell_count\":13,\"block_count\":3,\"report_type\":0," + + "\"templateID\":\"73a97777-8jnk-47cd-b57c-2ee89991279796\"}",templateInfo.getProcessMapJsonString()); + + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + assertEquals(templateID, consumingMap.get("templateID")); + assertEquals(StringUtils.EMPTY, consumingMap.get("originID")); + assertEquals(200, consumingMap.get("time_consume")); + assertEquals(0, consumingMap.get("originTime")); + } + + @Test + public void testCollectInfoWhenSaveAs() throws Exception { + setUpMockForNewInstance(); + + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + + String templateID = "423238d4-5223-22vj-vlsj-42jc49245iw3"; + String originID = "16a988ce-8529-42f5-b17c-2ee849355071"; + int timeConsume = 200; + + collector.collectInfo(templateID, originID, mockProcessInfo, timeConsume); + + // 检查是否写入成功 + collector.loadFromFile(); + TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + + assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + + "\"cell_count\":13,\"block_count\":3,\"report_type\":0," + + "\"templateID\":\"423238d4-5223-22vj-vlsj-42jc49245iw3\"}", templateInfo.getProcessMapJsonString()); + + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + assertEquals(templateID, consumingMap.get("templateID")); + assertEquals(originID, consumingMap.get("originID")); + assertEquals(329, consumingMap.get("time_consume")); + assertEquals(129, consumingMap.get("originTime")); + } } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java new file mode 100644 index 000000000..19f6066ff --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java @@ -0,0 +1,125 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.config.MarketConfig; +import com.fr.general.GeneralUtils; +import com.fr.invoke.Reflect; +import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.io.StringReader; +import java.util.Map; + +import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.assertJsonStringEquals; +import static com.fr.design.mainframe.template.info.TemplateInfoTestHelper.setUpMockForNewInstance; +import static org.junit.Assert.assertEquals; + +/** + * Created by plough on 2019/4/19. + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({MarketConfig.class, ProductConstants.class, GeneralUtils.class}) +public class TemplateInfoTest { + + private static final String NORMAL_INFO = "\n" + + "\n" + + "\n" + + ""; + + private static final String SAVE_AS_INFO = "\n" + + "\n" + + "\n" + + ""; + + private TemplateInfo templateInfo; + private TemplateInfo templateInfoSaveAs; // 另存为的模版记录 + + @Before + public void setUp() throws XMLStreamException { + templateInfo = createTemplateInfo(NORMAL_INFO); + templateInfoSaveAs = createTemplateInfo(SAVE_AS_INFO); + } + + @Test + public void testNewInstance() throws Exception { + setUpMockForNewInstance(); + + String templateID = "24avc8n2-1iq8-iuj2-wx24-8yy0i8132302"; + TemplateInfo templateInfo = TemplateInfo.newInstance(templateID); + assertEquals(templateID, templateInfo.getTemplateID()); + assertEquals(StringUtils.EMPTY, Reflect.on(templateInfo).field("originID").get()); + assertEquals(0, Reflect.on(templateInfo).field("idleDayCount").get()); + assertEquals("{}", templateInfo.getProcessMapJsonString()); + + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + assertEquals(templateID, consumingMap.get("templateID")); + assertEquals(0, consumingMap.get("originTime")); + assertEquals(StringUtils.EMPTY, consumingMap.get("originID")); + assertEquals(0, consumingMap.get("time_consume")); + assertEquals("不是安装版本", consumingMap.get("jar_time")); + assertEquals("plough", consumingMap.get("username")); + assertEquals("10.0", consumingMap.get("version")); + } + + @Test + public void testNewInstanceWithMoreArgs() throws Exception { + setUpMockForNewInstance(); + + String templateID = "24121212-u2c8-ncd2-82nx-8ud0i8138888"; + String originID = "24avc8n2-1iq8-iuj2-wx24-8yy0i8132302"; + int originTime = 100; + TemplateInfo templateInfo = TemplateInfo.newInstance(templateID, originID, originTime); + assertEquals(templateID, templateInfo.getTemplateID()); + assertEquals(originID, Reflect.on(templateInfo).field("originID").get()); + assertEquals(0, Reflect.on(templateInfo).field("idleDayCount").get()); + assertEquals("{}", templateInfo.getProcessMapJsonString()); + + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + assertEquals(templateID, consumingMap.get("templateID")); + assertEquals(originTime, consumingMap.get("originTime")); + assertEquals(originID, consumingMap.get("originID")); + assertEquals(originTime, consumingMap.get("time_consume")); + assertEquals("不是安装版本", consumingMap.get("jar_time")); + assertEquals("plough", consumingMap.get("username")); + assertEquals("10.0", consumingMap.get("version")); + } + + @Test + public void testGetTemplateID() { + assertEquals("16a988ce-8529-42f5-b17c-2ee849355071", templateInfo.getTemplateID()); + assertEquals("49avd2c4-1104-92j2-wx24-3dd0k2136080", templateInfoSaveAs.getTemplateID()); + } + + @Test + public void testGetConsumingMapJsonString() { + assertJsonStringEquals("{\"activitykey\":\"2e0ea413-fa9c241e0-9723-4354fce51e81\",\"jar_time\":\"不是安装版本\"," + + "\"create_time\":\"2019-03-26 16:13\",\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\",\"originID\":\"\"," + + "\"uuid\":\"476ca2cc-f789-4c5d-8e89-ef146580775c\",\"time_consume\":129,\"originTime\":0,\"version\":\"10.0\"," + + "\"username\":\"plough\"}", templateInfo.getConsumingMapJsonString()); + + assertJsonStringEquals("{\"activitykey\":\"2e0ea413-fa9c241e0-9723-4354fce51e81\",\"jar_time\":\"不是安装版本\"," + + "\"create_time\":\"2019-03-26 16:13\",\"templateID\":\"49avd2c4-1104-92j2-wx24-3dd0k2136080\",\"originID\":\"16a988ce-8529-42f5-b17c-2ee849355071\"," + + "\"uuid\":\"476ca2cc-f789-4c5d-8e89-ef146580775c\",\"time_consume\":429,\"originTime\":129,\"version\":\"10.0\"," + + "\"username\":\"plough\"}", templateInfoSaveAs.getConsumingMapJsonString()); + } + + @Test + public void testGetProcessMapJsonString() { + assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":1," + + "\"block_count\":0,\"report_type\":0,\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\"}", templateInfo.getProcessMapJsonString()); + assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":1," + + "\"block_count\":0,\"report_type\":0,\"templateID\":\"49avd2c4-1104-92j2-wx24-3dd0k2136080\"}", templateInfoSaveAs.getProcessMapJsonString()); + } + + private TemplateInfo createTemplateInfo(String xmlContent) throws XMLStreamException { + StringReader sr = new StringReader(xmlContent); + XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); + return TemplateInfo.newInstanceByRead(xmlReader); + } +} diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java new file mode 100644 index 000000000..be2b58989 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java @@ -0,0 +1,49 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.config.MarketConfig; +import com.fr.general.ComparatorUtils; +import com.fr.general.GeneralUtils; +import com.fr.json.JSONObject; +import com.fr.stable.ProductConstants; +import org.easymock.EasyMock; +import org.powermock.api.easymock.PowerMock; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import static org.junit.Assert.assertTrue; + +/** + * Created by plough on 2019/4/19. + */ +class TemplateInfoTestHelper { + static void assertJsonStringEquals(String jo1, String jo2) { + // HashMap 是无序的,所以不能直接比较它生成的 json 字符串 + assertTrue(ComparatorUtils.equals(new JSONObject(jo1), new JSONObject(jo2))); + } + + private static void setFinalStatic(Field field, Object newValue) throws Exception { + field.setAccessible(true); + // remove final modifier from field + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + field.set(null, newValue); + } + + static void setUpMockForNewInstance() throws Exception { + MarketConfig mockMarketConfig = EasyMock.mock(MarketConfig.class); + EasyMock.expect(mockMarketConfig.getBbsUsername()).andReturn("plough").anyTimes(); + + PowerMock.mockStatic(MarketConfig.class); + EasyMock.expect(MarketConfig.getInstance()).andReturn(mockMarketConfig).anyTimes(); + + PowerMock.mockStatic(GeneralUtils.class); + EasyMock.expect(GeneralUtils.readBuildNO()).andReturn("不是安装版本").anyTimes(); + + setFinalStatic(ProductConstants.class.getDeclaredField("VERSION"), "10.0"); + + EasyMock.replay(mockMarketConfig); + PowerMock.replayAll(); + } +} From c89f013405bcfe5242cb7499f3f1070c9b6c2d04 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 19 Apr 2019 17:38:01 +0800 Subject: [PATCH 059/196] =?UTF-8?q?REPORT-16249=2010OEM=E7=9A=84=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E9=A1=B5=E6=9B=BF=E6=8D=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/fun/OemProcessor.java | 33 +++++++++++++++++++ .../design/fun/impl/AbstractOemProcessor.java | 25 ++++++++++++++ .../fr/design/mainframe/DesignerFrame.java | 12 +++++-- .../mainframe/toolbar/ToolBarMenuDock.java | 7 ++++ .../main/java/com/fr/start/OemActivator.java | 27 +++++++++++++++ .../main/java/com/fr/start/OemHandler.java | 18 ++++++++++ .../src/main/java/com/fr/start/OemImpl.java | 7 ++++ .../fr/start/module/PreStartActivator.java | 10 +++++- 8 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/OemProcessor.java create mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java create mode 100644 designer-base/src/main/java/com/fr/start/OemActivator.java create mode 100644 designer-base/src/main/java/com/fr/start/OemHandler.java create mode 100644 designer-base/src/main/java/com/fr/start/OemImpl.java diff --git a/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java new file mode 100644 index 000000000..01e53c9c5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java @@ -0,0 +1,33 @@ +package com.fr.design.fun; + +import com.fr.design.menu.MenuDef; +import com.fr.start.SplashStrategy; + +import java.awt.image.BufferedImage; +import java.util.List; + +/** + * 设计器Oem接口 + */ +public interface OemProcessor { + /** + * 启动动画,如果不替换则返回null + * @return + */ + SplashStrategy createSplashStrategy(); + + /** + * 替换标题图标--DesignerFrame.initTitleIcon + * 如果不替换则返回null + * @return + */ + List createTitleIcon(); + + /** + * 处理设计器菜单(增删改) + * @param menuDefs 已加载的菜单 + * @return 新的菜单数组 + */ + MenuDef[] dealWithMenuDef(MenuDef[] menuDefs); + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java new file mode 100644 index 000000000..d49bfdf24 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java @@ -0,0 +1,25 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.OemProcessor; +import com.fr.design.menu.MenuDef; +import com.fr.start.SplashStrategy; + +import java.awt.image.BufferedImage; +import java.util.List; + +public abstract class AbstractOemProcessor implements OemProcessor{ + @Override + public MenuDef[] dealWithMenuDef(MenuDef[] menuDefs) { + return menuDefs; + } + + @Override + public List createTitleIcon() { + return null; + } + + @Override + public SplashStrategy createSplashStrategy() { + return null; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 55e07cc1c..397fd312a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -24,6 +24,7 @@ import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.NewTemplatePane; import com.fr.design.file.SaveSomeTemplatePane; import com.fr.design.file.TemplateTreePane; +import com.fr.design.fun.OemProcessor; import com.fr.design.fun.TitlePlaceProcessor; import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider; import com.fr.design.gui.ibutton.UIButton; @@ -57,6 +58,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; import com.fr.stable.project.ProjectConstants; +import com.fr.start.OemHandler; import com.fr.workspace.WorkContext; import com.fr.workspace.Workspace; import com.fr.workspace.connect.WorkspaceConnectionInfo; @@ -458,8 +460,14 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta try { @SuppressWarnings("unchecked") - List image = ICODecoder.read(DesignerFrame.class - .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); + OemProcessor oemProcessor = OemHandler.findOem(); + List image; + if (oemProcessor != null && oemProcessor.createTitleIcon() != null) { + image = oemProcessor.createTitleIcon(); + } else { + image = ICODecoder.read(DesignerFrame.class + .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); + } this.setIconImages(image); } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index ff31f0156..4459bd554 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -38,6 +38,7 @@ import com.fr.design.actions.server.PlatformManagerAction; import com.fr.design.actions.server.PluginManagerAction; import com.fr.design.file.NewTemplatePane; import com.fr.design.fun.MenuHandler; +import com.fr.design.fun.OemProcessor; import com.fr.design.fun.TableDataPaneProcessor; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; @@ -64,6 +65,7 @@ import com.fr.plugin.observer.PluginEventListener; import com.fr.plugin.observer.PluginEventType; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; +import com.fr.start.OemHandler; import com.fr.workspace.WorkContext; import javax.swing.JComponent; @@ -200,6 +202,11 @@ public abstract class ToolBarMenuDock { }; this.menus = menus(plus); + OemProcessor oemProcessor = OemHandler.findOem(); + if (oemProcessor != null) { + this.menus = oemProcessor.dealWithMenuDef(this.menus); + } + for (int i = 0; i < menus.length; i++) { menus[i].setHasRecMenu(true); UIMenu subMenu = menus[i].createJMenu(); diff --git a/designer-base/src/main/java/com/fr/start/OemActivator.java b/designer-base/src/main/java/com/fr/start/OemActivator.java new file mode 100644 index 000000000..6e3bba603 --- /dev/null +++ b/designer-base/src/main/java/com/fr/start/OemActivator.java @@ -0,0 +1,27 @@ +package com.fr.start; + +import com.fr.design.fun.OemProcessor; +import com.fr.module.Activator; +import com.fr.module.extension.Prepare; + +/** + * 设计器OEM注册 + */ +public class OemActivator extends Activator implements Prepare { + + @Override + public void start() { + } + + @Override + public void stop() { + + } + + @Override + public void prepare() { + // 加入Oem + setSingleton(OemProcessor.class, new OemImpl()); + } + +} diff --git a/designer-base/src/main/java/com/fr/start/OemHandler.java b/designer-base/src/main/java/com/fr/start/OemHandler.java new file mode 100644 index 000000000..ff56bc173 --- /dev/null +++ b/designer-base/src/main/java/com/fr/start/OemHandler.java @@ -0,0 +1,18 @@ +package com.fr.start; + +import com.fr.design.fun.OemProcessor; +import com.fr.module.Module; +import com.fr.module.ModuleContext; + +/** + * OEM处理中心 + */ +public class OemHandler { + public static OemProcessor findOem() { + Module oemModule = ModuleContext.getModule(OemActivator.class); + if (oemModule != null) { + return oemModule.getSingleton(OemProcessor.class); + } + return null; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/start/OemImpl.java b/designer-base/src/main/java/com/fr/start/OemImpl.java new file mode 100644 index 000000000..68bf767c8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/start/OemImpl.java @@ -0,0 +1,7 @@ +package com.fr.start; + +import com.fr.design.fun.impl.AbstractOemProcessor; + +public class OemImpl extends AbstractOemProcessor{ + +} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index 1dd95cf6a..9f6f75122 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -2,6 +2,7 @@ package com.fr.start.module; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; +import com.fr.design.fun.OemProcessor; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignerPort; @@ -123,7 +124,14 @@ public class PreStartActivator extends Activator { service.shutdown(); } - private static SplashStrategy createSplash() { + private SplashStrategy createSplash() { + OemProcessor oemProcessor = getSingleton(OemProcessor.class); + if (oemProcessor != null) { + SplashStrategy splashStrategy = oemProcessor.createSplashStrategy(); + if (splashStrategy != null) { + return splashStrategy; + } + } // 这里可以开接口加载自定义启动画面 if (OperatingSystem.isWindows()) { return new SplashFx(); From db3996303e6c3376215608685c80f7aba4808e87 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 19 Apr 2019 21:42:12 +0800 Subject: [PATCH 060/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E7=B2=BE=E7=A1=AE?= =?UTF-8?q?=E5=BA=A6=E6=8F=90=E5=8D=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesktopCardPane.java | 2 + .../com/fr/design/mainframe/JTemplate.java | 39 ++++++---- .../template/info/TimeConsumeTimer.java | 72 +++++++++++++++++++ .../template/info/TimeConsumeTimerTest.java | 62 ++++++++++++++++ 4 files changed, 161 insertions(+), 14 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/TimeConsumeTimerTest.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java index a5f4a72ac..58cd014e0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java @@ -35,6 +35,7 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener } DesignerFrameFileDealerPane.getInstance().setCurrentEditingTemplate(jt); if (component != null) { + component.onLostFocus(); remove(component); } add(component = jt, BorderLayout.CENTER); @@ -42,6 +43,7 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener repaint(); revalidate(); component.requestGridFocus(); + component.onGetFocus(); } protected JTemplate getSelectedJTemplate() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 9708dcb65..9b6a76172 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -36,6 +36,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.template.info.TemplateProcessInfo; +import com.fr.design.mainframe.template.info.TimeConsumeTimer; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.VcsScene; import com.fr.design.menu.MenuDef; @@ -78,7 +79,6 @@ import java.util.regex.Pattern; public abstract class JTemplate> extends TargetComponent implements ToolBarMenuDockPlus, DesignerProxy { // TODO ALEX_SEP editingFILE这个属性一定要吗?如果非要不可,有没有可能保证不为null private static final int PREFIX_NUM = 3000; - private static final int ONE_THOUSAND = 1000; private FILE editingFILE = null; // alex:初始状态为saved,这样不管是新建模板,还是打开模板,如果未做任何操作直接关闭,不提示保存 private boolean saved = true; @@ -92,7 +92,7 @@ public abstract class JTemplate> private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复 private DesignModelAdapter designModel; private PreviewProvider previewType; - private long openTime = 0L; // 打开模板的时间点(包括新建模板) + private TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); public int resolution = ScreenResolution.getScreenResolution(); public JTemplate() { @@ -100,7 +100,6 @@ public abstract class JTemplate> public JTemplate(T t, String defaultFileName) { this(t, new MemFILE(newTemplateNameByIndex(defaultFileName)), true); - openTime = System.currentTimeMillis(); } public JTemplate(T t, FILE file) { @@ -123,10 +122,24 @@ public abstract class JTemplate> this.add(createCenterPane(), BorderLayout.CENTER); this.undoState = createUndoState(); designModel = createDesignModel(); - // 如果不是新建模板,并且在收集列表中 - if (!isNewFile && TemplateInfoCollector.getInstance().contains(t.getTemplateID())) { - openTime = System.currentTimeMillis(); + + consumeTimer.setEnabled(shouldInitForCollectInfo(isNewFile)); + } + + void onGetFocus() { + consumeTimer.start(); + } + + void onLostFocus() { + consumeTimer.stop(); + } + + private boolean shouldInitForCollectInfo(boolean isNewFile) { + if (isNewFile) { + return true; } + // 不是新建模板,但是已经在收集列表中 + return TemplateInfoCollector.getInstance().contains(template.getTemplateID()); } // 刷新右侧属性面板 @@ -139,9 +152,8 @@ public abstract class JTemplate> // 为收集模版信息作准备 private void initForCollect() { generateTemplateId(); - if (openTime == 0) { - openTime = System.currentTimeMillis(); - } + consumeTimer.setEnabled(true); + consumeTimer.start(); } private void collectInfo() { // 执行收集操作 @@ -149,16 +161,15 @@ public abstract class JTemplate> } private void collectInfo(String originID) { // 执行收集操作 - if (openTime == 0) { // 旧模板,不收集数据 + if (!consumeTimer.isEnabled()) { return; } - long saveTime = System.currentTimeMillis(); // 保存模板的时间点 try { - long timeConsume = ((saveTime - openTime) / ONE_THOUSAND); // 制作模板耗时(单位:s) - TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), originID, getProcessInfo(), (int)timeConsume); + int timeConsume = consumeTimer.popTime(); + TemplateInfoCollector.getInstance().collectInfo(template.getTemplateID(), originID, getProcessInfo(), timeConsume); } catch (Throwable th) { // 不管收集过程中出现任何异常,都不应该影响模版保存 } - openTime = saveTime; // 更新 openTime,准备下一次计算 + consumeTimer.start(); // 准备下一次计算 } public abstract TemplateProcessInfo getProcessInfo(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java new file mode 100644 index 000000000..ace07be0d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java @@ -0,0 +1,72 @@ +package com.fr.design.mainframe.template.info; + +/** + * Created by plough on 2019/4/19. + */ +public class TimeConsumeTimer { + private static final int ONE_THOUSAND = 1000; + private enum State { + RUNNING, STOPPED + } + private int timeConsume; // 单位 s + private long startMS; // 单位 ms + private long stopMS; + private State state; + private boolean enabled; + + public TimeConsumeTimer() { + reset(); + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public void start() { + if (!isEnabled() || isRunning()) { + return; + } + startMS = System.currentTimeMillis(); + state = State.RUNNING; + } + + public void stop() { + if (!isEnabled() || !isRunning()) { + return; + } + stopMS = System.currentTimeMillis(); + + timeConsume += ((stopMS - startMS) / ONE_THOUSAND); + startMS = 0; + stopMS = 0; + state = State.STOPPED; + + + System.out.println("timeConsume now: " + timeConsume); + } + + public int popTime() { + if (!isEnabled()) { + return 0; + } + stop(); + int result = timeConsume; + reset(); + return result; + } + + private boolean isRunning() { + return state == State.RUNNING; + } + + private void reset() { + timeConsume = 0; + startMS = 0; + stopMS = 0; + state = State.STOPPED; + } +} diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TimeConsumeTimerTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TimeConsumeTimerTest.java new file mode 100644 index 000000000..5dcf60e7f --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TimeConsumeTimerTest.java @@ -0,0 +1,62 @@ +package com.fr.design.mainframe.template.info; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Created by plough on 2019/4/19. + */ +public class TimeConsumeTimerTest { + + @Test + public void testNotEnabled() throws InterruptedException { + TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); + consumeTimer.start(); + Thread.sleep(1100); + consumeTimer.stop(); + assertEquals(0, consumeTimer.popTime()); + } + + @Test + public void testEnabled() throws InterruptedException { + TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); + consumeTimer.setEnabled(true); + consumeTimer.start(); + Thread.sleep(1100); + consumeTimer.stop(); + assertEquals(1, consumeTimer.popTime()); + assertEquals(0, consumeTimer.popTime()); + } + + @Test + public void testMultiTimes() throws InterruptedException { + TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); + consumeTimer.setEnabled(true); + + consumeTimer.start(); + Thread.sleep(1010); + consumeTimer.stop(); + + Thread.sleep(2000); + + consumeTimer.start(); + Thread.sleep(1010); + assertEquals(2, consumeTimer.popTime()); + } + + @Test + public void testStartMultiTime() throws InterruptedException { + TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); + consumeTimer.setEnabled(true); + + consumeTimer.start(); + Thread.sleep(1010); + consumeTimer.start(); + Thread.sleep(1010); + consumeTimer.start(); + Thread.sleep(1010); + + assertEquals(3, consumeTimer.popTime()); + } +} From 05b5dfb592a0c3696753772f0b22ebf0f68c2d06 Mon Sep 17 00:00:00 2001 From: plough Date: Sun, 21 Apr 2019 11:15:25 +0800 Subject: [PATCH 061/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E8=80=83=E8=99=91?= =?UTF-8?q?=E6=94=BE=E5=81=87=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/info/DesignerOpenHistory.java | 117 ++++++++++++++++++ .../mainframe/template/info/TemplateInfo.java | 10 +- .../template/info/TemplateInfoCollector.java | 56 +++------ .../template/info/TimeConsumeTimer.java | 3 - .../info/DesignerOpenHistoryTest.java | 108 ++++++++++++++++ .../info/TemplateInfoCollectorTest.java | 16 +++ 6 files changed, 269 insertions(+), 41 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java new file mode 100644 index 000000000..096b6d16a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java @@ -0,0 +1,117 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLWriter; +import com.fr.stable.xml.XMLableReader; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * 管理打开设计器的日期记录 + * Created by plough on 2019/4/19. + */ +class DesignerOpenHistory implements XMLReadable, XMLWriter { + static final String XML_TAG = "DesignerOpenHistory"; + private static DesignerOpenHistory singleton; + private static final String SPLITTER = ","; + private static final int LENGTH = 3; // 保留最近 3 次的记录 + // 最近的日期是 history[0],最早的日期是 history[LENGTH-1] + private String[] history = new String[LENGTH]; + + private DesignerOpenHistory() { + for (int i = 0; i < LENGTH; i++) { + history[i] = StringUtils.EMPTY; + } + } + + static DesignerOpenHistory getInstance() { + if (singleton == null) { + singleton = new DesignerOpenHistory(); + } + return singleton; + } + + void update() { + String today = getToday(); + if (ComparatorUtils.equals(history[0], today)) { + return; + } + shiftByOne(); + history[0] = today; + } + + /** + * 获取历史记录中囊括的日子数。即最早的历史记录 history[LENGTH - 1],到最晚的记录 history[0] 之间的时间跨度 + */ + int getHistorySpanDayCount() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date earliestDate = sdf.parse(getEarliestDate()); + Date latestDate = sdf.parse(history[0]); + long diffInMillies = latestDate.getTime() - earliestDate.getTime(); + return (int)TimeUnit.DAYS.convert(diffInMillies,TimeUnit.MILLISECONDS) + 1; + } catch (ParseException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return 1; + } + + /** + * 今天是否已经打开过设计器 + */ + boolean hasOpenedToday() { + String today = getToday(); + return ComparatorUtils.equals(today, history[0]); + } + + private String getEarliestDate() { + for (int i = LENGTH - 1; i >= 0; i--) { + if (StringUtils.isNotEmpty(history[i])) { + return history[i]; + } + } + throw new AssertionError("Designer open history is empty!"); + } + + private void shiftByOne() { + for (int i = LENGTH - 1; i > 0; i--) { + history[i] = history[i-1]; + } + } + + private String getToday() { + return new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + } + + @Override + public String toString() { + return StringUtils.join(SPLITTER, history); + } + + private void parseString(String s) { + String[] arr = s.split(SPLITTER); + System.arraycopy(arr, 0, history, 0, arr.length); + } + + @Override + public void readXML(XMLableReader reader) { + if (XML_TAG.equals(reader.getTagName())) { + parseString(reader.getElementValue()); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TAG); + writer.textNode(toString()); + writer.end(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index af644a1e8..4c45ce823 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -203,7 +203,11 @@ class TemplateInfo implements XMLReadable, XMLWriter { } boolean isComplete() { - return idleDayCount > COMPLETE_DAY_COUNT; + // 条件 1. 超过15天未编辑 + // 条件 2. 设计器在这段未编辑的时间内启动超过 X 次(目前定的 X = 3)。即"设计器最近 X 次启动的时间跨度" < "未编辑时间"; + + return idleDayCount > COMPLETE_DAY_COUNT + && DesignerOpenHistory.getInstance().getHistorySpanDayCount() < idleDayCount; } String getConsumingMapJsonString() { @@ -245,4 +249,8 @@ class TemplateInfo implements XMLReadable, XMLWriter { void addIdleDayCountByOne() { this.idleDayCount += 1; } + + int getIdleDayCount() { + return this.idleDayCount; + } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 5d5e5dd5b..30bfb5e1d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -2,7 +2,6 @@ package com.fr.design.mainframe.template.info; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; -import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; @@ -19,9 +18,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.HashMap; import java.util.Map; @@ -31,17 +28,23 @@ import java.util.Map; */ public class TemplateInfoCollector implements XMLReadable, XMLWriter { private static final String XML_TAG = "TplInfo"; - private static final String XML_DESIGNER_OPEN_DATE = "DesignerOpenDate"; private static final String XML_TEMPLATE_INFO_LIST = "TemplateInfoList"; private static final String XML_FILE_NAME = "tpl.info"; private static TemplateInfoCollector instance; private Map templateInfoMap; - private String designerOpenDate; //设计器最近一次打开日期 + private DesignerOpenHistory designerOpenHistory; private TemplateInfoCollector() { init(); } + private void init() { + templateInfoMap = new HashMap<>(); + designerOpenHistory = DesignerOpenHistory.getInstance(); + + loadFromFile(); + } + public static TemplateInfoCollector getInstance() { if (instance == null) { instance = new TemplateInfoCollector(); @@ -96,6 +99,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { * 发送本地模板信息到服务器,并清空已发送模版的本地记录 */ public void sendTemplateInfo() { + // 每次启动设计器后,都会执行这个函数(被 InformationCollector 的 collectStartTime 调用) addIdleDayCount(); removeTestTemplates(); @@ -120,13 +124,6 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), XML_FILE_NAME)); } - private void init() { - templateInfoMap = new HashMap<>(); - setDesignerOpenDate(); - - loadFromFile(); - } - void loadFromFile() { if (!getInfoFile().exists()) { return; @@ -150,21 +147,6 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { return templateInfo; } - /** - * 把设计器最近打开日期设定为当前日期 - */ - private void setDesignerOpenDate() { - designerOpenDate = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); - } - - /** - * 判断今天是否第一次打开设计器,为了防止同一天内,多次 addIdleDayCount - */ - private boolean designerOpenFirstTime() { - String today = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); - return !ComparatorUtils.equals(today, designerOpenDate); - } - private boolean shouldCollectInfo() { //只收集本地环境的 if (!WorkContext.getCurrent().isLocal()) { @@ -189,12 +171,14 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { * 更新 day_count:打开设计器却未编辑模板的连续日子 */ private void addIdleDayCount() { - if (designerOpenFirstTime()) { - for (TemplateInfo templateInfo : templateInfoMap.values()) { - templateInfo.addIdleDayCountByOne(); - } - setDesignerOpenDate(); + // 判断今天是否第一次打开设计器,为了防止同一天内,多次 addIdleDayCount + if (designerOpenHistory.hasOpenedToday()) { + return; } + for (TemplateInfo templateInfo : templateInfoMap.values()) { + templateInfo.addIdleDayCountByOne(); + } + designerOpenHistory.update(); } // 删除所有已完成的测试模版 @@ -220,8 +204,8 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { if (reader.isChildNode()) { try { String name = reader.getTagName(); - if (XML_DESIGNER_OPEN_DATE.equals(name)) { - this.designerOpenDate = reader.getElementValue(); + if (DesignerOpenHistory.XML_TAG.equals(name)) { + reader.readXMLObject(designerOpenHistory); } else if (TemplateInfo.XML_TAG.equals(name)) { TemplateInfo templateInfo = TemplateInfo.newInstanceByRead(reader); templateInfoMap.put(templateInfo.getTemplateID(), templateInfo); @@ -236,9 +220,7 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { public void writeXML(XMLPrintWriter writer) { writer.startTAG(XML_TAG); - writer.startTAG(XML_DESIGNER_OPEN_DATE); - writer.textNode(designerOpenDate); - writer.end(); + designerOpenHistory.writeXML(writer); writer.startTAG(XML_TEMPLATE_INFO_LIST); for (TemplateInfo templateInfo : templateInfoMap.values()) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java index ace07be0d..527341411 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TimeConsumeTimer.java @@ -44,9 +44,6 @@ public class TimeConsumeTimer { startMS = 0; stopMS = 0; state = State.STOPPED; - - - System.out.println("timeConsume now: " + timeConsume); } public int popTime() { diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java new file mode 100644 index 000000000..e3f63ddc3 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java @@ -0,0 +1,108 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.invoke.Reflect; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import org.junit.Before; +import org.junit.Test; + +import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * Created by plough on 2019/4/21. + */ +public class DesignerOpenHistoryTest { + private DesignerOpenHistory openHistory; + private String[] mockHistory = new String[] { + "2019-04-08", "2019-04-03", "2019-03-29" + }; + + @Before + public void setUp() { + openHistory = DesignerOpenHistory.getInstance(); + Reflect.on(openHistory).set("history", mockHistory); + } + + @Test + public void testReadAndWrite() throws XMLStreamException { + // 写入 xml + StringWriter sw = new StringWriter(); + XMLPrintWriter writer = XMLPrintWriter.create(new PrintWriter(sw)); + openHistory.writeXML(writer); + writer.flush(); + writer.close(); + + String xmlText = sw.getBuffer().toString(); + + // 临时修改配置 + Reflect.on(openHistory).set("history", new String[] {"", "", ""}); + + // 从 xml 中读取 + StringReader sr = new StringReader(xmlText); + XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); + xmlReader.readXMLObject(openHistory); + + // 验证:与写入时的配置一致 + assertArrayEquals(mockHistory, (String[])Reflect.on(openHistory).field("history").get()); + } + + @Test + public void testToString() { + assertEquals("2019-04-08,2019-04-03,2019-03-29", openHistory.toString()); + } + + @Test + public void testParseString() { + String[] mockDates = {"2020-04-08", "2019-04-03", "2016-03-29"}; + Reflect.on(openHistory).call("parseString", StringUtils.join(",", mockDates)); + assertArrayEquals(mockDates, (String[])Reflect.on(openHistory).field("history").get()); + } + + @Test + public void testGetHistorySpanDayCount() { + assertEquals(11, openHistory.getHistorySpanDayCount()); + + Reflect.on(openHistory).set("history", new String[] {"2019-05-03", "2019-05-02", ""}); + assertEquals(2, openHistory.getHistorySpanDayCount()); + + Reflect.on(openHistory).set("history", new String[] {"2019-05-03", "", ""}); + assertEquals(1, openHistory.getHistorySpanDayCount()); + + try { + Reflect.on(openHistory).set("history", new String[] {"", "", ""}); + fail("should not be here"); + } catch (AssertionError ignore) { + } + } + + @Test + public void testHasOpenedToday() { + assertFalse(openHistory.hasOpenedToday()); + + Reflect.on(openHistory).set("history", new String[] {getToday(), "2019-02-02", ""}); + assertTrue(openHistory.hasOpenedToday()); + } + + @Test + public void testUpdate() { + openHistory.update(); + String[] arr = { getToday(), "2019-04-08", "2019-04-03" }; + assertArrayEquals(arr, (String[])Reflect.on(openHistory).field("history").get()); + } + + private String getToday() { + return new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); + } +} diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index eb9aa2346..1b8fa7f6e 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -150,4 +150,20 @@ public class TemplateInfoCollectorTest { assertEquals(329, consumingMap.get("time_consume")); assertEquals(129, consumingMap.get("originTime")); } + + @Test + public void addIdleDateCount() { + String templateID = "16a988ce-8529-42f5-b17c-2ee849355071"; + TemplateInfoCollector collecter = TemplateInfoCollector.getInstance(); + TemplateInfo templateInfo = collecter.getOrCreateTemplateInfoByID(templateID); + + assertEquals(9, templateInfo.getIdleDayCount()); + + Reflect.on(collecter).call("addIdleDayCount"); + assertEquals(10, templateInfo.getIdleDayCount()); + + // 同一天内多次调用无效 + Reflect.on(collecter).call("addIdleDayCount"); + assertEquals(10, templateInfo.getIdleDayCount()); + } } From fb7c78b89f87c954cb1d14e7ba5668972a4b2962 Mon Sep 17 00:00:00 2001 From: plough Date: Sun, 21 Apr 2019 11:19:12 +0800 Subject: [PATCH 062/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/template/info/TemplateInfoCollectorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index 1b8fa7f6e..7b02f4bba 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -152,7 +152,7 @@ public class TemplateInfoCollectorTest { } @Test - public void addIdleDateCount() { + public void testAddIdleDateCount() { String templateID = "16a988ce-8529-42f5-b17c-2ee849355071"; TemplateInfoCollector collecter = TemplateInfoCollector.getInstance(); TemplateInfo templateInfo = collecter.getOrCreateTemplateInfoByID(templateID); From 8141697e3fe7d41805c781d28a3d02324211cf73 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 21 Apr 2019 20:11:11 +0800 Subject: [PATCH 063/196] =?UTF-8?q?REPORT-14835=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BC=98=E5=8C=96=E5=8F=8A?= =?UTF-8?q?=E5=86=85=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 70 ++++++- .../design/mainframe/toolbar/VcsConfig.java | 74 +++++++ .../design/mainframe/toolbar/VcsContext.java | 17 ++ .../vcs/images/icon_back_normal@2x.png | Bin 0 -> 804 bytes .../mainframe/vcs/images/icon_delete.png | Bin 0 -> 167 bytes .../mainframe/vcs/images/icon_delete@2x.png | Bin 0 -> 211 bytes .../design/mainframe/vcs/images/icon_edit.png | Bin 0 -> 398 bytes .../mainframe/vcs/images/icon_edit@2x.png | Bin 0 -> 730 bytes .../mainframe/vcs/images/icon_filter@1x.png | Bin 0 -> 317 bytes .../mainframe/vcs/images/icon_filter@2x.png | Bin 0 -> 537 bytes .../vcs/images/icon_list_disabled.png | Bin 0 -> 289 bytes .../vcs/images/icon_list_disabled@2x.png | Bin 0 -> 605 bytes .../vcs/images/icon_list_normal@2x.png | Bin 0 -> 586 bytes .../mainframe/vcs/images/icon_revert.png | Bin 0 -> 512 bytes .../mainframe/vcs/images/icon_revert@2x.png | Bin 0 -> 971 bytes .../vcs/images/icon_save_disabled.png | Bin 0 -> 467 bytes .../vcs/images/icon_save_disabled@2x.png | Bin 0 -> 926 bytes .../vcs/images/icon_save_normal@2x.png | Bin 0 -> 908 bytes .../mainframe/vcs/images/icon_user@1x.png | Bin 0 -> 376 bytes .../mainframe/vcs/images/icon_user@2x.png | Bin 0 -> 668 bytes .../design/mainframe/vcs/images/vcs_back.png | Bin 0 -> 310 bytes .../design/mainframe/vcs/images/vcs_list.png | Bin 0 -> 286 bytes .../design/mainframe/vcs/images/vcs_save.png | Bin 0 -> 453 bytes .../vcs/proxy/VcsCacheFileNodeFileProxy.java | 74 +++++++ .../vcs/ui/FileVersionCellEditor.java | 83 ++++++++ .../vcs/ui/FileVersionCellRender.java | 43 ++++ .../mainframe/vcs/ui/FileVersionDialog.java | 77 ++++++++ .../vcs/ui/FileVersionFirstRowPanel.java | 20 ++ .../mainframe/vcs/ui/FileVersionRowPanel.java | 148 ++++++++++++++ .../vcs/ui/FileVersionTablePanel.java | 86 ++++++++ .../mainframe/vcs/ui/FileVersionsPanel.java | 187 ++++++++++++++++++ .../src/main/java/com/fr/start/Designer.java | 52 ++++- 32 files changed, 927 insertions(+), 4 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_back_normal@2x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete@2x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit@2x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@1x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@2x.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled@2x.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_normal@2x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert@2x.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled@2x.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_normal@2x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_user@1x.png create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_user@2x.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_back.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_list.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_save.png create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFileProxy.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index cef5c86a0..48e067d36 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -26,6 +26,8 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.toolbar.VcsConfig; +import com.fr.design.mainframe.vcs.ui.FileVersionsPanel; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; @@ -43,9 +45,13 @@ import com.fr.plugin.manage.PluginFilter; import com.fr.plugin.observer.PluginEvent; import com.fr.plugin.observer.PluginEventListener; import com.fr.stable.CoreConstants; +import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; import com.fr.third.org.apache.commons.io.FilenameUtils; +import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.common.Constants; import javax.swing.BorderFactory; import javax.swing.JDialog; @@ -111,6 +117,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private DelFileAction delFileAction = new DelFileAction(); + private VcsAction vcsAction = new VcsAction(); + /** * 刷新 @@ -191,7 +199,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt if (WorkContext.getCurrent().isLocal()) { toolbarDef.addShortCut(showInExplorerAction); } - toolbarDef.addShortCut(renameAction, delFileAction); + toolbarDef.addShortCut(renameAction, delFileAction, vcsAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); for (ShortCut shortCut : extraShortCuts) { toolbarDef.addShortCut(shortCut); @@ -209,6 +217,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt showInExplorerAction.setEnabled(false); renameAction.setEnabled(false); delFileAction.setEnabled(false); + vcsAction.setEnabled(false); this.repaint(); } @@ -273,6 +282,63 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } + /** + * 版本管理 + */ + private class VcsAction extends UpdateAction { + public VcsAction() { + this.setName(Toolkit.i18nText("Plugin-VCS_Title")); + this.setSmallIcon(Constants.VCS_LIST_PNG); + } + + @Override + public void actionPerformed(ActionEvent e) { + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + path = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path); + + boolean isCurrentEditing = isCurrentEditing(path); + + // 如果模板正在编辑,保存后再打开版本管理 + if (isCurrentEditing) { + saveCurrentEditingTemplate(); + } + + // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) + closeOpendTemplate(path, isCurrentEditing); + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(VcsConfig.class); + FileVersionsPanel fileVersionTablePanel = context.getBean(FileVersionsPanel.class); + fileVersionTablePanel.showFileVersionsPane(); + } + + private void closeOpendTemplate(String path, boolean isCurrentEditing) { + for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { + if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { + if (isCurrentEditing) { + MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); + } + MutilTempalteTabPane.getInstance().closeFormat(jTemplate); + MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jTemplate); + return; + } + } + } + + + } + + private void saveCurrentEditingTemplate() { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + jt.stopEditing(); + jt.saveTemplate(); + jt.requestFocus(); + } + + private boolean isCurrentEditing(String path) { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + String editing = jt.getEditingFILE().getPath(); + return ComparatorUtils.equals(editing, path); + } + /** * 在系统资源管理器中打开 */ @@ -386,11 +452,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt newFolderAction.setEnabled(singleSelected); renameAction.setEnabled(singleSelected); showInExplorerAction.setEnabled(singleSelected); + vcsAction.setEnabled(singleSelected); // 删除操作在至少选中一个时可用 boolean selected = selectedPathNum > 0; delFileAction.setEnabled(selected); - // 刷新操作始终可用 refreshTreeAction.setEnabled(true); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java new file mode 100644 index 000000000..8364f546f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java @@ -0,0 +1,74 @@ +package com.fr.design.mainframe.toolbar; + +import com.fr.design.mainframe.vcs.ui.FileVersionCellEditor; +import com.fr.design.mainframe.vcs.ui.FileVersionCellRender; +import com.fr.design.mainframe.vcs.ui.FileVersionFirstRowPanel; +import com.fr.design.mainframe.vcs.ui.FileVersionRowPanel; +import com.fr.design.mainframe.vcs.ui.FileVersionTablePanel; +import com.fr.design.mainframe.vcs.ui.FileVersionsPanel; +import com.fr.third.javax.inject.Singleton; +import com.fr.third.springframework.context.annotation.Bean; +import com.fr.third.springframework.context.annotation.ComponentScan; +import com.fr.third.springframework.context.annotation.Configuration; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; +import com.fr.workspace.server.vcs.VcsOperatorImpl; +import com.fr.workspace.server.vcs.filesystem.VcsFileSystem; +import com.fr.workspace.server.vcs.git.FineGit; + + +/** + * Created by XiaXiang on 2019/4/16. + */ +@Configuration +@ComponentScan({"com.fr.workspace.server.vcs", "com.fr.design.mainframe.vcs"}) +public class VcsConfig { + @Bean + @Singleton + public FileVersionsPanel fileVersionsPanel() { + return new FileVersionsPanel(fileVersionTablePanel()); + } + + @Bean + @Singleton + public FileVersionTablePanel fileVersionTablePanel() { + return new FileVersionTablePanel(vcsOperator(), fileVersionCellEditor(), fileVersionCellRender()); + } + + @Bean + @Singleton + public FileVersionCellEditor fileVersionCellEditor() { + return new FileVersionCellEditor(fileVersionFirstRowPanel(), fileVersionRowPanel(), vcsOperator()); + } + + @Bean + @Singleton + public FileVersionFirstRowPanel fileVersionFirstRowPanel() { + return new FileVersionFirstRowPanel(); + } + + @Bean + public FileVersionRowPanel fileVersionRowPanel() { + return new FileVersionRowPanel(vcsOperator()); + } + + @Bean + @Singleton + public FileVersionCellRender fileVersionCellRender() { + return new FileVersionCellRender(fileVersionFirstRowPanel(), fileVersionRowPanel()); + } + + @Bean + @Singleton + public VcsOperator vcsOperator() { + return new VcsOperatorImpl(vcsFileSystem(), new FineGit(vcsFileSystem().getVcsHistoryPath())); + } + + @Bean + @Singleton + public VcsFileSystem vcsFileSystem() { + return new VcsFileSystem(WorkContext.getCurrent()); + } + + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java new file mode 100644 index 000000000..894ee95eb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java @@ -0,0 +1,17 @@ +package com.fr.design.mainframe.toolbar; + +import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; + +/** + * Created by XiaXiang on 2019/4/20. + */ +public class VcsContext extends AnnotationConfigApplicationContext { + public static final VcsContext INSTANCE = new VcsContext(); + + public static VcsContext get() { + + return INSTANCE; + } + + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_back_normal@2x.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_back_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3fd50cdc6b295cb491b7de2023cc024aa27f3e GIT binary patch literal 804 zcmV+<1Ka$GP)Px%-bqA3R9Fe^S3QUmK@^_JKPn;y)Iziou9MT<7%x@8Baq_kP7n*NtOa|C)^e?A zB^DN5qjDYyf(jS<#d%}P$ligJlrzh^Q@*qfQ#jiLw_*v!m(@B8NMn>X`j z8B_fVg+fTB^D8&a)W@N%VVLf4AUaZ^P%7JOHoMC-&5F{16q8YFDP>B$V?!qYCDZyK zQw~E8+7e?&V@hgL!01sbmD;B@GK|z!!#JMS8vPq3MF3CRJA1?{7$4{J`FOKwe`k!Z zT2_sZ>qK8lkWQ!fce_6twrww4R$U4d1WF}B{=#+L=|m#Fvsf%{aD7t(VSxO-?YiuA zI2@X)R;zD?Ja7x53$j!SO!OZE4CB~Y#9_hv3d8N>Rg90ZgDx@FyUAGO{d zqL1V{ECVPLiHrfhhh#d*SmK~%J^K)d0N@h9GqG4SSuU4bGBC-c9sv9r;3 zyiu>$4hVVRmhu3nt#T!N5rU+L=bbO(Eu+600c{#h;t8GI$lnEEiTgdu(jgtsA9H{% z1=xKT`;+lC#=?2aTG8LA243nM)aq!XIgWFS${rcgh6{!GY>@IdQ3P_i-1b&$jn3K= z0}o$e;#{p(8{JQ}u8)*~9LQucd)C)G4>9pHQQ(cA;^3Rp-5f?!$$P#X5Cx)7!xtGl za>lZ5bmX-DrP6vJgX3y*3UB1QE4#0qgbL%LAFid1S6$UwJYZOB>%wC`EgOI0vruzX(F-5Q#60 ibqCAiG29xCMc^l{itpWEp literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete.png new file mode 100755 index 0000000000000000000000000000000000000000..6fb2baac51ead86742e20545aa0a62413be50b12 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|5K|k5|2~(;g&RwlQDDH z6mGYiaof(gobd%$;YW8~2X4ulg}lLC>)IYUq%_XtS$r|Kq4RPN8^beAv5Lrm+Yvy^ O7(8A5T-G@yGywp$2|2L< literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete@2x.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..b98c9f4cd256d0541f89536dd00ad38266a4ac66 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}y`CZF_>`rhn_~ z_&2e7;i7A&1A-p1Eb&`WJmt=e`<`vW61^vP3Pw5}y~L^Rz-+*{c3D)+EU%jf*hJ=@ zPn1$%6au0MGvRNX?0+XmHWe_X@voV|on9;Gmynj%zgxUpNj^&=>Ch3N!x%hW{an^L HB{Ts5r8-QC literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit.png new file mode 100755 index 0000000000000000000000000000000000000000..7206039bf6fe35ebdd2358e90c24ec2631653213 GIT binary patch literal 398 zcmV;90df9`P)Px$NJ&INR5%f(k}*rfKoEs@lZy!H#MUB>U@4bK0%B!z$90;{!cJ`b4e9J{L<_MH zETY}TyE0%AF$w;J6j#`YSc=JIeJM5!$0~tKGjC_#_n1k-*pd&IylvZ&5Ns&VwB~u% z`druDDof)l&!68LPfr>fm>OlDR>yJnt7<;wym~=@x4CNrs8OW>Z`8H8$DPi(Hjy4p zivOzb`zu0-2YA*w=abQBcrN{&0*a!zz=}J73&ZFg1wl}E4#4QgfKLE_GbRp_B>C+3 zZP6(JUuGNdWn<=?on~3~CP7*MT*33aHDHg}eHHLknx?lBqE#7y9ksHo?f_eWUoFcz zqY%}~fbn>`2Y3ME2X;RU!|;bfR4W5GpKrnx>AE(+=ral|YUPh)n&wR$$JdKy)mb?K s;7Vmy_1X#WvYzPoRhdaIB6>Ob3o|xqE87|UtN;K207*qoM6N<$g8jFzrT_o{ literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit@2x.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..5993e438970be9f2f8f200920bbcdd8dd815b9ac GIT binary patch literal 730 zcmV<00ww*4P)Px%lu1NER9Fe+R?lk_K^UEhY1&94;=zkWnhFYfu$avzA(wblyjcT+dJv?do;(N& zJ@g=WQ1DjJg9U#f#Cj9F88DEz*%kZ;!U}rvphAP%G|Bk3GIVA)Zg#d?1YHQ00#LQ$Y(_|N@EW!%Xlj096xda*=+tOcF`>t z(YsV?`xRGiJ&aU9u~^)LH~kFVZ{uW?(l29U@!49f_LJvC8<~JgrIP4&d(W}mb_)ap zO39gKvuO)C$&E}vyKUbEc|k%abfML1y^?cs6o~)~-8qn7mZ8Z@(==}KTsEsQ=f`7i zH!VQd^}`stdmPZQc<=3WI&~J-Lnzic{-y+!%jKOoY?d)}Ne&FsAF&uciJ|+(bAC3o z0Fcs^mCj>;?~@7GMZ+-O%eg;Cp#^A~J`dOvGBjN@P4khQ^N&Iaz!&ZqhHgQIrp@W; zsjG5sbfhexP$*2{^ZEqP!dm({k%*sie`-h5OCY1mF?17aYdvS^cJXQqT^}%~8;!;% zo>Q?x7o(STI^Qp#>WEy)Zdlga*K#g+q$B|6{2>t<-7jP4Zi_ipUr7LV-hP3gK0cl} zFT|l-&tEcs6t)*#FX5nB#9lZ3YlGcY5|B(z==FO2YcS|wRZ6cQYH~-Sl7L`6sa5@T z0iGGakbT5KGdb+rt=5~j+QD{bhdco`H>}XTP&NLI$>vno{rmO50OTdUv!e9YMF0Q* M07*qoM6N<$f;+2M?EnA( literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@1x.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@1x.png new file mode 100755 index 0000000000000000000000000000000000000000..7a8ec6287b759b3aab8201425a66f71536186197 GIT binary patch literal 317 zcmV-D0mA-?P)Px#_en%SR5%f1U>In?2y=j~t*z*{Z$Hj6F#MN>iD9D|85yrCDk>PQUcLGkNS+B* z(SLqaJ|^$~|NnwtzI=gO3}=9pnwpwA|NHlUE0D>KsTC~pfti`f;nb;97h&?uFb0Tz z_Uzex85!wo3=E7RKrWi=7``zwvUr|8eeyK29uxzhhFq7Dl6nGU`y(m*&B(|Qbmq*d zeMn+pCWZkZQJ_oCOG!y<1DPPqz{JE@d*;lU`5-nrKzAlw9%$niIER7Z1ri&DiPHcS zRd_gq+kkI)Tn?AQ>4pFQIa-0~0VCSrI*DNblPx1Kbtagbo2wF|o-8#0rYAp~Rrqz` P00000NkvXXu0mjf=n8{` literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@2x.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..9b3a132a7704ceb8798e1ddea5bc72025b72af0f GIT binary patch literal 537 zcmV+!0_OdRP)Px$(@8`@R9Fe^S3OI^Kp4JD(ho4*TneIeb8|?EhzeB{)WO+Z5c~@Y{s=c0ogG~q zZ9qbaZBPq>ij!y&5gZ!vqnP-l5@_oi)3l|7Cd=iX_v^`X*Y~cBMbCd%fKvkGa=D~s zz3e-Vvj}^P@(F=ioD18f(#a+jBT%4aS*s|%3|qIw-So2K*c+;oP;@;K$k`;3iR&@fptTLy$-YB)yd+andl1y8yqs zncRd_plKR;#)K6}`$^fqG5#ou!hE~M-5Ak7*-uNQa(|Uh4?Qzh?~qLnAXY{Dn8VNQ zqR9|2kpk?5neGo*nsd`Eh3*|~F9E@%Cs0HnQXomX6kdE$bBpJ b=L&rR literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..5325682ff8ec5a050e95b95e5e2d6f0173f9297f GIT binary patch literal 289 zcmV++0p9+JP)Px#+et)0R5%f(Qo#+vFboW7E3pAv@TiJ10Z%6G1cAKRf(`gIf{SvNNl5_FkL^4A zoLp*5{Ts)_N!XV{&}uSG?nn}&HUvKtXh%KDPGFWrjB(4H5tuYsYwsi&fo)JgN-Kc) z{&19Y&h3~ZN{yuHRg-)w$t|?J&ZR+iW>)HVD>T**gFR~i0>HQ?8N~t-(#vA@+BnT4 zhml=puHO4w$(eH7sv!gHOP9n`$)#!&6}$(I;VX;|*zvSrzdH@cWf1l=& nXA|Wm((n4o1MmPx%7fD1xR9Fe^S3OU|Fc5XDl8BkDKY@WE5h@)JOU1^oWkW28p;V|D82Aa@m{C(m z$R&A~Yih?yqY5gK#pm<$eY`t6iBhH~3@`7X*ARM)VK|8ZCtEs>7fUGGN4XWq!UQHt zrQ=$zC63ec^tx8pl1HM<3`=qRdJnnV7)4hTiJVTSr#v^g=(d=nI1Ap<5E!uKQ-ByS zpU*#`mobfkVDu;z6=(x+K@=t!%et7UCk(Of`}$dW#a<)pyeI@jRpdY(n?wt2t5}hc zj+e`qMJv*>$Shjco$65&VPU-qqd8YXMbYHeR%p2s#7W)n%R7xksU%5yon>iY4^OYG z*9GP2;)8kyw}`Qf#ugRfls!|ndQrx1VG9dFEFxI1zh-ne`rkC-MsS5KoNkFm4z>`E z$&nhMs^ML*a~kuMH?BjIS548WWqMp205st`lPJT6K^l=l|FET%qn3B>lV&!=U0$`D zTz}GB+jG9jJKzaN4>hpbqRWk(Q`=yZ73^53l9^RD9|-R3BHXM)os%=zfKAdd0|%g* z>^mP0z(%#{@Hwsa0B{LF3ux+LV-S=B7-VI@=Klb=3GFQE75%8tw}|h1Z~OKLow6j! zF0$-9cSSbKhi^i3yXniKJfi8j=czL^D-3iU=>?i)>LUpByG)`31AKvW{PQbAYD-84 rEdn?!)zYbyxdfyPx%1W80eR9Fe^R?AVtFc7t4SCAVF)W9JIUugphp$H0r4mfiS*avC|gKtz2WAqg5 z&PHBgIdNu^8GO-d|NEp}D@n9(u_!v?&xjbY7De$y>e83x^%$gSS7}NDSa2F$m)wy+ zuB>2~jT8`_g3yB3b!BCwIJ_3c^^4Rh%kqNvT8KEI(UMiLktA4QE2h-Y;!9qh=h>xX zz&K6QZ*ro7fpZB#?+hE`_-46Wev%_z{b(%k2-34fBBBqprytzrkRaWy4 zJfs+s+YF>oLtV;=mM4Mh`V~BAvM?(FCs;>7_K-&@>vj8PaytvcRaN(@9CZ%i zfjgs35$iA(DAKdX7?ZY|u3_4XWNKcaImS;KF%i_x3WXK?y|40#I&k;I{tJ5Dh%Tcu z7FcbO=F}2&Ei;D4zb!2c1l}%Icd5#PyA|tUEBVAbX_<1WxMPFcb3hr zsP%f+$am_7+Z@-1jC`Hgy_-5K=kpwPF}KK0)_sE`nDD{Vnh}^9Y6Oh=IDrtVM}jd@(D*g3F)?LFN;l!wvXl= zd~0mDhv8tv*OGU!p! YzvuAEZ2qlZNB{r;07*qoM6N<$g5yvKS^xk5 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert.png new file mode 100755 index 0000000000000000000000000000000000000000..993ba3c21be88bf44ff4222996dea913ec2fcd18 GIT binary patch literal 512 zcmV+b0{{JqP)Px$x=BPqR5%f(Q$0%qK@gqfq7Xs^k)*f?F=@02DDHY1Oe0o;V0Dd_LJEI?rD!V( zq7tpFZ1ehPSV)?n7e5{lkK*c0uUiZ@jWVva+A;JTM{p$C&0P3EreixKU@d_dk7f9S;jR5 zV+v;zz`tRd1p{+$_`M7hpAVKC2M$qSCy^Knmr6y=G)pX*OoVZF3&1(!oS%N=cmhaj zbx#w+Saz;ftF20)VHj_CwG)7W8N{tIrs;Ce6NpAf4gdly5KuV9NF;J8K{A?V{sAl5 z#7c7XPIA4ksO$P5WBipKors+Z7@M2se0JqGN^~8>m8oN%0D!$9gpH5X|L9aeeMV}E z%IhWJVp1-rdj&EH5}Va(eZ7}}i)p$XAd`S)S#4Dvtz-L+RW*LyXjso*2{D$Q!0TS& z(`5^V+dIN^1Sn}Vo+`1J8pjqLscP&clbOG-R4O*@QQ5&@C`)8C+c|n-m)2=`R_=ZR zbWP&q@VjGWcl}!{e-a=9nZ&m3McJyKekS*TzlV28HKtif9xTiN0000h literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert@2x.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..5f26df54c089c8ed1dc901ba9febdc7e478de6f5 GIT binary patch literal 971 zcmV;+12p`JP)Px&g-Jv~R9Fe^R?kaRK^&iXyH?t>ALt=FNFd}TBY3+StklcYONYYx2MmIc0+Hy_ zp;Lz>s7qcvc#o32X6Z&=bay)x2nDs^!3u;dx2)WK)93qkp3b~|tE)aDsDZaL^PSIp zzMuWRH{ba(_OG`{Pykw6TRR#W8ZIOfiS+F3Y#|5}mMt1Y}5W9UWc09pY{w73q zG3GGzS_A$t40uFmp}=liR(v8FHLg!jPiHh>z=Q|bm}SLW7n~bcLD~cd{R-|UguQ_M zC8F`E7yxk)>n#vwqpy-!ip-E{?(R<}lX+DCnh^mjZpvp@X9SV! zk!zE+wPtrvBq|c1IB+0lIGs*kR&0SoIOp+r{0^cqKmbJWemb4H;s+akg9K-T?64Ui zJY8l@GsB@srBc_>kJ17J^&v8r2EwGwDcET<_N&`4geK5&xWm|vCw`K0a}t5?;v!>< zCxEHX=bb_H+8+pf1?330YDfO)N969({z$}VR`Z1R54Y-IqkTf`8v$m8aE`;ysrWx4 zAd`9e1+U|I(Xl`>TWgvC+qR>YWqap$4He2ryplAHDxD@Em-_~lxp^F)V=5?&F-|4j z7jzmZYpym;02Ys8r3&v!`%+iYAq?nbs5F`YEV?Rz(NwA%wmMcgKd2m<04&VO#TFG5 z&X`klsd+x!iBA9@Co9gZO&5!c2;qmg@On=csfs>4TAu)COfFQ>t>%HY+ex-|iD29;=m#FP=2mU49K zogyLFJc>)Cx6;?K?Sh1ywzs$MUtaz}6|pM<{Q`=STXeBdZYPYtg;tVz#1sjn=X(fe zA8cNjv0kTGpe$)_&n)KZA4_; tlr2;E9D;;I=8U0cd{d6&zx}U^z;9PYWN{fEZVvze002ovPDHLkV1i86vVZ^p literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..3e164a0ebfa62379c3d4392bba542b157f48a353 GIT binary patch literal 467 zcmV;^0WAKBP)Px$jY&j7R5%fJQ$0_^Fc6L7rmDo&B2dZ10(0wxw4?)U6@oFpl!ZUg50s>1q%t8P zbwHGjr6n;Xd!NJ*jmDaEiRy#Rrfk}08On*4Jx@XwG` zG^_$4uI|x^l$|wWI{`tZD-F~(lx!54X8R?IW^3IwMEa10c%Nmv3&-)RJ&;g|pWs83 zH;JwtXXKYo15Hr@T}RP!hL7Snw>{041pqM8FbwCIBnk2+0aQjz3eWRS$#1fpKs49y z+n1Ax|C%I8N_gGkR&+W?ceZ`bHk-G@CBlqQ0AiXKB`SQXeCs#fV??9{RyhNJGKsjh ztU901xh&+owM8e4WedXL0|Q4GY-52m{qDK$_&Sc`4Px&SV=@dR9FeESHDl&Kos`bAu2*3q5cwziqr+R4#cTR+aXJb4*hF8bm)?yZE%w? zu$8q6Qc+P=5TYu??tK@&%lUlg#E2Vw_ul*7_ul>R^H~J4?d^5mqgSmUNR6N(iW+Cr z>CMCN78pRlSR_gE^!hq`3E}W?_@O`ucjeM<_Z|U(*1#jrFT2u;VGw|Wks!C*`w3-5 z!2nd|`Sb~ZY&uUWR3=iO!+b!5)eFcPZ5YF_c|00@`L42t-lop7e>-vfI?zi)X8;KX zNHfH7yqo9I<2=tcH#XKjo}XVTAI*?uVrM)~KSSH^_ixCk0Z?E`L2o9lLjX`%VkpqM z-R|ma&)M-C?MCnphH>%=X?!JiNH+RzW{K;cqqP zFh4f+P68ZRlocFdf>~}*dZxZ{}=r`ozAQ2G*H)T>ew$`Nk9N1IwF95&w;H@aNw6t0N_PQl!JG@GY219 ztpwoUOTry|_E!TxU#pz}h-OK23)@lLbIg2kaBwYs2mv-50<_!7oAve81O8U@dcDTQ z#nryFZJOAs@tqR@DSmq756?Tkru_M-3TWF(Td=YcepBB`8+p$%Vj!0OoT6+to8o9N z7+l?RtV%ld+bs{(i#m7QN=APx&MoC0LR9FeUS50pdF%Y$rN)bhZVTp;C8Z4(;xK*Nb! z`5i4iaA+dIzev;rDhPJz%}rOd7| zYU|;~`u(5ZZ!Ezn5W3e%8r!h$??0N2QrjtD0883Qo@Az8I13PLdH*)u_Ut(d)OcI7X0XA9k<8B!x2yJ-EMKeNQ>*|ig z77DPZxd_NDY=be=t0)10gh-GKj9i11`rekY2zdtHD-cK-J%CX&I)q%Cn3>cDehVPVvRpFuzmqBi(nh0!UoAG(?-n&B61hlo~eWL6$np& zLlc-}ud0H7UxN}s0iZ)UY+fWAu_`H+H)*NhwWR{=X z!vYu-VEZD$#=>ZG2}XcH26Gfbkh!)l6u_t?v0#Qx9d8>Y03_O0Y4X~o5qN0dkh(MN zkHuMBHjaZkR7#8c7(JH{c!=g4ofnuBThl4F-&~0g1#o+DAta8!B&^z&@2Cu9jc2^7 zBPkpTE~HDZW0!bc1cFl(ozFrJl-7lxaY`UIc?Nl8L?ET_0f{uAvA@_Vfw$M5F(T9+oiMmM_rOyvG?(On##o5`n^$;1FwNoqMK^^n_c^7sd0DH~_FlZ+{2$KUg!s4n16l6&O>mNh i4a|7&)nVgOBK`u<#<7~O`jOE90000Px$GD$>1R5%f(QZY`$KoH#ZAv#y22t<5<3eefeQs561enXH@gh0v*cmXL>hnhct zMB$JUOFV!yh!?%xLd!0seW^Z~8pXH{&?o?{;^$`~B>_EK9SD zi_5??O;3%fCfw_M_urI?21QZa`TW2@>nsKMd?X@gIz%*xkj?nCO`>*D=N}_qY;lWK z6^wj-U_gX>K1phxAm{}KOnw%DABmv!vA_T^y7fs?BhplIiOxe=aItuO>GgKDI6V?l z9dSILKi#+(fHMI<6edY>&7%%{B0u9<-6QAcoI-0oX7Ml-w-GzZ>_U*nfS2c(m*-v@ zt0FJe2`|-yPx%R!KxbR9Fe^R!vJAK^UHQx4P2g4+KTg7J|}?vI!yxJyb7hp@kfB=x@;eg67WKoL!Rm2%plm4O^yD87qNKB8rk3OEx1npnhFQj^l;&>^!@ z5=8;U-`k1{sOSyDD}gaSpwWQu&o3d-tmMgdIG4-KlWRpLFd6^|S7ktwG3QrCtkD3j z`o~E`qrLo5G*%-E18i7@*=2AsdZtbr17{`@eI1Ng3j_RzUZ8gcz>GB-NT<`Ea4P@w zmQt$%lS-w^Y9*R+qoEo#o6T+}Gxi(5ZsUrU(E!f+-rmoBIY*6+1_bEh;=DFGIyR0b zto8#u4?fgt)i;!2JZF3bw*b!@+Q4Z&zKwNv(c^jEYh68_w=&@S`C<@U9^sCdjT6LU z(GvvSLxG9csJQ1|T__ZWPfr_P5V%5tEpp$drY2vO%jK@FS33ixQpssF8Xx-*7n&=A zLvZN~Xcu9--Fb(n;42+4L4KxQuV-4V);9`6zJh!{zlz7H)ei+lO66SFS;PMW#RNGu zDE^ir=_jY-R1Dzx{}hF$`w`P%r*F6;WyJvJ;fqMe00W9!F@U?+!T>cRR1~*j05_7G zfBgt{AOXewKxKx{=v4c8s{QsE{H#O!?)%PvGy~U4F0n&rxXWMw0000Px#@JU2LR5%f1U?2e)8=FobK{-gNiHW&CT#K=>$tySq#xOB4{S9Md(59xQB^ZJr z0iaV>0wt}GC7F;pzP{d(|Ni~og)BxRHqZx`u^RpV|9?iHpMPMLG&W9S1xkKEmqhZ# z`IU@}436juQ1~V$W^;kz;DREE&H)Bild-W`6uLO=_{_u@4RV&WwDc}XNtwIPpFhPO zhUf-0G&C@QJPi!GFZevph^`UD2imxff#JUmFj(EsoH=tIn;MuHQar$fK(t{v0|Vp! z|Nj~Gp(j6NRRr0Pq+vP%lsr)K2tl1#6ac+dj585pQBSlG0GR4KwR%9HR{#J207*qo IM6N<$f_N2tQvd(} literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_list.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_list.png new file mode 100644 index 0000000000000000000000000000000000000000..df6cd02de67c069a372e1342661652a8c9673956 GIT binary patch literal 286 zcmV+(0pb3MP)Px#*hxe|R5%f(Qtc7KAPfbsW9Sq_ox!??Lv;|H!IMs*dte_nxfn|2PW~kCgFph# z)mI3VMEwH7RuiKAlf`0dL9jDNy_E%U8wM$*E$1A;iNSmSVu2$#4}em-0)!YJJ2tjO zqGPX}Aso&b6VYk4zg2N6AzkS5Iu}Fr4ogR9uJhjYnm~DQd`un`14MK+Sq42gtt0){&T49(8_T?t=RJO_5M$2~~aNTjdU#-}JWy~$+B~QMA7BFG^`?QXH9-_QN k{;t1ffX|1*w%FhJ4RGa2%S^h7EC2ui07*qoM6N<$f~l)@dH?_b literal 0 HcmV?d00001 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_save.png b/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_save.png new file mode 100644 index 0000000000000000000000000000000000000000..6783204cf8800adc44c61a2db6df8439de8cf429 GIT binary patch literal 453 zcmV;$0XqJPP)Px$e@R3^R5%fJQ$0_^Kn%4@Bo?N2Mgq0JgS0C!@<*stB#`<+14~o&k1&^&hTlN| ziMgFvkVp?dC%&R2J*n~e`T3pCz7olrP2U{rhiRo7pbdO^QmJWuUo^#oY5%%7~2oyi27v8Dar~+{7MR0W3>i3T~HC%=8Dt^Cz z*48JTE_!4F)-Myla4|plEd3jd+AZS(tMu`I5Clnv(FLJ$+_%w4g-uXN5FB(3$G)g8 zF${K}Kqx1z`gf-Z67j jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + jt.stopEditing(); + MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); + MutilTempalteTabPane.getInstance().closeFormat(jt); + MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jt); + //再打开cache中的模板 + DesignerContext.getDesignerFrame().openTemplate(new VcsCacheFileNodeFileProxy(new FileNode(fileOfVersion, false))); + + } + + double height = editor.getPreferredSize().getHeight(); + if (table.getRowHeight(row) != height) { + table.setRowHeight(row, (int) height); + } + return editor; + } + + @Override + public Object getCellEditorValue() { + return renderAndEditor.getFileVersion(); + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java new file mode 100644 index 000000000..78e75bdf5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java @@ -0,0 +1,43 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.report.entity.VcsEntity; + +import javax.swing.JPanel; +import javax.swing.JTable; +import javax.swing.table.TableCellRenderer; +import java.awt.Component; + +import static com.fr.design.constants.UIConstants.TREE_BACKGROUND; +import static com.fr.workspace.server.vcs.common.Constants.TABLE_SELECT_BACKGROUND; + + +public class FileVersionCellRender implements TableCellRenderer { + + //第一行 + private final JPanel firstRowPanel; + //其余行 + private final FileVersionRowPanel render; + + public FileVersionCellRender(FileVersionFirstRowPanel firstRowPanel, FileVersionRowPanel render) { + this.render = render; + this.firstRowPanel = firstRowPanel; + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component editor = row == 0 ? firstRowPanel : render; + // https://stackoverflow.com/questions/3054775/jtable-strange-behavior-from-getaccessiblechild-method-resulting-in-null-point + if (value != null) { + render.update((VcsEntity) value); + } + editor.setBackground(isSelected ? TABLE_SELECT_BACKGROUND : TREE_BACKGROUND); + + double height = editor.getPreferredSize().getHeight(); + if (table.getRowHeight(row) != height) { + table.setRowHeight(row, (int) height); + } + return editor; + } + + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java new file mode 100644 index 000000000..e674f3ced --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -0,0 +1,77 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.dialog.UIDialog; +import com.fr.design.editor.editor.DateEditor; +import com.fr.design.gui.date.UIDatePicker; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; + +import javax.swing.AbstractAction; +import javax.swing.Box; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Date; + +import static com.fr.workspace.server.vcs.common.Constants.EMPTY_BORDER; +import static com.fr.workspace.server.vcs.common.Constants.EMPTY_BORDER_BOTTOM; + + +public class FileVersionDialog extends UIDialog { + private UIButton okBtn = new UIButton("确定"); + private UIButton cancelBtn = new UIButton("取消"); + + + public FileVersionDialog(Frame frame) { + super(frame); + setUndecorated(true); + JPanel panel = new JPanel(new BorderLayout()); + Box box0 = Box.createHorizontalBox(); + box0.setBorder(EMPTY_BORDER_BOTTOM); + box0.add(new UILabel("生成日期")); + box0.add(Box.createHorizontalGlue()); + box0.add(new DateEditor(new Date(), true, "生成日期", UIDatePicker.STYLE_CN_DATE1)); + Box box1 = Box.createHorizontalBox(); + box1.setBorder(EMPTY_BORDER_BOTTOM); + box1.add(new UILabel("备注关键词 ")); + box1.add(new UITextField()); + Box box2 = Box.createHorizontalBox(); + box2.add(Box.createHorizontalGlue()); + box2.setBorder(EMPTY_BORDER); + box2.add(okBtn); + box2.add(cancelBtn); + okBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FileVersionDialog.this.setVisible(false); + } + }); + cancelBtn.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + FileVersionDialog.this.setVisible(false); + } + }); + panel.add(box0, BorderLayout.NORTH); + panel.add(box1, BorderLayout.CENTER); + panel.add(box2, BorderLayout.SOUTH); + add(panel); + setSize(new Dimension(220, 100)); + centerWindow(this); + } + + private void centerWindow(Window window) { + window.setLocation(0, 95); + + } + + @Override + public void checkValid() throws Exception { + + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java new file mode 100644 index 000000000..8200f1427 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java @@ -0,0 +1,20 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.gui.ilable.UILabel; + +import javax.swing.Box; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import java.awt.BorderLayout; + + +public class FileVersionFirstRowPanel extends JPanel { + + public FileVersionFirstRowPanel() { + super(new BorderLayout()); + Box upPane = Box.createVerticalBox(); + upPane.setBorder(new EmptyBorder(5, 10, 5, 10)); + upPane.add(new UILabel("本地用户")); + add(upPane, BorderLayout.CENTER); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java new file mode 100644 index 000000000..712dcf4b1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -0,0 +1,148 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.gui.frpane.UITextPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.toolbar.VcsConfig; +import com.fr.log.FineLoggerFactory; +import com.fr.report.entity.VcsEntity; +import com.fr.stable.StringUtils; +import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; +import com.fr.workspace.server.vcs.VcsOperator; +import com.fr.workspace.server.vcs.common.Constants; + +import javax.swing.Box; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.text.BadLocationException; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.SimpleDateFormat; +import java.util.Date; + + +public class FileVersionRowPanel extends JPanel { + + private final VcsOperator vcs; + private VcsEntity fileVersion; + private UILabel versionLabel = new UILabel(); + private UILabel usernameLabel = new UILabel("", Constants.VCS_USER_PNG, SwingConstants.LEFT); + private UITextPane timeAndMsgLabel = new UITextPane(); + private UILabel timeLabel = new UILabel(); + + + @SuppressWarnings("unchecked") + public FileVersionRowPanel(final VcsOperator vcsOperator) { + this.vcs = vcsOperator; + setLayout(new BorderLayout()); + + // version + username + Box upPane = Box.createHorizontalBox(); + upPane.setBorder(Constants.EMPTY_BORDER); + upPane.add(versionLabel); + upPane.add(Box.createHorizontalGlue()); + + + // msg + timeAndMsgLabel.setBorder(Constants.EMPTY_BORDER); + timeAndMsgLabel.setOpaque(false); + timeAndMsgLabel.setBackground(new Color(0, 0, 0, 0)); + timeAndMsgLabel.setEditable(false); + + // confirm + delete + UIButton confirmBtn = new UIButton(Constants.VCS_REVERT); + confirmBtn.set4ToolbarButton(); + confirmBtn.setToolTipText(Toolkit.i18nText("Plugin-VCS_Version_Revert")); + confirmBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent evt) { + if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Plugin-VCS_Version_Revert_Confirm"), Toolkit.i18nText("Plugin-VCS_Version_Revert_Title"), + JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + try { + vcs.rollbackTo(fileVersion); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(VcsConfig.class); + context.getBean(FileVersionsPanel.class).exitVcs(fileVersion.getFilename()); + } + } + }); + UIButton deleteBtn = new UIButton(Constants.VCS_DELETE_PNG); + deleteBtn.set4ToolbarButton(); + deleteBtn.setToolTipText(Toolkit.i18nText("Plugin-VCS_Version_Delete")); + deleteBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent evt) { + if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Plugin-VCS_Version_Delete_Confirm"), Toolkit.i18nText("FR-Designer_Remove"), + JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + //TODO refactor + try { + vcs.deleteVersion(fileVersion.getFilename(), fileVersion.getVersion()); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + FileVersionTablePanel table = (FileVersionTablePanel) (FileVersionRowPanel.this.getParent()); + table.updateModel(table.getSelectedRow() - 1); + } + } + }); + UIButton editBtn = new UIButton(Constants.VCS_EDIT_PNG); + editBtn.set4ToolbarButton(); + editBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + showEditDialog(); + + } + }); + upPane.add(editBtn); + upPane.add(confirmBtn); + upPane.add(deleteBtn); + Box downPane = Box.createHorizontalBox(); + downPane.add(usernameLabel); + downPane.setBorder(Constants.EMPTY_BORDER_BOTTOM); + downPane.add(Box.createHorizontalGlue()); + downPane.add(timeLabel); + add(upPane, BorderLayout.NORTH); + add(timeAndMsgLabel, BorderLayout.CENTER); + add(downPane, BorderLayout.SOUTH); + } + + private void showEditDialog() { + + } + + + public void update(final VcsEntity fileVersion) { + this.fileVersion = fileVersion; + versionLabel.setText(String.format("V.%s", fileVersion.getVersion())); + usernameLabel.setText(fileVersion.getUsername()); + timeAndMsgLabel.setText(StringUtils.EMPTY); + timeLabel.setText(timeStr(fileVersion.getTime())); + try { + StyledDocument doc = timeAndMsgLabel.getStyledDocument(); + Style style = timeAndMsgLabel.getLogicalStyle(); + StyleConstants.setForeground(style, Color.BLACK); + doc.insertString(doc.getLength(), " " + fileVersion.getCommitMsg(), style); + } catch (BadLocationException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + + private String timeStr(Date time) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return simpleDateFormat.format(time); + } + + public VcsEntity getFileVersion() { + return fileVersion; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java new file mode 100644 index 000000000..45b52b9ba --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java @@ -0,0 +1,86 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.mainframe.DesignerFrameFileDealerPane; +import com.fr.log.FineLoggerFactory; +import com.fr.report.entity.VcsEntity; +import com.fr.workspace.server.vcs.VcsOperator; + +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import java.util.ArrayList; +import java.util.List; + + +public class FileVersionTablePanel extends JTable { + + private final VcsOperator vcs; + + public FileVersionTablePanel(VcsOperator vcs, TableCellEditor tableCellEditor, TableCellRenderer tableCellRenderer) { + super(new Model(new ArrayList())); + this.vcs = vcs; + setDefaultRenderer(VcsEntity.class, tableCellRenderer); + setDefaultEditor(VcsEntity.class, tableCellEditor); + setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + setTableHeader(null); + setRowHeight(30); + } + + public void updateModel(int selectedRow) { + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + //TODO path "/" + List vcsEntities = null; + try { + vcsEntities = vcs.getVersions(path.replaceFirst("/", "")); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + if (selectedRow > vcsEntities.size()) { + selectedRow = vcsEntities.size(); + } + setModel(new Model(vcsEntities)); + editCellAt(selectedRow, 0); + setRowSelectionInterval(selectedRow, selectedRow); + } + + private static class Model extends AbstractTableModel { + private List vcsEntities; + + + Model(List vcsEntities) { + this.vcsEntities = vcsEntities; + } + + public Class getColumnClass(int columnIndex) { + return VcsEntity.class; + } + + public int getColumnCount() { + return 1; + } + + public int getRowCount() { + return (vcsEntities == null) ? 0 : vcsEntities.size() + 1; + } + + public Object getValueAt(int rowIndex, int columnIndex) { + if (rowIndex == 0) { + return null; + } + return (vcsEntities == null) ? null : vcsEntities.get(rowIndex - 1); + } + + public boolean isCellEditable(int columnIndex, int rowIndex) { + return true; + } + + + public List getVcsEntities() { + return vcsEntities; + } + + + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java new file mode 100644 index 000000000..a04ac705a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -0,0 +1,187 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.base.GraphHelper; +import com.fr.design.base.mode.DesignModeContext; +import com.fr.design.dialog.BasicPane; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.ToolBarNewTemplatePane; +import com.fr.design.mainframe.WestRegionContainerPane; +import com.fr.design.menu.ToolBarDef; +import com.fr.file.FileNodeFILE; +import com.fr.file.filetree.FileNode; +import com.fr.stable.StableUtils; +import com.fr.stable.project.ProjectConstants; +import com.fr.workspace.server.vcs.common.Constants; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + + +public class FileVersionsPanel extends BasicPane { + private static final String ELLIPSIS = "..."; + + private final FileVersionTablePanel fileVersionsTablePane; + private UILabel titleLabel; + private String templatePath; + private UIButton filterBtn; + private FileVersionDialog versionDialog; + + + public FileVersionsPanel(FileVersionTablePanel fileVersionTablePanel) { + this.fileVersionsTablePane = fileVersionTablePanel; + initComponents(); + } + + private void initComponents() { + setLayout(new BorderLayout()); + UIToolbar toolbar = ToolBarDef.createJToolBar(); + toolbar.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); + toolbar.setBorderPainted(true); + Box upPane = Box.createHorizontalBox(); + UIButton backBtn = new UIButton(Constants.VCS_BACK_PNG); + backBtn.set4ToolbarButton(); + backBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + exitVcs(templatePath); + } + }); + toolbar.add(backBtn); + filterBtn = new UIButton(Constants.VCS_FILTER_PNG); + filterBtn.set4ToolbarButton(); + filterBtn.setHorizontalAlignment(SwingConstants.RIGHT); + filterBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + showFilterPane(); + } + }); + titleLabel = new UILabel() { + @Override + public Dimension getMaximumSize() { + return new Dimension(257, 21); + } + }; + upPane.add(titleLabel); + upPane.add(Box.createHorizontalGlue()); + upPane.add(filterBtn); + toolbar.add(Box.createHorizontalGlue()); + toolbar.add(upPane); + add(toolbar, BorderLayout.NORTH); + + UIScrollPane jScrollPane = new UIScrollPane(fileVersionsTablePane); + add(jScrollPane, BorderLayout.CENTER); + } + + private void showFilterPane() { + versionDialog = new FileVersionDialog(DesignerContext.getDesignerFrame()); + versionDialog.setVisible(true); + } + + + /** + * 退出版本管理,并且打开模板 + * + * @param path 被管理的模板的名字 + */ + public void exitVcs(String path) { + + // 关闭当前打开的版本 + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); + MutilTempalteTabPane.getInstance().closeFormat(jt); + MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jt); + + udpateDesignerFrame(true); + + final String selectedFilePath = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path); + DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(selectedFilePath, false))); + } + + private void refreshVersionTablePane() { + templatePath = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + String[] paths = StableUtils.pathSplit(templatePath); + String filename = paths[paths.length - 1]; + int width = fileVersionsTablePane.getWidth() - 40; + if (getStringWidth(filename) > width) { + filename = getEllipsisName(filename, width); + } + titleLabel.setText(filename); + fileVersionsTablePane.updateModel(1); + } + + public void showFileVersionsPane() { + udpateDesignerFrame(false); + refreshVersionTablePane(); + } + + @Override + protected String title4PopupWindow() { + return null; + } + + + private void udpateDesignerFrame(boolean isExit) { + // 左上侧面板 + WestRegionContainerPane.getInstance().replaceUpPane( + isExit ? DesignerFrameFileDealerPane.getInstance() : this); + + DesignModeContext.switchTo(isExit ? com.fr.design.base.mode.DesignerMode.NORMAL : com.fr.design.base.mode.DesignerMode.VCS); + // MutilTempalteTabPane & NewTemplatePane 是否可点 + ToolBarNewTemplatePane.getInstance().setButtonGray(!isExit); + + JTemplate currentEditingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (currentEditingTemplate.isJWorkBook()) { + DesignerContext.getDesignerFrame().resetToolkitByPlus(currentEditingTemplate); + } + } + + + private int getStringWidth(String str) { + return GraphHelper.getFontMetrics(this.getFont()).stringWidth(str); + } + + + private String getEllipsisName(String name, int maxStringlength) { + + //若是名字长度大于能显示的长度,那能显示的文字的最大长度还要减去省略号的最大长度 +// int maxellipsislength = maxStringlength - ELLIPSIS.length(); + int ellipsisWidth = getStringWidth(ELLIPSIS); + int leftkeyPoint = 0; + int rightKeyPoint = name.length() - 1; + int leftStrWidth = 0; + int rightStrWidth = 0; + while (leftStrWidth + rightStrWidth + ellipsisWidth < maxStringlength) { + if (leftStrWidth <= rightStrWidth) { + leftkeyPoint++; + } else { + rightKeyPoint--; + } + leftStrWidth = getStringWidth(name.substring(0, leftkeyPoint)); + rightStrWidth = getStringWidth(name.substring(rightKeyPoint)); + + if (leftStrWidth + rightStrWidth + ellipsisWidth > maxStringlength) { + if (leftStrWidth <= rightStrWidth) { + rightKeyPoint++; + } + break; + } + } + + return name.substring(0, leftkeyPoint) + ELLIPSIS + name.substring(rightKeyPoint); + } +} diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index d262359dd..b66ba090c 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -12,6 +12,7 @@ import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; import com.fr.design.constants.UIConstants; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.fun.MenuHandler; @@ -30,6 +31,9 @@ import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.mainframe.toolbar.VcsConfig; +import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFileProxy; +import com.fr.design.mainframe.vcs.ui.FileVersionTablePanel; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -49,13 +53,17 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.LifecycleFatalError; +import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLTools; import com.fr.start.fx.SplashFx; import com.fr.start.jni.SplashMac; import com.fr.start.module.StartupArgs; import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; +import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; +import com.fr.workspace.server.vcs.common.Constants; import javax.swing.JComponent; import javax.swing.JOptionPane; @@ -107,7 +115,6 @@ public class Designer extends BaseDesigner { System.exit(0); return; } - RestartHelper.deleteRecordFilesWhenStart(); preloadResource(); @@ -259,7 +266,7 @@ public class Designer extends BaseDesigner { */ @Override public UIButton[] createUp() { - return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; + return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton(), }; } @@ -274,11 +281,52 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); + String fileName = getEditingFilename(); + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(VcsConfig.class); + VcsOperator vcsOperator = context.getBean(VcsOperator.class); + int latestFileVersion = 0; + try { + latestFileVersion = vcsOperator.getLatestFileVersion(fileName); + + } catch (Exception e1) { + FineLoggerFactory.getLogger().error(e1.getMessage()); + } + + try { + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFileProxy) { + vcsOperator.saveVersionFromCache(Constants.CURRENT_USERSNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + context.getBean(FileVersionTablePanel.class).updateModel(1); + } else { + vcsOperator.saveVersion(Constants.CURRENT_USERSNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + } + } catch (Exception e1) { + FineLoggerFactory.getLogger().error(e1.getMessage()); + } + + + + } }); return saveButton; } + public static String getEditingFilename() { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + String editingFilePath = jt.getEditingFILE().getPath(); + //TODO 如果是cache里的文件,也会走到这里,这里是找到reportlets去掉的。万一刚好cache/reportlets会出问题 + if (editingFilePath.startsWith(ProjectConstants.REPORTLETS_NAME)) { + editingFilePath = editingFilePath.replaceFirst(ProjectConstants.REPORTLETS_NAME, StringUtils.EMPTY); + } else if (editingFilePath.startsWith(Constants.VCS_CACHE_DIR)) { + editingFilePath = editingFilePath.replaceFirst(Constants.VCS_CACHE_DIR, StringUtils.EMPTY); + } + //TODO refactor 考虑直接用reportlets/xxx/x/x/x/x/x// or /xx/x/x/x/x/x + if (editingFilePath.startsWith("/")) { + editingFilePath = editingFilePath.substring(1); + } + return editingFilePath; + } + private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); From 154ef0b8ad75dd5b97418dcc1f4043b6cbf2e07a Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 23 Apr 2019 09:39:27 +0800 Subject: [PATCH 064/196] =?UTF-8?q?=E8=B7=9Fju=E8=AE=A8=E8=AE=BA=EF=BC=8CO?= =?UTF-8?q?EM=E8=BF=99=E4=B8=AA=E8=BF=98=E6=98=AFStableFactory=E6=AF=94?= =?UTF-8?q?=E8=BE=83=E5=90=88=E9=80=82=E4=BA=8C=E5=BC=80.=E5=8F=A6?= =?UTF-8?q?=E5=A4=96=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8D=95=E8=8E=B7=EF=BC=8C=E8=A7=84=E9=81=BF=E5=BC=80=E6=94=BE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AD=98=E5=9C=A8=E7=9A=84=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/fun/OemProcessor.java | 5 ++++ .../fr/design/mainframe/DesignerFrame.java | 13 ++++++--- .../mainframe/toolbar/ToolBarMenuDock.java | 16 ++++++++--- .../main/java/com/fr/start/OemActivator.java | 27 ------------------- .../main/java/com/fr/start/OemHandler.java | 10 +++---- .../fr/start/module/PreStartActivator.java | 10 +++++-- 6 files changed, 37 insertions(+), 44 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/start/OemActivator.java diff --git a/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java index 01e53c9c5..44acc1190 100644 --- a/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java +++ b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java @@ -10,8 +10,11 @@ import java.util.List; * 设计器Oem接口 */ public interface OemProcessor { + public static final String MARK_STRING = "OemProcessor"; + /** * 启动动画,如果不替换则返回null + * * @return */ SplashStrategy createSplashStrategy(); @@ -19,12 +22,14 @@ public interface OemProcessor { /** * 替换标题图标--DesignerFrame.initTitleIcon * 如果不替换则返回null + * * @return */ List createTitleIcon(); /** * 处理设计器菜单(增删改) + * * @param menuDefs 已加载的菜单 * @return 新的菜单数组 */ diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 397fd312a..04dab52b5 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -461,10 +461,15 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta try { @SuppressWarnings("unchecked") OemProcessor oemProcessor = OemHandler.findOem(); - List image; - if (oemProcessor != null && oemProcessor.createTitleIcon() != null) { - image = oemProcessor.createTitleIcon(); - } else { + List image = null; + if (oemProcessor != null) { + try { + image = oemProcessor.createTitleIcon(); + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + if (image == null) { image = ICODecoder.read(DesignerFrame.class .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 4459bd554..2577b6bd0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -57,6 +57,7 @@ import com.fr.design.remote.action.RemoteDesignAuthManagerAction; import com.fr.design.utils.ThemeUtils; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginRuntime; import com.fr.plugin.manage.PluginFilter; @@ -202,11 +203,18 @@ public abstract class ToolBarMenuDock { }; this.menus = menus(plus); - OemProcessor oemProcessor = OemHandler.findOem(); - if (oemProcessor != null) { - this.menus = oemProcessor.dealWithMenuDef(this.menus); + try { + OemProcessor oemProcessor = OemHandler.findOem(); + if (oemProcessor != null) { + this.menus = oemProcessor.dealWithMenuDef(this.menus); + if (this.menus == null) { + this.menus = menus(plus); + } + } + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + this.menus = menus(plus); } - for (int i = 0; i < menus.length; i++) { menus[i].setHasRecMenu(true); UIMenu subMenu = menus[i].createJMenu(); diff --git a/designer-base/src/main/java/com/fr/start/OemActivator.java b/designer-base/src/main/java/com/fr/start/OemActivator.java deleted file mode 100644 index 6e3bba603..000000000 --- a/designer-base/src/main/java/com/fr/start/OemActivator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.fr.start; - -import com.fr.design.fun.OemProcessor; -import com.fr.module.Activator; -import com.fr.module.extension.Prepare; - -/** - * 设计器OEM注册 - */ -public class OemActivator extends Activator implements Prepare { - - @Override - public void start() { - } - - @Override - public void stop() { - - } - - @Override - public void prepare() { - // 加入Oem - setSingleton(OemProcessor.class, new OemImpl()); - } - -} diff --git a/designer-base/src/main/java/com/fr/start/OemHandler.java b/designer-base/src/main/java/com/fr/start/OemHandler.java index ff56bc173..b127e07f4 100644 --- a/designer-base/src/main/java/com/fr/start/OemHandler.java +++ b/designer-base/src/main/java/com/fr/start/OemHandler.java @@ -1,18 +1,14 @@ package com.fr.start; import com.fr.design.fun.OemProcessor; -import com.fr.module.Module; -import com.fr.module.ModuleContext; +import com.fr.stable.bridge.StableFactory; /** * OEM处理中心 */ public class OemHandler { + public static OemProcessor findOem() { - Module oemModule = ModuleContext.getModule(OemActivator.class); - if (oemModule != null) { - return oemModule.getSingleton(OemProcessor.class); - } - return null; + return StableFactory.getMarkedInstanceObjectFromClass(OemProcessor.MARK_STRING, OemProcessor.class); } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index 9f6f75122..3c255c936 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -15,6 +15,7 @@ import com.fr.stable.BuildContext; import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; +import com.fr.start.OemHandler; import com.fr.start.SplashContext; import com.fr.start.SplashStrategy; import com.fr.start.fx.SplashFx; @@ -125,9 +126,14 @@ public class PreStartActivator extends Activator { } private SplashStrategy createSplash() { - OemProcessor oemProcessor = getSingleton(OemProcessor.class); + OemProcessor oemProcessor = OemHandler.findOem(); if (oemProcessor != null) { - SplashStrategy splashStrategy = oemProcessor.createSplashStrategy(); + SplashStrategy splashStrategy = null; + try { + splashStrategy = oemProcessor.createSplashStrategy(); + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } if (splashStrategy != null) { return splashStrategy; } From fb02413bf73e6342113b49da3b2af052a5126bca Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 23 Apr 2019 09:50:02 +0800 Subject: [PATCH 065/196] rt --- designer-base/src/main/java/com/fr/start/OemImpl.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/start/OemImpl.java diff --git a/designer-base/src/main/java/com/fr/start/OemImpl.java b/designer-base/src/main/java/com/fr/start/OemImpl.java deleted file mode 100644 index 68bf767c8..000000000 --- a/designer-base/src/main/java/com/fr/start/OemImpl.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.fr.start; - -import com.fr.design.fun.impl.AbstractOemProcessor; - -public class OemImpl extends AbstractOemProcessor{ - -} \ No newline at end of file From a74462497d009febbba793f947a1e1e1a46ec1df Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 23 Apr 2019 12:12:21 +0800 Subject: [PATCH 066/196] =?UTF-8?q?REPORT-16391=20=E3=80=9010.03=E5=9F=8B?= =?UTF-8?q?=E7=82=B9-=E6=A8=A1=E6=9D=BF=E3=80=91=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E7=9A=84=E6=A8=A1=E6=9D=BF=E5=8F=A6=E5=AD=98?= =?UTF-8?q?=E4=B8=BA=EF=BC=8C=E4=B8=8D=E4=BC=9A=E6=9C=89originid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/template/info/TemplateInfo.java | 4 +++ .../template/info/TemplateInfoCollector.java | 5 +--- .../info/TemplateInfoCollectorTest.java | 28 ++++++++++++++++++- .../design/mainframe/template/info/tpl.info | 4 +-- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index 4c45ce823..ffd9aaf3b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -102,6 +102,10 @@ class TemplateInfo implements XMLReadable, XMLWriter { return templateID; } + String getOriginID() { + return originID; + } + int getTimeConsume() { return (int)consumingMap.get(ATTR_TIME_CONSUME); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 30bfb5e1d..c16c6b627 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -75,11 +75,8 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { TemplateInfo templateInfo; if (this.contains(templateID)) { templateInfo = templateInfoMap.get(templateID); - } else if (!this.contains(originID)) { - templateInfo = TemplateInfo.newInstance(templateID); - templateInfoMap.put(templateID, templateInfo); } else { - int originTime = templateInfoMap.get(originID).getTimeConsume(); + int originTime = this.contains(originID) ? templateInfoMap.get(originID).getTimeConsume() : 0; templateInfo = TemplateInfo.newInstance(templateID, originID, originTime); templateInfoMap.put(templateID, templateInfo); } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index 7b02f4bba..e83a523fc 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -66,9 +66,12 @@ public class TemplateInfoCollectorTest { @Test public void testReadXML() { + assertEquals(",,", DesignerOpenHistory.getInstance().toString()); + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - assertEquals("2019-04-18", Reflect.on(collector).field("designerOpenDate").get()); assertEquals(7, ((Map) Reflect.on(collector).field("templateInfoMap").get()).size()); + + assertEquals("2019-04-08,2019-04-03,2019-03-29", DesignerOpenHistory.getInstance().toString()); } @Test @@ -151,6 +154,29 @@ public class TemplateInfoCollectorTest { assertEquals(129, consumingMap.get("originTime")); } + @Test + public void testCollectInfoWhenSaveAsWithNoTrackOriginID() throws Exception { + setUpMockForNewInstance(); + + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + + String templateID = "423238d4-5223-22vj-vlsj-42jc49245iw3"; + String originID = "3kha8jcs-31xw-42f5-h2ww-2ee84935312z"; + int timeConsume = 200; + + collector.collectInfo(templateID, originID, mockProcessInfo, timeConsume); + + TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + assertEquals(templateID, templateInfo.getTemplateID()); + assertEquals(originID, templateInfo.getOriginID()); + + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + assertEquals(templateID, consumingMap.get("templateID")); + assertEquals(originID, consumingMap.get("originID")); + assertEquals(200, consumingMap.get("time_consume")); + assertEquals(0, consumingMap.get("originTime")); + } + @Test public void testAddIdleDateCount() { String templateID = "16a988ce-8529-42f5-b17c-2ee849355071"; diff --git a/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info b/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info index 39bec0006..eae77630f 100644 --- a/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info +++ b/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info @@ -1,7 +1,7 @@ - - + + From 86d7b2b264f0c65c433dc4ded8b6fca8dd57dfbd Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 12:15:35 +0800 Subject: [PATCH 067/196] =?UTF-8?q?REPORT-14835=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BC=98=E5=8C=96=E5=8F=8A?= =?UTF-8?q?=E5=86=85=E7=BD=AE=20=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/toolbar/VcsConfig.java | 74 ---------- .../mainframe/vcs/common/Constants.java | 47 +++++++ ...leProxy.java => VcsCacheFileNodeFile.java} | 6 +- .../vcs/ui/EditFileVersionDialog.java | 131 ++++++++++++++++++ ...nTablePanel.java => FileVersionTable.java} | 1 - 5 files changed, 180 insertions(+), 79 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java rename designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/{VcsCacheFileNodeFileProxy.java => VcsCacheFileNodeFile.java} (95%) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java rename designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/{FileVersionTablePanel.java => FileVersionTable.java} (99%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java deleted file mode 100644 index 8364f546f..000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsConfig.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.fr.design.mainframe.toolbar; - -import com.fr.design.mainframe.vcs.ui.FileVersionCellEditor; -import com.fr.design.mainframe.vcs.ui.FileVersionCellRender; -import com.fr.design.mainframe.vcs.ui.FileVersionFirstRowPanel; -import com.fr.design.mainframe.vcs.ui.FileVersionRowPanel; -import com.fr.design.mainframe.vcs.ui.FileVersionTablePanel; -import com.fr.design.mainframe.vcs.ui.FileVersionsPanel; -import com.fr.third.javax.inject.Singleton; -import com.fr.third.springframework.context.annotation.Bean; -import com.fr.third.springframework.context.annotation.ComponentScan; -import com.fr.third.springframework.context.annotation.Configuration; -import com.fr.workspace.WorkContext; -import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.workspace.server.vcs.VcsOperatorImpl; -import com.fr.workspace.server.vcs.filesystem.VcsFileSystem; -import com.fr.workspace.server.vcs.git.FineGit; - - -/** - * Created by XiaXiang on 2019/4/16. - */ -@Configuration -@ComponentScan({"com.fr.workspace.server.vcs", "com.fr.design.mainframe.vcs"}) -public class VcsConfig { - @Bean - @Singleton - public FileVersionsPanel fileVersionsPanel() { - return new FileVersionsPanel(fileVersionTablePanel()); - } - - @Bean - @Singleton - public FileVersionTablePanel fileVersionTablePanel() { - return new FileVersionTablePanel(vcsOperator(), fileVersionCellEditor(), fileVersionCellRender()); - } - - @Bean - @Singleton - public FileVersionCellEditor fileVersionCellEditor() { - return new FileVersionCellEditor(fileVersionFirstRowPanel(), fileVersionRowPanel(), vcsOperator()); - } - - @Bean - @Singleton - public FileVersionFirstRowPanel fileVersionFirstRowPanel() { - return new FileVersionFirstRowPanel(); - } - - @Bean - public FileVersionRowPanel fileVersionRowPanel() { - return new FileVersionRowPanel(vcsOperator()); - } - - @Bean - @Singleton - public FileVersionCellRender fileVersionCellRender() { - return new FileVersionCellRender(fileVersionFirstRowPanel(), fileVersionRowPanel()); - } - - @Bean - @Singleton - public VcsOperator vcsOperator() { - return new VcsOperatorImpl(vcsFileSystem(), new FineGit(vcsFileSystem().getVcsHistoryPath())); - } - - @Bean - @Singleton - public VcsFileSystem vcsFileSystem() { - return new VcsFileSystem(WorkContext.getCurrent()); - } - - -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java new file mode 100644 index 000000000..de5f54d55 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java @@ -0,0 +1,47 @@ +package com.fr.workspace.server.vcs.common; + +import com.fr.base.BaseUtils; +import com.fr.locale.InterProviderFactory; +import com.fr.workspace.WorkContext; + +import javax.swing.Icon; +import javax.swing.border.EmptyBorder; +import java.awt.Color; + +import static com.fr.stable.StableUtils.pathJoin; + + +public class Constants { + + public final static String VCS_DIR = "vcs"; + + // 如果用其他方式实现vcs,未必需要这个cache + //TODO 要不要放到其他地方 + public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); + + public final static String CURRENT_USERSNAME = WorkContext.getCurrent().isLocal() + ? InterProviderFactory.getProvider().getLocText("本地用户") + : WorkContext.getCurrent().getConnection().getUserName(); + + public final static Color TABLE_SELECT_BACKGROUND = new Color(0xD8F2FD); + + public final static Color COPY_VERSION_BTN_COLOR = new Color(0x419BF9); + + public final static Color DELETE_VERSION_BTN_COLOR = new Color(0xEB1D1F); + + public final static EmptyBorder EMPTY_BORDER = new EmptyBorder(5, 10, 0, 10); + + public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); + + + public final static Icon VCS_LIST_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_list.png"); + public final static Icon VCS_BACK_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_back.png"); + public final static Icon VCS_SAVE_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_save.png"); + public final static Icon VCS_FILTER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_filter@1x.png"); + public final static Icon VCS_EDIT_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_edit.png"); + public final static Icon VCS_DELETE_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_delete.png"); + public final static Icon VCS_USER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_user@1x.png"); + public final static Icon VCS_REVERT = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_revert.png"); + + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFileProxy.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java similarity index 95% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFileProxy.java rename to designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java index d2665cff4..2d59a4ceb 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFileProxy.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.vcs.proxy; import com.fr.base.io.XMLEncryptUtils; +import com.fr.design.mainframe.vcs.common.Constants; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; @@ -8,14 +9,11 @@ import com.fr.stable.StableUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.resource.WorkResource; import com.fr.workspace.resource.WorkResourceOutputStream; -import com.fr.workspace.server.vcs.common.Constants; import java.io.InputStream; import java.io.OutputStream; -/** - * Created by hzzz on 2017/12/21. - */ + public class VcsCacheFileNodeFileProxy extends FileNodeFILE { private final FileNode node; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java new file mode 100644 index 000000000..b05d2ad9d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -0,0 +1,131 @@ +package com.fr.plugin.vcs.ui; + +import com.fr.design.dialog.UIDialog; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextarea.UITextArea; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; +import com.fr.plugin.vcs.Vcs; +import com.fr.plugin.vcs.common.proxy.VcsCacheFileNodeFileProxy; +import com.fr.stable.StringUtils; +import com.fr.third.guava.base.Preconditions; +import com.google.inject.Inject; + +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.FlowLayout; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import static com.fr.plugin.vcs.common.CommonUtils.editingFilename; +import static com.fr.plugin.vcs.common.Constants.CURRENT_USERSNAME; + +/** + * 保存保本时候弹出的对话框,输入commit msg,点确定保存版本 + * Created by hzzz on 2017/12/11. + */ +public class SaveFileVersionDialog extends UIDialog { + + private final UITextArea msgTestArea = new UITextArea(); + private final UILabel versionLabel = new UILabel(); + private Vcs vcs; + private FileVersionTablePanel fileVersionTablePanel; + + @Inject + public SaveFileVersionDialog(FileVersionTablePanel fileVersionTablePanel, Vcs vcs) { + this(DesignerContext.getDesignerFrame()); + this.vcs = Preconditions.checkNotNull(vcs, "vcs is null"); + this.fileVersionTablePanel = Preconditions.checkNotNull(fileVersionTablePanel, "fileVersionTablePanel is null"); + } + + private SaveFileVersionDialog(Frame parent) { + super(parent); + + initComponents(); + setModal(true); + setTitle(Inter.getLocText("Plugin-VCS_Save_Version")); + setSize(300, 220); + setResizable(false); + GUICoreUtils.centerWindow(this); + + } + + private void initComponents() { + + JPanel fontPane = new JPanel(new BorderLayout()); + fontPane.add(new UILabel(" " + Inter.getLocText("Plugin-VCS_Version_Message") + ":"), BorderLayout.NORTH); + + msgTestArea.setBorder(null); + JScrollPane jScrollPane = new UIScrollPane(msgTestArea); + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(" " + Inter.getLocText("Plugin-VCS_Version_Number") + ":"), versionLabel}, + new Component[]{fontPane, jScrollPane} + }; + double[] rowSizes = new double[]{25, 100}; + double[] columnSizes = new double[]{70, 200}; + + add(TableLayoutHelper.createTableLayoutPane(components, rowSizes, columnSizes), BorderLayout.CENTER); + + JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + add(buttonPane, BorderLayout.SOUTH); + + UIButton ok = new UIButton(Inter.getLocText("OK")); + UIButton cancel = new UIButton(Inter.getLocText("Cancel")); + + buttonPane.add(ok); + buttonPane.add(cancel); + + ok.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + jt.stopEditing(); + jt.saveTemplate(); + String filename = editingFilename(); + String versionLabelText = versionLabel.getText(); + // V.3 -> 3 + String version = versionLabelText.substring(2); + //TODO refactor + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFileProxy) { + vcs.saveVersionFromCache(CURRENT_USERSNAME, filename, msgTestArea.getText(), Integer.parseInt(version)); + fileVersionTablePanel.updateModel(1); + } else { + vcs.saveVersion(CURRENT_USERSNAME, filename, msgTestArea.getText(), Integer.parseInt(version)); + } + jt.requestFocus(); + doOK(); + } + }); + + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + doCancel(); + } + }); + } + + private void refresh() { + int latestFileVersion = vcs.getLatestFileVersion(editingFilename()); + versionLabel.setText("V." + String.valueOf(latestFileVersion + 1)); + msgTestArea.setText(StringUtils.EMPTY); + } + + public void showMsgInputDialog() { + refresh(); + setVisible(true); + } + + @Override + public void checkValid() throws Exception { + + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java similarity index 99% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java rename to designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java index 45b52b9ba..a833edc73 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTablePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java @@ -30,7 +30,6 @@ public class FileVersionTablePanel extends JTable { public void updateModel(int selectedRow) { String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - //TODO path "/" List vcsEntities = null; try { vcsEntities = vcs.getVersions(path.replaceFirst("/", "")); From c446292250e212e8d816d47e7f038a8d48735d1d Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 12:17:51 +0800 Subject: [PATCH 068/196] =?UTF-8?q?REPORT-14835=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BC=98=E5=8C=96=E5=8F=8A?= =?UTF-8?q?=E5=86=85=E7=BD=AE=20=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 36 +++++++++ .../design/actions/file/PreferencePane.java | 50 ++++++++++++ .../DesignerFrameFileDealerPane.java | 10 +-- .../design/mainframe/toolbar/VcsContext.java | 17 ---- .../mainframe/vcs/common/Constants.java | 16 +--- .../vcs/proxy/VcsCacheFileNodeFile.java | 4 +- .../vcs/ui/EditFileVersionDialog.java | 79 ++++++------------- .../vcs/ui/FileVersionCellEditor.java | 23 +++--- .../vcs/ui/FileVersionCellRender.java | 8 +- .../mainframe/vcs/ui/FileVersionDialog.java | 20 ++++- .../vcs/ui/FileVersionFirstRowPanel.java | 3 +- .../mainframe/vcs/ui/FileVersionRowPanel.java | 49 ++++++------ .../mainframe/vcs/ui/FileVersionTable.java | 48 ++++++----- .../mainframe/vcs/ui/FileVersionsPanel.java | 40 +++++++--- .../src/main/java/com/fr/start/Designer.java | 28 +++---- 15 files changed, 241 insertions(+), 190 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 1fb6a94a8..362831325 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -130,6 +130,11 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private int westRegionContainerWidth = 240; private String encryptionKey; private String jdkHome; + private boolean vcsEnable; + private boolean saveCommit; + private int saveInterval; + + //上一次登录弹窗的时间, 为了控制一天只弹一次窗口 private String lastShowBBSTime; @@ -1341,6 +1346,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } + private void readJettyPort(XMLableReader reader) { String tmpVal; if ((tmpVal = reader.getElementValue()) != null) { @@ -1601,6 +1607,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setDragPermited(reader.getAttrAsBoolean("isDragPermited", false)); this.setUndoLimit(reader.getAttrAsInt("undoLimit", 5)); this.setDefaultStringToFormula(reader.getAttrAsBoolean("defaultStringToFormula", false)); + this.setVcsEnable(reader.getAttrAsBoolean("supportVcs", false)); + this.setSaveCommit(reader.getAttrAsBoolean("saveCommit", false)); + this.setSaveInterval(reader.getAttrAsInt("saveInterval", 60)); if ((tmpVal = reader.getAttrAsString("gridLineColor", null)) != null) { this.setGridLineColor(new Color(Integer.parseInt(tmpVal))); } @@ -1936,6 +1945,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .attr("verticalScrollBarVisible", this.isVerticalScrollBarVisible()) .attr("horizontalScrollBarVisible", this.isHorizontalScrollBarVisible()) .attr("supportCellEditorDef", this.isSupportCellEditorDef()) + .attr("supportVcs", this.isVcsEnable()) + .attr("saveInterval", this.getSaveInterval()) + .attr("saveCommit", this.isSaveCommit()) .attr("isDragPermited", this.isDragPermited()) .attr("gridLineColor", this.getGridLineColor().getRGB()) .attr("paginationLineColor", this.getPaginationLineColor().getRGB()) @@ -1946,4 +1958,28 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private void writeDesignerPushUpdateAttr(XMLPrintWriter writer) { this.designerPushUpdateConfigManager.writeXML(writer); } + + public boolean isVcsEnable() { + return vcsEnable; + } + + public void setVcsEnable(boolean vcsEnable) { + this.vcsEnable = vcsEnable; + } + + public boolean isSaveCommit() { + return saveCommit; + } + + public void setSaveCommit(boolean saveCommit) { + this.saveCommit = saveCommit; + } + + public int getSaveInterval() { + return saveInterval; + } + + public void setSaveInterval(int saveInterval) { + this.saveInterval = saveInterval; + } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index aa679de9b..5bead95da 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -1,5 +1,6 @@ package com.fr.design.actions.file; +import com.apple.laf.AquaProgressBarUI; import com.fr.base.BaseUtils; import com.fr.config.Configuration; import com.fr.design.DesignerEnvManager; @@ -41,6 +42,8 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; @@ -135,6 +138,12 @@ public class PreferencePane extends BasicPane { private UICheckBox joinProductImproveCheckBox; private UICheckBox autoPushUpdateCheckBox; + private UICheckBox vcsEnableCheckBox; + private UICheckBox saveCommitCheckBox; + private IntegerEditor saveIntervalEditor; + + + public PreferencePane() { this.initComponents(); } @@ -155,6 +164,7 @@ public class PreferencePane extends BasicPane { createEditPane(generalPane); createGuiOfGridPane(generalPane); createColorSettingPane(generalPane); + createVcsSettingPane(generalPane); // ConfPane JPanel confLocationPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane(); @@ -193,6 +203,36 @@ public class PreferencePane extends BasicPane { advancePane.add(spaceUpPane); } + private void createVcsSettingPane(JPanel generalPane) { + JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("版本控制")); + generalPane.add(vcsPane); + vcsEnableCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("保存自动生成版本")); + saveCommitCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("备注版本不会自动清理")); + saveIntervalEditor = new IntegerEditor(30); + JPanel memorySpace = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); + UILabel label1 = new UILabel(" 每 "); + UILabel label2 = new UILabel(" 分钟每个用户同个模板最多保留一个模板"); + memorySpace.add(label1); + memorySpace.add(saveIntervalEditor); + memorySpace.add(label2); + vcsEnableCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + boolean selected = vcsEnableCheckBox.isSelected(); + if (selected) { + saveCommitCheckBox.setEnabled(true); + saveIntervalEditor.setEnabled(true); + } else { + saveCommitCheckBox.setEnabled(false); + saveIntervalEditor.setEnabled(false); + } + } + }); + vcsPane.add(vcsEnableCheckBox); + vcsPane.add(memorySpace); + vcsPane.add(saveCommitCheckBox); + } + private void createFunctionPane(JPanel generalPane) { JPanel functionPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Function")); generalPane.add(functionPane); @@ -542,6 +582,13 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setEnabled(false); defaultStringToFormulaBox.setSelected(false); } + vcsEnableCheckBox.setSelected(designerEnvManager.isVcsEnable()); + if (!vcsEnableCheckBox.isSelected()) { + saveIntervalEditor.setEnabled(false); + saveCommitCheckBox.setEnabled(false); + } + saveIntervalEditor.setValue(designerEnvManager.getSaveInterval()); + saveCommitCheckBox.setSelected(designerEnvManager.isSaveCommit()); supportCellEditorDefCheckBox.setSelected(designerEnvManager.isSupportCellEditorDef()); @@ -631,6 +678,9 @@ public class PreferencePane extends BasicPane { designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); + designerEnvManager.setSaveInterval(this.saveIntervalEditor.getValue()); + designerEnvManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); + designerEnvManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); if (this.autoPushUpdateCheckBox != null) { designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected()); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 48e067d36..1627bf844 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -26,7 +26,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.toolbar.VcsConfig; +import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.design.mainframe.vcs.ui.FileVersionsPanel; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.ShortCut; @@ -49,9 +49,8 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.third.org.apache.commons.io.FilenameUtils; -import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; import com.fr.workspace.WorkContext; -import com.fr.workspace.server.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.Constants; import javax.swing.BorderFactory; import javax.swing.JDialog; @@ -287,7 +286,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt */ private class VcsAction extends UpdateAction { public VcsAction() { - this.setName(Toolkit.i18nText("Plugin-VCS_Title")); + this.setName(Toolkit.i18nText("Fine-Design_Vcs_Title")); this.setSmallIcon(Constants.VCS_LIST_PNG); } @@ -305,8 +304,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) closeOpendTemplate(path, isCurrentEditing); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(VcsConfig.class); - FileVersionsPanel fileVersionTablePanel = context.getBean(FileVersionsPanel.class); + FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); fileVersionTablePanel.showFileVersionsPane(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java deleted file mode 100644 index 894ee95eb..000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/VcsContext.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.fr.design.mainframe.toolbar; - -import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * Created by XiaXiang on 2019/4/20. - */ -public class VcsContext extends AnnotationConfigApplicationContext { - public static final VcsContext INSTANCE = new VcsContext(); - - public static VcsContext get() { - - return INSTANCE; - } - - -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java index de5f54d55..bd6869a64 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java @@ -1,7 +1,7 @@ -package com.fr.workspace.server.vcs.common; +package com.fr.design.mainframe.vcs.common; import com.fr.base.BaseUtils; -import com.fr.locale.InterProviderFactory; +import com.fr.design.i18n.Toolkit; import com.fr.workspace.WorkContext; import javax.swing.Icon; @@ -14,21 +14,14 @@ import static com.fr.stable.StableUtils.pathJoin; public class Constants { public final static String VCS_DIR = "vcs"; - - // 如果用其他方式实现vcs,未必需要这个cache - //TODO 要不要放到其他地方 public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); - public final static String CURRENT_USERSNAME = WorkContext.getCurrent().isLocal() - ? InterProviderFactory.getProvider().getLocText("本地用户") + public final static String CURRENT_USERNAME = WorkContext.getCurrent().isLocal() + ? Toolkit.i18nText("Fine-Design_Vcs_Local_User") : WorkContext.getCurrent().getConnection().getUserName(); public final static Color TABLE_SELECT_BACKGROUND = new Color(0xD8F2FD); - public final static Color COPY_VERSION_BTN_COLOR = new Color(0x419BF9); - - public final static Color DELETE_VERSION_BTN_COLOR = new Color(0xEB1D1F); - public final static EmptyBorder EMPTY_BORDER = new EmptyBorder(5, 10, 0, 10); public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); @@ -36,7 +29,6 @@ public class Constants { public final static Icon VCS_LIST_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_list.png"); public final static Icon VCS_BACK_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_back.png"); - public final static Icon VCS_SAVE_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_save.png"); public final static Icon VCS_FILTER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_filter@1x.png"); public final static Icon VCS_EDIT_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_edit.png"); public final static Icon VCS_DELETE_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_delete.png"); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java index 2d59a4ceb..193150dad 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java @@ -14,11 +14,11 @@ import java.io.InputStream; import java.io.OutputStream; -public class VcsCacheFileNodeFileProxy extends FileNodeFILE { +public class VcsCacheFileNodeFile extends FileNodeFILE { private final FileNode node; - public VcsCacheFileNodeFileProxy(FileNode node) { + public VcsCacheFileNodeFile(FileNode node) { super(node); this.node = node; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java index b05d2ad9d..455b0dac1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -1,24 +1,18 @@ -package com.fr.plugin.vcs.ui; +package com.fr.design.mainframe.vcs.ui; import com.fr.design.dialog.UIDialog; -import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.JTemplate; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.Inter; -import com.fr.plugin.vcs.Vcs; -import com.fr.plugin.vcs.common.proxy.VcsCacheFileNodeFileProxy; -import com.fr.stable.StringUtils; -import com.fr.third.guava.base.Preconditions; -import com.google.inject.Inject; +import com.fr.locale.InterProviderFactory; +import com.fr.report.ReportContext; +import com.fr.report.entity.VcsEntity; import javax.swing.JPanel; -import javax.swing.JScrollPane; import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; @@ -26,33 +20,29 @@ import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import static com.fr.plugin.vcs.common.CommonUtils.editingFilename; -import static com.fr.plugin.vcs.common.Constants.CURRENT_USERSNAME; /** - * 保存保本时候弹出的对话框,输入commit msg,点确定保存版本 - * Created by hzzz on 2017/12/11. + * 编辑版本信息面板 */ -public class SaveFileVersionDialog extends UIDialog { +public class EditFileVersionDialog extends UIDialog { private final UITextArea msgTestArea = new UITextArea(); private final UILabel versionLabel = new UILabel(); - private Vcs vcs; - private FileVersionTablePanel fileVersionTablePanel; + private VcsEntity entity; - @Inject - public SaveFileVersionDialog(FileVersionTablePanel fileVersionTablePanel, Vcs vcs) { + public EditFileVersionDialog(VcsEntity entity) { this(DesignerContext.getDesignerFrame()); - this.vcs = Preconditions.checkNotNull(vcs, "vcs is null"); - this.fileVersionTablePanel = Preconditions.checkNotNull(fileVersionTablePanel, "fileVersionTablePanel is null"); + this.entity = entity; + msgTestArea.setText(entity.getCommitMsg()); + versionLabel.setText(String.valueOf(entity.getVersion())); } - private SaveFileVersionDialog(Frame parent) { + private EditFileVersionDialog(Frame parent) { super(parent); initComponents(); setModal(true); - setTitle(Inter.getLocText("Plugin-VCS_Save_Version")); + setTitle(InterProviderFactory.getProvider().getLocText("Fine-Design_Vcs_Save_Version")); setSize(300, 220); setResizable(false); GUICoreUtils.centerWindow(this); @@ -62,14 +52,14 @@ public class SaveFileVersionDialog extends UIDialog { private void initComponents() { JPanel fontPane = new JPanel(new BorderLayout()); - fontPane.add(new UILabel(" " + Inter.getLocText("Plugin-VCS_Version_Message") + ":"), BorderLayout.NORTH); + fontPane.add(new UILabel(" " + InterProviderFactory.getProvider().getLocText("Fine-Design_Vcs_Version_Message") + ":"), BorderLayout.NORTH); msgTestArea.setBorder(null); - JScrollPane jScrollPane = new UIScrollPane(msgTestArea); + UIScrollPane scrollPane = new UIScrollPane(msgTestArea); Component[][] components = new Component[][]{ - new Component[]{new UILabel(" " + Inter.getLocText("Plugin-VCS_Version_Number") + ":"), versionLabel}, - new Component[]{fontPane, jScrollPane} + new Component[]{new UILabel(" " + InterProviderFactory.getProvider().getLocText("Fine-Design_Vcs_Version_Number") + ":"), versionLabel}, + new Component[]{fontPane, scrollPane} }; double[] rowSizes = new double[]{25, 100}; double[] columnSizes = new double[]{70, 200}; @@ -79,30 +69,18 @@ public class SaveFileVersionDialog extends UIDialog { JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT)); add(buttonPane, BorderLayout.SOUTH); - UIButton ok = new UIButton(Inter.getLocText("OK")); - UIButton cancel = new UIButton(Inter.getLocText("Cancel")); + UIButton ok = new UIButton(InterProviderFactory.getProvider().getLocText("OK")); + UIButton cancel = new UIButton(InterProviderFactory.getProvider().getLocText("Cancel")); buttonPane.add(ok); buttonPane.add(cancel); ok.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - jt.stopEditing(); - jt.saveTemplate(); - String filename = editingFilename(); - String versionLabelText = versionLabel.getText(); - // V.3 -> 3 - String version = versionLabelText.substring(2); - //TODO refactor - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFileProxy) { - vcs.saveVersionFromCache(CURRENT_USERSNAME, filename, msgTestArea.getText(), Integer.parseInt(version)); - fileVersionTablePanel.updateModel(1); - } else { - vcs.saveVersion(CURRENT_USERSNAME, filename, msgTestArea.getText(), Integer.parseInt(version)); - } - jt.requestFocus(); - doOK(); + entity.setCommitMsg(msgTestArea.getText()); + ReportContext.getInstance().getVcsController().saveOrUpdateFileVersion(entity); + setVisible(false); } }); @@ -113,17 +91,6 @@ public class SaveFileVersionDialog extends UIDialog { }); } - private void refresh() { - int latestFileVersion = vcs.getLatestFileVersion(editingFilename()); - versionLabel.setText("V." + String.valueOf(latestFileVersion + 1)); - msgTestArea.setText(StringUtils.EMPTY); - } - - public void showMsgInputDialog() { - refresh(); - setVisible(true); - } - @Override public void checkValid() throws Exception { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index 52c5052db..9b2ac55b2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -5,13 +5,14 @@ import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFileProxy; +import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFile; import com.fr.file.filetree.FileNode; import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; +import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.workspace.server.vcs.common.Constants; import javax.swing.AbstractCellEditor; import javax.swing.JPanel; @@ -21,16 +22,15 @@ import java.awt.Component; public class FileVersionCellEditor extends AbstractCellEditor implements TableCellEditor { - private final VcsOperator vcs; + private static final long serialVersionUID = -7299526575184810693L; //第一行 private final JPanel firstRowPanel; //其余行 private final FileVersionRowPanel renderAndEditor; - public FileVersionCellEditor(FileVersionFirstRowPanel firstRowPanel, FileVersionRowPanel renderAndEditor, VcsOperator vcs) { - this.vcs = vcs; - this.firstRowPanel = firstRowPanel; - this.renderAndEditor = renderAndEditor; + public FileVersionCellEditor() { + this.firstRowPanel = new FileVersionFirstRowPanel(); + this.renderAndEditor = new FileVersionRowPanel(); } @Override @@ -40,17 +40,16 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe if (isSelected) { return editor; } else if (row == 0) { - //TODO path "/" String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); try { - fileOfVersion = vcs.getFileOfCurrent(path.replaceFirst("/", "")); + fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfCurrent(path.replaceFirst("/", "")); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } } else { renderAndEditor.update((VcsEntity) value); try { - fileOfVersion = vcs.getFileOfFileVersion(((VcsEntity) value).getFilename(), ((VcsEntity) value).getVersion()); + fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfFileVersion(((VcsEntity) value).getFilename(), ((VcsEntity) value).getVersion()); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } @@ -65,7 +64,7 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe MutilTempalteTabPane.getInstance().closeFormat(jt); MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jt); //再打开cache中的模板 - DesignerContext.getDesignerFrame().openTemplate(new VcsCacheFileNodeFileProxy(new FileNode(fileOfVersion, false))); + DesignerContext.getDesignerFrame().openTemplate(new VcsCacheFileNodeFile(new FileNode(fileOfVersion, false))); } @@ -78,6 +77,6 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe @Override public Object getCellEditorValue() { - return renderAndEditor.getFileVersion(); + return renderAndEditor.getVcsEntity(); } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java index 78e75bdf5..efe054391 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java @@ -8,7 +8,7 @@ import javax.swing.table.TableCellRenderer; import java.awt.Component; import static com.fr.design.constants.UIConstants.TREE_BACKGROUND; -import static com.fr.workspace.server.vcs.common.Constants.TABLE_SELECT_BACKGROUND; +import static com.fr.design.mainframe.vcs.common.Constants.TABLE_SELECT_BACKGROUND; public class FileVersionCellRender implements TableCellRenderer { @@ -18,9 +18,9 @@ public class FileVersionCellRender implements TableCellRenderer { //其余行 private final FileVersionRowPanel render; - public FileVersionCellRender(FileVersionFirstRowPanel firstRowPanel, FileVersionRowPanel render) { - this.render = render; - this.firstRowPanel = firstRowPanel; + public FileVersionCellRender() { + this.render = new FileVersionRowPanel(); + this.firstRowPanel = new FileVersionFirstRowPanel(); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index e674f3ced..39c76d365 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -6,6 +6,8 @@ import com.fr.design.gui.date.UIDatePicker; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; +import com.fr.report.ReportContext; +import com.fr.report.entity.VcsEntity; import javax.swing.AbstractAction; import javax.swing.Box; @@ -17,14 +19,18 @@ import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; +import java.util.List; -import static com.fr.workspace.server.vcs.common.Constants.EMPTY_BORDER; -import static com.fr.workspace.server.vcs.common.Constants.EMPTY_BORDER_BOTTOM; +import static com.fr.design.mainframe.vcs.common.Constants.EMPTY_BORDER; +import static com.fr.design.mainframe.vcs.common.Constants.EMPTY_BORDER_BOTTOM; public class FileVersionDialog extends UIDialog { private UIButton okBtn = new UIButton("确定"); private UIButton cancelBtn = new UIButton("取消"); + private DateEditor dateEditor; + private UITextField textField; + public static final long DELAY = 24 * 60 * 60 * 1000; public FileVersionDialog(Frame frame) { @@ -35,11 +41,13 @@ public class FileVersionDialog extends UIDialog { box0.setBorder(EMPTY_BORDER_BOTTOM); box0.add(new UILabel("生成日期")); box0.add(Box.createHorizontalGlue()); - box0.add(new DateEditor(new Date(), true, "生成日期", UIDatePicker.STYLE_CN_DATE1)); + dateEditor = new DateEditor(new Date(), true, "生成日期", UIDatePicker.STYLE_CN_DATE1); + box0.add(dateEditor); Box box1 = Box.createHorizontalBox(); box1.setBorder(EMPTY_BORDER_BOTTOM); box1.add(new UILabel("备注关键词 ")); - box1.add(new UITextField()); + textField = new UITextField(); + box1.add(textField); Box box2 = Box.createHorizontalBox(); box2.add(Box.createHorizontalGlue()); box2.setBorder(EMPTY_BORDER); @@ -49,6 +57,10 @@ public class FileVersionDialog extends UIDialog { @Override public void actionPerformed(ActionEvent e) { FileVersionDialog.this.setVisible(false); + Date date = dateEditor.getValue(); + List vcsEntities = ReportContext.getInstance().getVcsController().queryFilterFileVersions(date, new Date(date.getTime() + DELAY), textField.getText()); + FileVersionTable.getInstance().updateModel(1, vcsEntities); + } }); cancelBtn.addActionListener(new AbstractAction() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java index 8200f1427..9d892ba53 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import javax.swing.Box; import javax.swing.JPanel; @@ -14,7 +15,7 @@ public class FileVersionFirstRowPanel extends JPanel { super(new BorderLayout()); Box upPane = Box.createVerticalBox(); upPane.setBorder(new EmptyBorder(5, 10, 5, 10)); - upPane.add(new UILabel("本地用户")); + upPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Local_User"))); add(upPane, BorderLayout.CENTER); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index 712dcf4b1..683fd5a7f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -4,13 +4,14 @@ import com.fr.design.gui.frpane.UITextPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.toolbar.VcsConfig; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; +import com.fr.design.mainframe.vcs.common.Constants; import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; -import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; +import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.workspace.server.vcs.common.Constants; +import com.fr.workspace.server.vcs.git.FineGit; import javax.swing.Box; import javax.swing.JOptionPane; @@ -30,17 +31,15 @@ import java.util.Date; public class FileVersionRowPanel extends JPanel { - private final VcsOperator vcs; - private VcsEntity fileVersion; + private VcsEntity vcsEntity; private UILabel versionLabel = new UILabel(); private UILabel usernameLabel = new UILabel("", Constants.VCS_USER_PNG, SwingConstants.LEFT); private UITextPane timeAndMsgLabel = new UITextPane(); private UILabel timeLabel = new UILabel(); + private EditFileVersionDialog editDialog; - @SuppressWarnings("unchecked") - public FileVersionRowPanel(final VcsOperator vcsOperator) { - this.vcs = vcsOperator; + public FileVersionRowPanel() { setLayout(new BorderLayout()); // version + username @@ -59,38 +58,41 @@ public class FileVersionRowPanel extends JPanel { // confirm + delete UIButton confirmBtn = new UIButton(Constants.VCS_REVERT); confirmBtn.set4ToolbarButton(); - confirmBtn.setToolTipText(Toolkit.i18nText("Plugin-VCS_Version_Revert")); + confirmBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Revert")); confirmBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { - if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Plugin-VCS_Version_Revert_Confirm"), Toolkit.i18nText("Plugin-VCS_Version_Revert_Title"), + if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Confirm"), Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Title"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { try { - vcs.rollbackTo(fileVersion); + WorkContext.getCurrent().get(VcsOperator.class).rollbackTo(vcsEntity); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(VcsConfig.class); - context.getBean(FileVersionsPanel.class).exitVcs(fileVersion.getFilename()); + FileVersionsPanel.getInstance().exitVcs(vcsEntity.getFilename()); } } }); UIButton deleteBtn = new UIButton(Constants.VCS_DELETE_PNG); deleteBtn.set4ToolbarButton(); - deleteBtn.setToolTipText(Toolkit.i18nText("Plugin-VCS_Version_Delete")); + deleteBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Delete")); deleteBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { - if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Plugin-VCS_Version_Delete_Confirm"), Toolkit.i18nText("FR-Designer_Remove"), + if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Version_Delete_Confirm"), Toolkit.i18nText("FR-Designer_Remove"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - //TODO refactor try { - vcs.deleteVersion(fileVersion.getFilename(), fileVersion.getVersion()); + WorkContext.getCurrent().get(VcsOperator.class).deleteVersion(vcsEntity.getFilename(), vcsEntity.getVersion()); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + FileVersionTable table = (FileVersionTable) (FileVersionRowPanel.this.getParent()); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + try { + table.updateModel(table.getSelectedRow() - 1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } - FileVersionTablePanel table = (FileVersionTablePanel) (FileVersionRowPanel.this.getParent()); - table.updateModel(table.getSelectedRow() - 1); } } }); @@ -117,12 +119,15 @@ public class FileVersionRowPanel extends JPanel { } private void showEditDialog() { + this.editDialog = new EditFileVersionDialog(vcsEntity); + editDialog.setVisible(true); + update(vcsEntity); } public void update(final VcsEntity fileVersion) { - this.fileVersion = fileVersion; + this.vcsEntity = fileVersion; versionLabel.setText(String.format("V.%s", fileVersion.getVersion())); usernameLabel.setText(fileVersion.getUsername()); timeAndMsgLabel.setText(StringUtils.EMPTY); @@ -142,7 +147,7 @@ public class FileVersionRowPanel extends JPanel { return simpleDateFormat.format(time); } - public VcsEntity getFileVersion() { - return fileVersion; + public VcsEntity getVcsEntity() { + return vcsEntity; } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java index a833edc73..49c926c37 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java @@ -3,52 +3,53 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; +import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.AbstractTableModel; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableCellRenderer; import java.util.ArrayList; import java.util.List; -public class FileVersionTablePanel extends JTable { +public class FileVersionTable extends JTable { + private static volatile FileVersionTable instance; - private final VcsOperator vcs; + private FileVersionTable() { + super(new CellModel(new ArrayList())); - public FileVersionTablePanel(VcsOperator vcs, TableCellEditor tableCellEditor, TableCellRenderer tableCellRenderer) { - super(new Model(new ArrayList())); - this.vcs = vcs; - setDefaultRenderer(VcsEntity.class, tableCellRenderer); - setDefaultEditor(VcsEntity.class, tableCellEditor); + setDefaultRenderer(VcsEntity.class, new FileVersionCellRender()); + setDefaultEditor(VcsEntity.class, new FileVersionCellEditor()); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); setTableHeader(null); setRowHeight(30); } - public void updateModel(int selectedRow) { - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - List vcsEntities = null; - try { - vcsEntities = vcs.getVersions(path.replaceFirst("/", "")); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); + public static FileVersionTable getInstance() { + if (instance == null) { + synchronized (FileVersionTable.class) { + instance = new FileVersionTable(); + } } - if (selectedRow > vcsEntities.size()) { - selectedRow = vcsEntities.size(); + return instance; + } + + public void updateModel(int selectedRow, List entities) { + if (selectedRow > entities.size()) { + selectedRow = entities.size(); } - setModel(new Model(vcsEntities)); + setModel(new CellModel(entities)); editCellAt(selectedRow, 0); setRowSelectionInterval(selectedRow, selectedRow); } - private static class Model extends AbstractTableModel { + private static class CellModel extends AbstractTableModel { + private static final long serialVersionUID = -6078568799037607690L; private List vcsEntities; - Model(List vcsEntities) { + CellModel(List vcsEntities) { this.vcsEntities = vcsEntities; } @@ -76,10 +77,5 @@ public class FileVersionTablePanel extends JTable { } - public List getVcsEntities() { - return vcsEntities; - } - - } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index a04ac705a..2b49f8cdf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -4,7 +4,6 @@ import com.fr.base.GraphHelper; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.dialog.BasicPane; import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; @@ -15,12 +14,15 @@ import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.ToolBarNewTemplatePane; import com.fr.design.mainframe.WestRegionContainerPane; +import com.fr.design.mainframe.vcs.common.Constants; import com.fr.design.menu.ToolBarDef; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; -import com.fr.workspace.server.vcs.common.Constants; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.BorderFactory; import javax.swing.Box; @@ -33,19 +35,28 @@ import java.awt.event.ActionListener; public class FileVersionsPanel extends BasicPane { private static final String ELLIPSIS = "..."; + private static volatile FileVersionsPanel instance; - private final FileVersionTablePanel fileVersionsTablePane; private UILabel titleLabel; private String templatePath; private UIButton filterBtn; private FileVersionDialog versionDialog; - public FileVersionsPanel(FileVersionTablePanel fileVersionTablePanel) { - this.fileVersionsTablePane = fileVersionTablePanel; + private FileVersionsPanel() { initComponents(); } + public static FileVersionsPanel getInstance() { + if (instance == null) { + synchronized (FileVersionsPanel.class) { + instance = new FileVersionsPanel(); + + } + } + return instance; + } + private void initComponents() { setLayout(new BorderLayout()); UIToolbar toolbar = ToolBarDef.createJToolBar(); @@ -83,7 +94,7 @@ public class FileVersionsPanel extends BasicPane { toolbar.add(upPane); add(toolbar, BorderLayout.NORTH); - UIScrollPane jScrollPane = new UIScrollPane(fileVersionsTablePane); + UIScrollPane jScrollPane = new UIScrollPane(FileVersionTable.getInstance()); add(jScrollPane, BorderLayout.CENTER); } @@ -106,7 +117,7 @@ public class FileVersionsPanel extends BasicPane { MutilTempalteTabPane.getInstance().closeFormat(jt); MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jt); - udpateDesignerFrame(true); + updateDesignerFrame(true); final String selectedFilePath = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path); DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(selectedFilePath, false))); @@ -116,16 +127,21 @@ public class FileVersionsPanel extends BasicPane { templatePath = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); String[] paths = StableUtils.pathSplit(templatePath); String filename = paths[paths.length - 1]; - int width = fileVersionsTablePane.getWidth() - 40; + int width = FileVersionTable.getInstance().getWidth() - 40; if (getStringWidth(filename) > width) { filename = getEllipsisName(filename, width); } titleLabel.setText(filename); - fileVersionsTablePane.updateModel(1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + try { + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } } public void showFileVersionsPane() { - udpateDesignerFrame(false); + updateDesignerFrame(false); refreshVersionTablePane(); } @@ -135,7 +151,7 @@ public class FileVersionsPanel extends BasicPane { } - private void udpateDesignerFrame(boolean isExit) { + private void updateDesignerFrame(boolean isExit) { // 左上侧面板 WestRegionContainerPane.getInstance().replaceUpPane( isExit ? DesignerFrameFileDealerPane.getInstance() : this); @@ -144,7 +160,7 @@ public class FileVersionsPanel extends BasicPane { // MutilTempalteTabPane & NewTemplatePane 是否可点 ToolBarNewTemplatePane.getInstance().setButtonGray(!isExit); - JTemplate currentEditingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + JTemplate currentEditingTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (currentEditingTemplate.isJWorkBook()) { DesignerContext.getDesignerFrame().resetToolkitByPlus(currentEditingTemplate); } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 15098ce2d..4ad08f2ba 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -23,6 +23,7 @@ import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.itoolbar.UILargeToolbar; import com.fr.design.mainframe.ActiveKeyGenerator; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.InformationCollector; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JWorkBook; @@ -31,9 +32,8 @@ import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.mainframe.toolbar.VcsConfig; -import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFileProxy; -import com.fr.design.mainframe.vcs.ui.FileVersionTablePanel; +import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFile; +import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -60,10 +60,9 @@ import com.fr.start.jni.SplashMac; import com.fr.start.module.StartupArgs; import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; -import com.fr.third.springframework.context.annotation.AnnotationConfigApplicationContext; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.workspace.server.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.Constants; import javax.swing.JComponent; import javax.swing.JOptionPane; @@ -277,35 +276,32 @@ public class Designer extends BaseDesigner { saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); String fileName = getEditingFilename(); - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(VcsConfig.class); - VcsOperator vcsOperator = context.getBean(VcsOperator.class); int latestFileVersion = 0; try { - latestFileVersion = vcsOperator.getLatestFileVersion(fileName); + latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); } catch (Exception e1) { FineLoggerFactory.getLogger().error(e1.getMessage()); } try { - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFileProxy) { - vcsOperator.saveVersionFromCache(Constants.CURRENT_USERSNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - context.getBean(FileVersionTablePanel.class).updateModel(1); + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { + WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(Constants.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } else { - vcsOperator.saveVersion(Constants.CURRENT_USERSNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + WorkContext.getCurrent().get(VcsOperator.class).saveVersion(Constants.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); } } catch (Exception e1) { FineLoggerFactory.getLogger().error(e1.getMessage()); } - - - } }); return saveButton; From 525c10186ed8d3a58d08c190e70b74d328fdcec6 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 12:19:08 +0800 Subject: [PATCH 069/196] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 1 - .../com/fr/design/mainframe/vcs/ui/FileVersionDialog.java | 2 +- .../com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java | 1 - .../java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java | 4 ---- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 5bead95da..7dc762f31 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -1,6 +1,5 @@ package com.fr.design.actions.file; -import com.apple.laf.AquaProgressBarUI; import com.fr.base.BaseUtils; import com.fr.config.Configuration; import com.fr.design.DesignerEnvManager; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 39c76d365..bc74cea0a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -26,11 +26,11 @@ import static com.fr.design.mainframe.vcs.common.Constants.EMPTY_BORDER_BOTTOM; public class FileVersionDialog extends UIDialog { + public static final long DELAY = 24 * 60 * 60 * 1000; private UIButton okBtn = new UIButton("确定"); private UIButton cancelBtn = new UIButton("取消"); private DateEditor dateEditor; private UITextField textField; - public static final long DELAY = 24 * 60 * 60 * 1000; public FileVersionDialog(Frame frame) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index 683fd5a7f..a0dad0ae6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -11,7 +11,6 @@ import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.workspace.server.vcs.git.FineGit; import javax.swing.Box; import javax.swing.JOptionPane; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java index 49c926c37..500a57f15 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java @@ -1,10 +1,6 @@ package com.fr.design.mainframe.vcs.ui; -import com.fr.design.mainframe.DesignerFrameFileDealerPane; -import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; -import com.fr.workspace.WorkContext; -import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.JTable; import javax.swing.ListSelectionModel; From 99ba163c1f0d8acd6a7e3c37fa3d28d3629f02a5 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 12:40:40 +0800 Subject: [PATCH 070/196] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 36 ++++++++++++++++--- .../common/{Constants.java => VcsHelper.java} | 27 +++++++++++++- .../vcs/proxy/VcsCacheFileNodeFile.java | 10 +++--- .../vcs/ui/FileVersionCellEditor.java | 4 +-- .../vcs/ui/FileVersionCellRender.java | 2 +- .../mainframe/vcs/ui/FileVersionDialog.java | 4 +-- .../mainframe/vcs/ui/FileVersionRowPanel.java | 16 ++++----- .../mainframe/vcs/ui/FileVersionsPanel.java | 6 ++-- 8 files changed, 78 insertions(+), 27 deletions(-) rename designer-base/src/main/java/com/fr/design/mainframe/vcs/common/{Constants.java => VcsHelper.java} (64%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 1627bf844..d61d1cf42 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -26,7 +26,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.design.mainframe.vcs.ui.FileVersionsPanel; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.ShortCut; @@ -50,7 +49,7 @@ import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; -import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.VcsHelper; import javax.swing.BorderFactory; import javax.swing.JDialog; @@ -287,7 +286,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private class VcsAction extends UpdateAction { public VcsAction() { this.setName(Toolkit.i18nText("Fine-Design_Vcs_Title")); - this.setSmallIcon(Constants.VCS_LIST_PNG); + this.setSmallIcon(VcsHelper.VCS_LIST_PNG); } @Override @@ -450,18 +449,45 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt newFolderAction.setEnabled(singleSelected); renameAction.setEnabled(singleSelected); showInExplorerAction.setEnabled(singleSelected); - vcsAction.setEnabled(singleSelected); - // 删除操作在至少选中一个时可用 boolean selected = selectedPathNum > 0; delFileAction.setEnabled(selected); // 刷新操作始终可用 refreshTreeAction.setEnabled(true); + handleVcsAction(); // 其他状态 otherStateChange(); } + private void handleVcsAction() { + if (VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() > 1) { + vcsAction.setEnabled(false); + return; + } + + if (WorkContext.getCurrent() != null) { + if (!WorkContext.getCurrent().isLocal()) { + //当前环境为远程环境时 + FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); + if (selectedOperation.getFilePath() != null) { + if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { + vcsAction.setEnabled(false); + } else { + vcsAction.setEnabled(true); + } + } else { + vcsAction.setEnabled(false); + } + } else { + //当前环境为本地环境时 + vcsAction.setEnabled(selectedOperation.getFilePath() != null); + } + } + } + + + public FileOperations getSelectedOperation() { return selectedOperation; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java similarity index 64% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java rename to designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index bd6869a64..614c800b3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/Constants.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -1,6 +1,8 @@ package com.fr.design.mainframe.vcs.common; import com.fr.base.BaseUtils; +import com.fr.design.file.TemplateTreePane; +import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.workspace.WorkContext; @@ -11,7 +13,7 @@ import java.awt.Color; import static com.fr.stable.StableUtils.pathJoin; -public class Constants { +public class VcsHelper { public final static String VCS_DIR = "vcs"; public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); @@ -35,5 +37,28 @@ public class Constants { public final static Icon VCS_USER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_user@1x.png"); public final static Icon VCS_REVERT = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_revert.png"); + public static int containsFolderCounts() { + TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); + if (fileTree.getSelectionPaths() == null) { + return 0; + } + + //选择的包含文件和文件夹的数目 + if (fileTree.getSelectionPaths().length == 0) { + return 0; + } + //所有的num减去模板的num,得到文件夹的num + return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; + } + + public static int selectedTemplateCounts() { + TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); + if (fileTree.getSelectionPaths() == null) { + return 0; + } + + return fileTree.getSelectedTemplatePaths().length; + } + } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java index 193150dad..9ddc411d4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.vcs.proxy; import com.fr.base.io.XMLEncryptUtils; -import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; @@ -37,12 +37,12 @@ public class VcsCacheFileNodeFile extends FileNodeFILE { String envPath = node.getEnvPath(); // envPath必须以vcs开头 - if (!envPath.startsWith(Constants.VCS_CACHE_DIR)) { + if (!envPath.startsWith(VcsHelper.VCS_CACHE_DIR)) { return null; } InputStream in = WorkContext.getCurrent().get(WorkResource.class) - .openStream(StableUtils.pathJoin(Constants.VCS_CACHE_DIR, envPath.substring(Constants.VCS_CACHE_DIR.length() + 1))); + .openStream(StableUtils.pathJoin(VcsHelper.VCS_CACHE_DIR, envPath.substring(VcsHelper.VCS_CACHE_DIR.length() + 1))); return envPath.endsWith(".cpt") || envPath.endsWith(".frm") ? XMLEncryptUtils.decodeInputStream(in) : in; @@ -63,10 +63,10 @@ public class VcsCacheFileNodeFile extends FileNodeFILE { String envPath = node.getEnvPath(); // envPath必须以reportlets开头 - if (!envPath.startsWith(Constants.VCS_CACHE_DIR)) { + if (!envPath.startsWith(VcsHelper.VCS_CACHE_DIR)) { return null; } - return new WorkResourceOutputStream(StableUtils.pathJoin(Constants.VCS_CACHE_DIR, envPath.substring(Constants.VCS_CACHE_DIR.length() + 1))); + return new WorkResourceOutputStream(StableUtils.pathJoin(VcsHelper.VCS_CACHE_DIR, envPath.substring(VcsHelper.VCS_CACHE_DIR.length() + 1))); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index 9b2ac55b2..265a4f69f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -5,7 +5,7 @@ import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFile; import com.fr.file.filetree.FileNode; import com.fr.log.FineLoggerFactory; @@ -55,7 +55,7 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe } } - editor.setBackground(Constants.TABLE_SELECT_BACKGROUND); + editor.setBackground(VcsHelper.TABLE_SELECT_BACKGROUND); if (StringUtils.isNotEmpty(fileOfVersion)) { //先关闭当前打开的模板版本 JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java index efe054391..c1cc23fc4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java @@ -8,7 +8,7 @@ import javax.swing.table.TableCellRenderer; import java.awt.Component; import static com.fr.design.constants.UIConstants.TREE_BACKGROUND; -import static com.fr.design.mainframe.vcs.common.Constants.TABLE_SELECT_BACKGROUND; +import static com.fr.design.mainframe.vcs.common.VcsHelper.TABLE_SELECT_BACKGROUND; public class FileVersionCellRender implements TableCellRenderer { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index bc74cea0a..4ed8df7c6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -21,8 +21,8 @@ import java.awt.event.ActionListener; import java.util.Date; import java.util.List; -import static com.fr.design.mainframe.vcs.common.Constants.EMPTY_BORDER; -import static com.fr.design.mainframe.vcs.common.Constants.EMPTY_BORDER_BOTTOM; +import static com.fr.design.mainframe.vcs.common.VcsHelper.EMPTY_BORDER; +import static com.fr.design.mainframe.vcs.common.VcsHelper.EMPTY_BORDER_BOTTOM; public class FileVersionDialog extends UIDialog { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index a0dad0ae6..11464df74 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -5,7 +5,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerFrameFileDealerPane; -import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; @@ -32,7 +32,7 @@ public class FileVersionRowPanel extends JPanel { private VcsEntity vcsEntity; private UILabel versionLabel = new UILabel(); - private UILabel usernameLabel = new UILabel("", Constants.VCS_USER_PNG, SwingConstants.LEFT); + private UILabel usernameLabel = new UILabel("", VcsHelper.VCS_USER_PNG, SwingConstants.LEFT); private UITextPane timeAndMsgLabel = new UITextPane(); private UILabel timeLabel = new UILabel(); private EditFileVersionDialog editDialog; @@ -43,19 +43,19 @@ public class FileVersionRowPanel extends JPanel { // version + username Box upPane = Box.createHorizontalBox(); - upPane.setBorder(Constants.EMPTY_BORDER); + upPane.setBorder(VcsHelper.EMPTY_BORDER); upPane.add(versionLabel); upPane.add(Box.createHorizontalGlue()); // msg - timeAndMsgLabel.setBorder(Constants.EMPTY_BORDER); + timeAndMsgLabel.setBorder(VcsHelper.EMPTY_BORDER); timeAndMsgLabel.setOpaque(false); timeAndMsgLabel.setBackground(new Color(0, 0, 0, 0)); timeAndMsgLabel.setEditable(false); // confirm + delete - UIButton confirmBtn = new UIButton(Constants.VCS_REVERT); + UIButton confirmBtn = new UIButton(VcsHelper.VCS_REVERT); confirmBtn.set4ToolbarButton(); confirmBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Revert")); confirmBtn.addActionListener(new ActionListener() { @@ -72,7 +72,7 @@ public class FileVersionRowPanel extends JPanel { } } }); - UIButton deleteBtn = new UIButton(Constants.VCS_DELETE_PNG); + UIButton deleteBtn = new UIButton(VcsHelper.VCS_DELETE_PNG); deleteBtn.set4ToolbarButton(); deleteBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Delete")); deleteBtn.addActionListener(new ActionListener() { @@ -95,7 +95,7 @@ public class FileVersionRowPanel extends JPanel { } } }); - UIButton editBtn = new UIButton(Constants.VCS_EDIT_PNG); + UIButton editBtn = new UIButton(VcsHelper.VCS_EDIT_PNG); editBtn.set4ToolbarButton(); editBtn.addActionListener(new ActionListener() { @Override @@ -109,7 +109,7 @@ public class FileVersionRowPanel extends JPanel { upPane.add(deleteBtn); Box downPane = Box.createHorizontalBox(); downPane.add(usernameLabel); - downPane.setBorder(Constants.EMPTY_BORDER_BOTTOM); + downPane.setBorder(VcsHelper.EMPTY_BORDER_BOTTOM); downPane.add(Box.createHorizontalGlue()); downPane.add(timeLabel); add(upPane, BorderLayout.NORTH); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index 2b49f8cdf..dc33d029d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -14,7 +14,7 @@ import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.ToolBarNewTemplatePane; import com.fr.design.mainframe.WestRegionContainerPane; -import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.ToolBarDef; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; @@ -63,7 +63,7 @@ public class FileVersionsPanel extends BasicPane { toolbar.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); toolbar.setBorderPainted(true); Box upPane = Box.createHorizontalBox(); - UIButton backBtn = new UIButton(Constants.VCS_BACK_PNG); + UIButton backBtn = new UIButton(VcsHelper.VCS_BACK_PNG); backBtn.set4ToolbarButton(); backBtn.addActionListener(new ActionListener() { @Override @@ -72,7 +72,7 @@ public class FileVersionsPanel extends BasicPane { } }); toolbar.add(backBtn); - filterBtn = new UIButton(Constants.VCS_FILTER_PNG); + filterBtn = new UIButton(VcsHelper.VCS_FILTER_PNG); filterBtn.set4ToolbarButton(); filterBtn.setHorizontalAlignment(SwingConstants.RIGHT); filterBtn.addActionListener(new ActionListener() { From 52fb689d64188b3b807180c36c65f57e19799041 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 13:21:24 +0800 Subject: [PATCH 071/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/DesignerEnvManager.java | 2 +- .../fr/design/mainframe/DesignerFrameFileDealerPane.java | 2 +- .../com/fr/design/mainframe/vcs/common/VcsHelper.java | 8 ++++++-- .../com/fr/design/mainframe/vcs/ui/FileVersionTable.java | 4 +++- .../com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java | 5 +++-- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 362831325..6d8d5b9c0 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -1607,7 +1607,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setDragPermited(reader.getAttrAsBoolean("isDragPermited", false)); this.setUndoLimit(reader.getAttrAsInt("undoLimit", 5)); this.setDefaultStringToFormula(reader.getAttrAsBoolean("defaultStringToFormula", false)); - this.setVcsEnable(reader.getAttrAsBoolean("supportVcs", false)); + this.setVcsEnable(reader.getAttrAsBoolean("supportVcs", true)); this.setSaveCommit(reader.getAttrAsBoolean("saveCommit", false)); this.setSaveInterval(reader.getAttrAsInt("saveInterval", 60)); if ((tmpVal = reader.getAttrAsString("gridLineColor", null)) != null) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index d61d1cf42..7685974df 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -461,7 +461,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } private void handleVcsAction() { - if (VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() > 1) { + if (!DesignerEnvManager.getEnvManager().isVcsEnable() || VcsHelper.isUnSelectedTemplate()) { vcsAction.setEnabled(false); return; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 614c800b3..006603fde 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -37,7 +37,7 @@ public class VcsHelper { public final static Icon VCS_USER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_user@1x.png"); public final static Icon VCS_REVERT = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_revert.png"); - public static int containsFolderCounts() { + private static int containsFolderCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); if (fileTree.getSelectionPaths() == null) { return 0; @@ -51,7 +51,7 @@ public class VcsHelper { return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; } - public static int selectedTemplateCounts() { + private static int selectedTemplateCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); if (fileTree.getSelectionPaths() == null) { return 0; @@ -60,5 +60,9 @@ public class VcsHelper { return fileTree.getSelectedTemplatePaths().length; } + public static boolean isUnSelectedTemplate() { + return VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() > 1; + } + } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java index 500a57f15..aa9c87ca0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionTable.java @@ -25,7 +25,9 @@ public class FileVersionTable extends JTable { public static FileVersionTable getInstance() { if (instance == null) { synchronized (FileVersionTable.class) { - instance = new FileVersionTable(); + if (instance == null) { + instance = new FileVersionTable(); + } } } return instance; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index dc33d029d..a85a2668e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -50,8 +50,9 @@ public class FileVersionsPanel extends BasicPane { public static FileVersionsPanel getInstance() { if (instance == null) { synchronized (FileVersionsPanel.class) { - instance = new FileVersionsPanel(); - + if (instance == null) { + instance = new FileVersionsPanel(); + } } } return instance; From 0574c315ad813e0125d495eb544ad07a1cf592f3 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 13:25:12 +0800 Subject: [PATCH 072/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/vcs/common/VcsHelper.java | 18 +++++++++++++ .../src/main/java/com/fr/start/Designer.java | 25 +++---------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 006603fde..fc9d4e940 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -1,9 +1,13 @@ package com.fr.design.mainframe.vcs.common; import com.fr.base.BaseUtils; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; import javax.swing.Icon; @@ -64,5 +68,19 @@ public class VcsHelper { return VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() > 1; } + public static String getEdittingFilename() { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + String editingFilePath = jt.getEditingFILE().getPath(); + if (editingFilePath.startsWith(ProjectConstants.REPORTLETS_NAME)) { + editingFilePath = editingFilePath.replaceFirst(ProjectConstants.REPORTLETS_NAME, StringUtils.EMPTY); + } else if (editingFilePath.startsWith(VcsHelper.VCS_CACHE_DIR)) { + editingFilePath = editingFilePath.replaceFirst(VcsHelper.VCS_CACHE_DIR, StringUtils.EMPTY); + } + if (editingFilePath.startsWith("/")) { + editingFilePath = editingFilePath.substring(1); + } + return editingFilePath; + } + } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 4ad08f2ba..f7cb825ed 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -62,7 +62,7 @@ import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.design.mainframe.vcs.common.Constants; +import com.fr.design.mainframe.vcs.common.VcsHelper; import javax.swing.JComponent; import javax.swing.JOptionPane; @@ -280,7 +280,7 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); - String fileName = getEditingFilename(); + String fileName = VcsHelper.getEdittingFilename(); int latestFileVersion = 0; try { latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); @@ -288,15 +288,14 @@ public class Designer extends BaseDesigner { } catch (Exception e1) { FineLoggerFactory.getLogger().error(e1.getMessage()); } - try { if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(Constants.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); } else { - WorkContext.getCurrent().get(VcsOperator.class).saveVersion(Constants.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); } } catch (Exception e1) { FineLoggerFactory.getLogger().error(e1.getMessage()); @@ -307,22 +306,6 @@ public class Designer extends BaseDesigner { return saveButton; } - public static String getEditingFilename() { - JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - String editingFilePath = jt.getEditingFILE().getPath(); - //TODO 如果是cache里的文件,也会走到这里,这里是找到reportlets去掉的。万一刚好cache/reportlets会出问题 - if (editingFilePath.startsWith(ProjectConstants.REPORTLETS_NAME)) { - editingFilePath = editingFilePath.replaceFirst(ProjectConstants.REPORTLETS_NAME, StringUtils.EMPTY); - } else if (editingFilePath.startsWith(Constants.VCS_CACHE_DIR)) { - editingFilePath = editingFilePath.replaceFirst(Constants.VCS_CACHE_DIR, StringUtils.EMPTY); - } - //TODO refactor 考虑直接用reportlets/xxx/x/x/x/x/x// or /xx/x/x/x/x/x - if (editingFilePath.startsWith("/")) { - editingFilePath = editingFilePath.substring(1); - } - return editingFilePath; - } - private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); From 82d2302ffa175b5931e3f12e498601559497cc83 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 14:21:52 +0800 Subject: [PATCH 073/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 14 ++++----- .../mainframe/vcs/common/VcsHelper.java | 2 +- .../mainframe/vcs/ui/FileVersionDialog.java | 29 ++++++++++--------- .../src/main/java/com/fr/start/Designer.java | 3 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 7dc762f31..e7db515af 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -203,17 +203,17 @@ public class PreferencePane extends BasicPane { } private void createVcsSettingPane(JPanel generalPane) { - JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("版本控制")); + JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); generalPane.add(vcsPane); - vcsEnableCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("保存自动生成版本")); - saveCommitCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("备注版本不会自动清理")); + vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); + saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); saveIntervalEditor = new IntegerEditor(30); JPanel memorySpace = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); - UILabel label1 = new UILabel(" 每 "); - UILabel label2 = new UILabel(" 分钟每个用户同个模板最多保留一个模板"); - memorySpace.add(label1); + UILabel everyLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Every")); + UILabel delayLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Delay")); + memorySpace.add(everyLabel); memorySpace.add(saveIntervalEditor); - memorySpace.add(label2); + memorySpace.add(delayLabel); vcsEnableCheckBox.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index fc9d4e940..4e1809d6d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -68,7 +68,7 @@ public class VcsHelper { return VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() > 1; } - public static String getEdittingFilename() { + public static String getEditingFilename() { JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); String editingFilePath = jt.getEditingFILE().getPath(); if (editingFilePath.startsWith(ProjectConstants.REPORTLETS_NAME)) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 4ed8df7c6..4ac537a18 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -6,6 +6,7 @@ import com.fr.design.gui.date.UIDatePicker; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; import com.fr.report.ReportContext; import com.fr.report.entity.VcsEntity; @@ -27,8 +28,8 @@ import static com.fr.design.mainframe.vcs.common.VcsHelper.EMPTY_BORDER_BOTTOM; public class FileVersionDialog extends UIDialog { public static final long DELAY = 24 * 60 * 60 * 1000; - private UIButton okBtn = new UIButton("确定"); - private UIButton cancelBtn = new UIButton("取消"); + private UIButton okBtn = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); + private UIButton cancelBtn = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Utils_Design_Action_Cancel")); private DateEditor dateEditor; private UITextField textField; @@ -37,17 +38,17 @@ public class FileVersionDialog extends UIDialog { super(frame); setUndecorated(true); JPanel panel = new JPanel(new BorderLayout()); - Box box0 = Box.createHorizontalBox(); - box0.setBorder(EMPTY_BORDER_BOTTOM); - box0.add(new UILabel("生成日期")); - box0.add(Box.createHorizontalGlue()); - dateEditor = new DateEditor(new Date(), true, "生成日期", UIDatePicker.STYLE_CN_DATE1); - box0.add(dateEditor); - Box box1 = Box.createHorizontalBox(); - box1.setBorder(EMPTY_BORDER_BOTTOM); - box1.add(new UILabel("备注关键词 ")); + Box upBox = Box.createHorizontalBox(); + upBox.setBorder(EMPTY_BORDER_BOTTOM); + upBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_buildTime"))); + upBox.add(Box.createHorizontalGlue()); + dateEditor = new DateEditor(new Date(), true, "", UIDatePicker.STYLE_CN_DATE1); + upBox.add(dateEditor); + Box downBox = Box.createHorizontalBox(); + downBox.setBorder(EMPTY_BORDER_BOTTOM); + downBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_CommitMsg"))); textField = new UITextField(); - box1.add(textField); + downBox.add(textField); Box box2 = Box.createHorizontalBox(); box2.add(Box.createHorizontalGlue()); box2.setBorder(EMPTY_BORDER); @@ -69,8 +70,8 @@ public class FileVersionDialog extends UIDialog { FileVersionDialog.this.setVisible(false); } }); - panel.add(box0, BorderLayout.NORTH); - panel.add(box1, BorderLayout.CENTER); + panel.add(upBox, BorderLayout.NORTH); + panel.add(downBox, BorderLayout.CENTER); panel.add(box2, BorderLayout.SOUTH); add(panel); setSize(new Dimension(220, 100)); diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index f7cb825ed..458efaef9 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -53,7 +53,6 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.LifecycleFatalError; -import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLTools; import com.fr.start.fx.SplashFx; import com.fr.start.jni.SplashMac; @@ -280,7 +279,7 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); - String fileName = VcsHelper.getEdittingFilename(); + String fileName = VcsHelper.getEditingFilename(); int latestFileVersion = 0; try { latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); From 1ec46c20d5bf6dfcf06ed6c8c668bf873c2ce47b Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 15:13:17 +0800 Subject: [PATCH 074/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/Designer.java | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 458efaef9..edd26cb05 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -279,32 +279,34 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); - String fileName = VcsHelper.getEditingFilename(); - int latestFileVersion = 0; - try { - latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); - - } catch (Exception e1) { - FineLoggerFactory.getLogger().error(e1.getMessage()); - } - try { - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); - - } else { - WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - } - } catch (Exception e1) { - FineLoggerFactory.getLogger().error(e1.getMessage()); + if (DesignerEnvManager.getEnvManager().isVcsEnable()) { + dealWithVcs(jt); } - } }); return saveButton; } + /** + * 版本控制 + * @param jt + */ + private void dealWithVcs(JTemplate jt) { + try { + String fileName = VcsHelper.getEditingFilename(); + int latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { + WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } else { + WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error("vcs error: {}", e.getMessage()); + } + } + private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); From dd073e92553effd885bc5a779cfe54757f0234bb Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 15:33:51 +0800 Subject: [PATCH 075/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vcs/ui/FileVersionCellEditor.java | 15 ++++---------- .../mainframe/vcs/ui/FileVersionDialog.java | 5 +++-- .../mainframe/vcs/ui/FileVersionRowPanel.java | 6 +----- .../mainframe/vcs/ui/FileVersionsPanel.java | 6 +----- .../src/main/java/com/fr/start/Designer.java | 20 ++++++++----------- 5 files changed, 17 insertions(+), 35 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index 265a4f69f..b8bf36356 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -35,24 +35,17 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - String fileOfVersion = null; + String fileOfVersion; Component editor = row == 0 ? firstRowPanel : renderAndEditor; if (isSelected) { return editor; } else if (row == 0) { String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - try { - fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfCurrent(path.replaceFirst("/", "")); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } + fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfCurrent(path.replaceFirst("/", "")); } else { renderAndEditor.update((VcsEntity) value); - try { - fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfFileVersion(((VcsEntity) value).getFilename(), ((VcsEntity) value).getVersion()); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } + fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfFileVersion(((VcsEntity) value).getFilename(), ((VcsEntity) value).getVersion()); + } editor.setBackground(VcsHelper.TABLE_SELECT_BACKGROUND); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 4ac537a18..6bcb206a0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -7,8 +7,9 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; -import com.fr.report.ReportContext; import com.fr.report.entity.VcsEntity; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.AbstractAction; import javax.swing.Box; @@ -59,7 +60,7 @@ public class FileVersionDialog extends UIDialog { public void actionPerformed(ActionEvent e) { FileVersionDialog.this.setVisible(false); Date date = dateEditor.getValue(); - List vcsEntities = ReportContext.getInstance().getVcsController().queryFilterFileVersions(date, new Date(date.getTime() + DELAY), textField.getText()); + List vcsEntities = WorkContext.getCurrent().get(VcsOperator.class).getFilterVersions(date, new Date(date.getTime() + DELAY), textField.getText()); FileVersionTable.getInstance().updateModel(1, vcsEntities); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index 11464df74..45e80e262 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -63,11 +63,7 @@ public class FileVersionRowPanel extends JPanel { public void actionPerformed(ActionEvent evt) { if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Confirm"), Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Title"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - try { - WorkContext.getCurrent().get(VcsOperator.class).rollbackTo(vcsEntity); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } + WorkContext.getCurrent().get(VcsOperator.class).rollbackTo(vcsEntity); FileVersionsPanel.getInstance().exitVcs(vcsEntity.getFilename()); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index a85a2668e..2e68e0e33 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -134,11 +134,7 @@ public class FileVersionsPanel extends BasicPane { } titleLabel.setText(filename); String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - try { - FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); } public void showFileVersionsPane() { diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index edd26cb05..fae55cc4a 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -292,18 +292,14 @@ public class Designer extends BaseDesigner { * @param jt */ private void dealWithVcs(JTemplate jt) { - try { - String fileName = VcsHelper.getEditingFilename(); - int latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); - } else { - WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error("vcs error: {}", e.getMessage()); + String fileName = VcsHelper.getEditingFilename(); + int latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { + WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } else { + WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); } } From a69ccf48f7efe2c0a74d419846e480173fcfe888 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 15:43:03 +0800 Subject: [PATCH 076/196] rt --- designer-realize/src/main/java/com/fr/start/Designer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index fae55cc4a..3f194ca2a 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -46,6 +46,7 @@ import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.module.Module; import com.fr.module.ModuleContext; +import com.fr.report.entity.VcsEntity; import com.fr.runtime.FineRuntime; import com.fr.stable.BuildContext; import com.fr.stable.OperatingSystem; @@ -293,7 +294,8 @@ public class Designer extends BaseDesigner { */ private void dealWithVcs(JTemplate jt) { String fileName = VcsHelper.getEditingFilename(); - int latestFileVersion = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); + VcsEntity entity = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); + int latestFileVersion = entity == null ? 0 : entity.getVersion(); if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); From 837727f66c57d22356e9efb8726b7e0977a0e7bc Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 16:40:09 +0800 Subject: [PATCH 077/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VcsCacheFileNodeFile.java | 9 ++++---- .../mainframe/vcs/common/VcsHelper.java | 20 ++++++++++++++--- .../vcs/ui/FileVersionCellEditor.java | 3 +-- .../src/main/java/com/fr/start/Designer.java | 22 ++++++++++++------- 4 files changed, 36 insertions(+), 18 deletions(-) rename designer-base/src/main/java/com/fr/design/mainframe/vcs/{proxy => common}/VcsCacheFileNodeFile.java (88%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java similarity index 88% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java rename to designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java index 9ddc411d4..9933fc0e7 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/proxy/VcsCacheFileNodeFile.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java @@ -1,7 +1,6 @@ -package com.fr.design.mainframe.vcs.proxy; +package com.fr.design.mainframe.vcs.common; import com.fr.base.io.XMLEncryptUtils; -import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; @@ -30,7 +29,7 @@ public class VcsCacheFileNodeFile extends FileNodeFILE { * @throws Exception */ @Override - public InputStream asInputStream() throws Exception { + public InputStream asInputStream() { if (node == null) { return null; } @@ -56,13 +55,13 @@ public class VcsCacheFileNodeFile extends FileNodeFILE { * @throws Exception */ @Override - public OutputStream asOutputStream() throws Exception { + public OutputStream asOutputStream() { if (ComparatorUtils.equals(node, null)) { return null; } String envPath = node.getEnvPath(); - // envPath必须以reportlets开头 + // envPath必须以reportLets开头 if (!envPath.startsWith(VcsHelper.VCS_CACHE_DIR)) { return null; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 4e1809d6d..ee6135718 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -1,11 +1,13 @@ package com.fr.design.mainframe.vcs.common; import com.fr.base.BaseUtils; +import com.fr.design.DesignerEnvManager; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; +import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; @@ -13,14 +15,19 @@ import com.fr.workspace.WorkContext; import javax.swing.Icon; import javax.swing.border.EmptyBorder; import java.awt.Color; +import java.util.Date; import static com.fr.stable.StableUtils.pathJoin; - +/** + * Created by XiaXiang on 2019/4/17. + */ public class VcsHelper { - public final static String VCS_DIR = "vcs"; + private final static String VCS_DIR = "vcs"; public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); + private static final int MINUTE = 60 * 1000; + public final static String CURRENT_USERNAME = WorkContext.getCurrent().isLocal() ? Toolkit.i18nText("Fine-Design_Vcs_Local_User") @@ -51,7 +58,7 @@ public class VcsHelper { if (fileTree.getSelectionPaths().length == 0) { return 0; } - //所有的num减去模板的num,得到文件夹的num + //所有的num减去模板的count,得到文件夹的count return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; } @@ -82,5 +89,12 @@ public class VcsHelper { return editingFilePath; } + public static boolean needSaveVersion(VcsEntity entity) { + if (entity == null) { + return true; + } + return new Date().getTime() - entity.getTime().getTime() > DesignerEnvManager.getEnvManager().getSaveInterval() * MINUTE || StringUtils.isNotBlank(entity.getCommitMsg()); + } + } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index b8bf36356..ccb6fa93f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -6,9 +6,8 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.vcs.common.VcsHelper; -import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFile; +import com.fr.design.mainframe.vcs.common.VcsCacheFileNodeFile; import com.fr.file.filetree.FileNode; -import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 3f194ca2a..fc38b989d 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -32,7 +32,7 @@ import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.mainframe.vcs.proxy.VcsCacheFileNodeFile; +import com.fr.design.mainframe.vcs.common.VcsCacheFileNodeFile; import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; @@ -295,14 +295,20 @@ public class Designer extends BaseDesigner { private void dealWithVcs(JTemplate jt) { String fileName = VcsHelper.getEditingFilename(); VcsEntity entity = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); - int latestFileVersion = entity == null ? 0 : entity.getVersion(); - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); - } else { - WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + int latestFileVersion = 0; + if (entity != null) { + latestFileVersion = entity.getVersion(); } + if (VcsHelper.needSaveVersion(entity)) { + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { + WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } else { + WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + } + } + } private UIButton createUndoButton() { From 011b82f5f1567d278989d41aa9865a07045a1d15 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 16:46:18 +0800 Subject: [PATCH 078/196] rt --- designer-realize/src/main/java/com/fr/start/Designer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index fc38b989d..16e9cd687 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -265,7 +265,7 @@ public class Designer extends BaseDesigner { */ @Override public UIButton[] createUp() { - return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton(), }; + return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; } From 264b98625ec28a971278c2f6fb2763611ce20946 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 17:54:54 +0800 Subject: [PATCH 079/196] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/vcs/common/VcsHelper.java | 6 +-- .../src/main/java/com/fr/start/Designer.java | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index ee6135718..c5adecccf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -89,11 +89,11 @@ public class VcsHelper { return editingFilePath; } - public static boolean needSaveVersion(VcsEntity entity) { + public static boolean needDeleteVersion(VcsEntity entity) { if (entity == null) { - return true; + return false; } - return new Date().getTime() - entity.getTime().getTime() > DesignerEnvManager.getEnvManager().getSaveInterval() * MINUTE || StringUtils.isNotBlank(entity.getCommitMsg()); + return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getSaveInterval() * MINUTE && StringUtils.isBlank(entity.getCommitMsg()); } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 16e9cd687..a2f6c92c7 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -292,22 +292,31 @@ public class Designer extends BaseDesigner { * 版本控制 * @param jt */ - private void dealWithVcs(JTemplate jt) { - String fileName = VcsHelper.getEditingFilename(); - VcsEntity entity = WorkContext.getCurrent().get(VcsOperator.class).getLatestFileVersion(fileName); - int latestFileVersion = 0; - if (entity != null) { - latestFileVersion = entity.getVersion(); - } - if (VcsHelper.needSaveVersion(entity)) { - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - WorkContext.getCurrent().get(VcsOperator.class).saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); - } else { - WorkContext.getCurrent().get(VcsOperator.class).saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + private void dealWithVcs(final JTemplate jt) { + new Thread(new Runnable() { + @Override + public void run() { + String fileName = VcsHelper.getEditingFilename(); + VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); + VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); + int latestFileVersion = 0; + if (entity != null) { + latestFileVersion = entity.getVersion(); + } + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { + operator.saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } else { + operator.saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + } + VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndex(fileName, 1); + if (VcsHelper.needDeleteVersion(oldEntity)) { + operator.deleteVersion(oldEntity.getFilename(), oldEntity.getVersion()); + } + } - } + }).start(); } From 473a17bbcb46c74850bcd74dfe545afb57fa2810 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 18:11:06 +0800 Subject: [PATCH 080/196] bug fix --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index c5adecccf..c922531f4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -72,7 +72,7 @@ public class VcsHelper { } public static boolean isUnSelectedTemplate() { - return VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() > 1; + return VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() != 1; } public static String getEditingFilename() { From 499b9f70a68335741beddb90e6fea088e61df30a Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 18:13:20 +0800 Subject: [PATCH 081/196] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index c922531f4..06764bb9b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -76,7 +76,7 @@ public class VcsHelper { } public static String getEditingFilename() { - JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); String editingFilePath = jt.getEditingFILE().getPath(); if (editingFilePath.startsWith(ProjectConstants.REPORTLETS_NAME)) { editingFilePath = editingFilePath.replaceFirst(ProjectConstants.REPORTLETS_NAME, StringUtils.EMPTY); From 06128b908828ed61c2a28590c62d7849ac51d263 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 18:36:04 +0800 Subject: [PATCH 082/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrameFileDealerPane.java | 6 +++--- .../fr/design/mainframe/vcs/ui/FileVersionCellEditor.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 7685974df..32b9d1140 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -302,13 +302,13 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) - closeOpendTemplate(path, isCurrentEditing); + closeOpenedTemplate(path, isCurrentEditing); FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); fileVersionTablePanel.showFileVersionsPane(); } - private void closeOpendTemplate(String path, boolean isCurrentEditing) { - for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { + private void closeOpenedTemplate(String path, boolean isCurrentEditing) { + for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { if (isCurrentEditing) { MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index ccb6fa93f..bdb4bc1ee 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -50,7 +50,7 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe editor.setBackground(VcsHelper.TABLE_SELECT_BACKGROUND); if (StringUtils.isNotEmpty(fileOfVersion)) { //先关闭当前打开的模板版本 - JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); MutilTempalteTabPane.getInstance().closeFormat(jt); From 68999ff909bad062c5625c1da4a0309e1f243199 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 19:29:59 +0800 Subject: [PATCH 083/196] =?UTF-8?q?REPORT-14835=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/common/VcsHelper.java | 16 ++++++++-------- .../mainframe/vcs/ui/EditFileVersionDialog.java | 11 ++++++----- .../mainframe/vcs/ui/FileVersionDialog.java | 3 ++- .../mainframe/vcs/ui/FileVersionRowPanel.java | 4 ++-- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 06764bb9b..310d4e7e3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -1,12 +1,12 @@ package com.fr.design.mainframe.vcs.common; -import com.fr.base.BaseUtils; import com.fr.design.DesignerEnvManager; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; +import com.fr.general.IOUtils; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; @@ -40,13 +40,13 @@ public class VcsHelper { public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); - public final static Icon VCS_LIST_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_list.png"); - public final static Icon VCS_BACK_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_back.png"); - public final static Icon VCS_FILTER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_filter@1x.png"); - public final static Icon VCS_EDIT_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_edit.png"); - public final static Icon VCS_DELETE_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_delete.png"); - public final static Icon VCS_USER_PNG = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_user@1x.png"); - public final static Icon VCS_REVERT = BaseUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_revert.png"); + public final static Icon VCS_LIST_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_list.png"); + public final static Icon VCS_BACK_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_back.png"); + public final static Icon VCS_FILTER_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_filter@1x.png"); + public final static Icon VCS_EDIT_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_edit.png"); + public final static Icon VCS_DELETE_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_delete.png"); + public final static Icon VCS_USER_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_user@1x.png"); + public final static Icon VCS_REVERT = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_revert.png"); private static int containsFolderCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java index 455b0dac1..f6533de4d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -17,6 +17,7 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Frame; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -42,7 +43,7 @@ public class EditFileVersionDialog extends UIDialog { initComponents(); setModal(true); - setTitle(InterProviderFactory.getProvider().getLocText("Fine-Design_Vcs_Save_Version")); + setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_Save_Version")); setSize(300, 220); setResizable(false); GUICoreUtils.centerWindow(this); @@ -52,13 +53,13 @@ public class EditFileVersionDialog extends UIDialog { private void initComponents() { JPanel fontPane = new JPanel(new BorderLayout()); - fontPane.add(new UILabel(" " + InterProviderFactory.getProvider().getLocText("Fine-Design_Vcs_Version_Message") + ":"), BorderLayout.NORTH); + fontPane.add(new UILabel(" " + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_Version_Message") + ":"), BorderLayout.NORTH); msgTestArea.setBorder(null); UIScrollPane scrollPane = new UIScrollPane(msgTestArea); Component[][] components = new Component[][]{ - new Component[]{new UILabel(" " + InterProviderFactory.getProvider().getLocText("Fine-Design_Vcs_Version_Number") + ":"), versionLabel}, + new Component[]{new UILabel(" " + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_Version_Number") + ":"), versionLabel}, new Component[]{fontPane, scrollPane} }; double[] rowSizes = new double[]{25, 100}; @@ -69,8 +70,8 @@ public class EditFileVersionDialog extends UIDialog { JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT)); add(buttonPane, BorderLayout.SOUTH); - UIButton ok = new UIButton(InterProviderFactory.getProvider().getLocText("OK")); - UIButton cancel = new UIButton(InterProviderFactory.getProvider().getLocText("Cancel")); + UIButton ok = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")); + UIButton cancel = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Design_Action_Cancel")); buttonPane.add(ok); buttonPane.add(cancel); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 6bcb206a0..6f6c92538 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -8,6 +8,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; import com.fr.report.entity.VcsEntity; +import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; @@ -43,7 +44,7 @@ public class FileVersionDialog extends UIDialog { upBox.setBorder(EMPTY_BORDER_BOTTOM); upBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_buildTime"))); upBox.add(Box.createHorizontalGlue()); - dateEditor = new DateEditor(new Date(), true, "", UIDatePicker.STYLE_CN_DATE1); + dateEditor = new DateEditor(new Date(), true, StringUtils.EMPTY, UIDatePicker.STYLE_CN_DATE1); upBox.add(dateEditor); Box downBox = Box.createHorizontalBox(); downBox.setBorder(EMPTY_BORDER_BOTTOM); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index 45e80e262..cc2e39983 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -32,7 +32,7 @@ public class FileVersionRowPanel extends JPanel { private VcsEntity vcsEntity; private UILabel versionLabel = new UILabel(); - private UILabel usernameLabel = new UILabel("", VcsHelper.VCS_USER_PNG, SwingConstants.LEFT); + private UILabel usernameLabel = new UILabel(StringUtils.EMPTY, VcsHelper.VCS_USER_PNG, SwingConstants.LEFT); private UITextPane timeAndMsgLabel = new UITextPane(); private UILabel timeLabel = new UILabel(); private EditFileVersionDialog editDialog; @@ -74,7 +74,7 @@ public class FileVersionRowPanel extends JPanel { deleteBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { - if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Version_Delete_Confirm"), Toolkit.i18nText("FR-Designer_Remove"), + if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Delete-Confirm"), Toolkit.i18nText("Fine-Design_Vcs_Remove"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { try { WorkContext.getCurrent().get(VcsOperator.class).deleteVersion(vcsEntity.getFilename(), vcsEntity.getVersion()); From 13eb847dc074fda896d3204a05ac7e60777d7372 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 19:41:41 +0800 Subject: [PATCH 084/196] =?UTF-8?q?REPORT-14835=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index cc2e39983..78f8c62f4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -57,7 +57,7 @@ public class FileVersionRowPanel extends JPanel { // confirm + delete UIButton confirmBtn = new UIButton(VcsHelper.VCS_REVERT); confirmBtn.set4ToolbarButton(); - confirmBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Revert")); + confirmBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Revert")); confirmBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { @@ -70,7 +70,7 @@ public class FileVersionRowPanel extends JPanel { }); UIButton deleteBtn = new UIButton(VcsHelper.VCS_DELETE_PNG); deleteBtn.set4ToolbarButton(); - deleteBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Delete")); + deleteBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Delete")); deleteBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { @@ -93,6 +93,7 @@ public class FileVersionRowPanel extends JPanel { }); UIButton editBtn = new UIButton(VcsHelper.VCS_EDIT_PNG); editBtn.set4ToolbarButton(); + editBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Edit")); editBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { From b8e00090508f20e43dfd542b0d050569edf252e6 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Tue, 23 Apr 2019 19:48:38 +0800 Subject: [PATCH 085/196] =?UTF-8?q?REPORT-14835=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/vcs/common/VcsHelper.java | 14 +++++++------- .../fr/design/images/vcs}/icon_back_normal@2x.png | Bin .../com/fr/design/images/vcs}/icon_delete.png | Bin .../com/fr/design/images/vcs}/icon_delete@2x.png | Bin .../com/fr/design/images/vcs}/icon_edit.png | Bin .../com/fr/design/images/vcs}/icon_edit@2x.png | Bin .../com/fr/design/images/vcs}/icon_filter@1x.png | Bin .../com/fr/design/images/vcs}/icon_filter@2x.png | Bin .../fr/design/images/vcs}/icon_list_disabled.png | Bin .../design/images/vcs}/icon_list_disabled@2x.png | Bin .../fr/design/images/vcs}/icon_list_normal@2x.png | Bin .../com/fr/design/images/vcs}/icon_revert.png | Bin .../com/fr/design/images/vcs}/icon_revert@2x.png | Bin .../fr/design/images/vcs}/icon_save_disabled.png | Bin .../design/images/vcs}/icon_save_disabled@2x.png | Bin .../fr/design/images/vcs}/icon_save_normal@2x.png | Bin .../com/fr/design/images/vcs}/icon_user@1x.png | Bin .../com/fr/design/images/vcs}/icon_user@2x.png | Bin .../com/fr/design/images/vcs}/vcs_back.png | Bin .../com/fr/design/images/vcs}/vcs_list.png | Bin .../com/fr/design/images/vcs}/vcs_save.png | Bin 21 files changed, 7 insertions(+), 7 deletions(-) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_back_normal@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_delete.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_delete@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_edit.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_edit@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_filter@1x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_filter@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_list_disabled.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_list_disabled@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_list_normal@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_revert.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_revert@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_save_disabled.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_save_disabled@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_save_normal@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_user@1x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/icon_user@2x.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/vcs_back.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/vcs_list.png (100%) rename designer-base/src/main/{java/com/fr/design/mainframe/vcs/images => resources/com/fr/design/images/vcs}/vcs_save.png (100%) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 310d4e7e3..27c606f4c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -40,13 +40,13 @@ public class VcsHelper { public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); - public final static Icon VCS_LIST_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_list.png"); - public final static Icon VCS_BACK_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/vcs_back.png"); - public final static Icon VCS_FILTER_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_filter@1x.png"); - public final static Icon VCS_EDIT_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_edit.png"); - public final static Icon VCS_DELETE_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_delete.png"); - public final static Icon VCS_USER_PNG = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_user@1x.png"); - public final static Icon VCS_REVERT = IOUtils.readIcon("/com/fr/design/mainframe/vcs/images/icon_revert.png"); + public final static Icon VCS_LIST_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/vcs_list.png"); + public final static Icon VCS_BACK_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/vcs_back.png"); + public final static Icon VCS_FILTER_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_filter@1x.png"); + public final static Icon VCS_EDIT_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_edit.png"); + public final static Icon VCS_DELETE_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_delete.png"); + public final static Icon VCS_USER_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_user@1x.png"); + public final static Icon VCS_REVERT = IOUtils.readIcon("/com/fr/design/images/vcs/icon_revert.png"); private static int containsFolderCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_back_normal@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_back_normal@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_back_normal@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_back_normal@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_delete.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_delete.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_delete@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_delete@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_delete@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_edit.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_edit.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_edit@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_edit@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_edit@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@1x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_filter@1x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@1x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_filter@1x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_filter@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_filter@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_filter@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_list_disabled.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_list_disabled.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_list_disabled@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_disabled@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_list_disabled@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_normal@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_list_normal@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_list_normal@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_list_normal@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_revert.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_revert.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_revert@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_revert@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_revert@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_save_disabled.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_save_disabled.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_save_disabled@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_disabled@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_save_disabled@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_normal@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_save_normal@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_save_normal@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_save_normal@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_user@1x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_user@1x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_user@1x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_user@1x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_user@2x.png b/designer-base/src/main/resources/com/fr/design/images/vcs/icon_user@2x.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/icon_user@2x.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/icon_user@2x.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_back.png b/designer-base/src/main/resources/com/fr/design/images/vcs/vcs_back.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_back.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/vcs_back.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_list.png b/designer-base/src/main/resources/com/fr/design/images/vcs/vcs_list.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_list.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/vcs_list.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_save.png b/designer-base/src/main/resources/com/fr/design/images/vcs/vcs_save.png similarity index 100% rename from designer-base/src/main/java/com/fr/design/mainframe/vcs/images/vcs_save.png rename to designer-base/src/main/resources/com/fr/design/images/vcs/vcs_save.png From 6f1d52b6bb642730158d895fd505b352a6603893 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Wed, 24 Apr 2019 15:56:02 +0800 Subject: [PATCH 086/196] =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E5=88=A0=E9=99=A4=EF=BC=9B=20=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=82=B9=E4=B8=8A=E4=BC=A0=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AF=B9=E4=B8=8D=E4=B8=8A=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/FileEntityBuilder.java | 48 +++++++------------ .../impl/AbstractSendDataToCloud.java | 2 +- .../impl/FocusPointMessageUploader.java | 26 +++++----- 3 files changed, 31 insertions(+), 45 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index c23a3b999..24d14edf3 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -9,7 +9,6 @@ import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.CommonUtils; import com.fr.stable.EncodeConstants; -import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.third.org.apache.http.HttpEntity; @@ -25,8 +24,11 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.UUID; import static com.fr.third.org.apache.http.HttpStatus.SC_OK; @@ -41,41 +43,16 @@ public class FileEntityBuilder { private static final String ATTR_SIGNATURE = "signature"; private static final String ATTR_KEY = "key"; private static final String FOCUS_POINT_FILE_ROOT_PATH = "FocusPoint"; - /** - * 文件名 - */ - private String fileName; - /** - * 文件的完整路径 - */ - private String pathName; + /** * 文件夹路径 */ private String folderName; - public FileEntityBuilder(String fileName, String pathName, String folderName) { - this.fileName = fileName; - this.pathName = pathName; + public FileEntityBuilder(String folderName) { this.folderName = folderName; } - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getPathName() { - return pathName; - } - - public void setPathName(String pathName) { - this.pathName = pathName; - } - public String getFolderName() { return folderName; } @@ -97,14 +74,19 @@ public class FileEntityBuilder { return zipFile; } - public void generateFile(JSONArray jsonArray, String pathName) { + public void generateFile(JSONArray jsonArray, String folderName) { + if (jsonArray.size() == 0) { + return; + } try { String content = jsonArray.toString(); - File file = new File(pathName + ".json"); + String fileName = String.valueOf(UUID.randomUUID()); + File file = new File(folderName + File.separator + fileName + ".json"); StableUtils.makesureFileExist(file); FileOutputStream out = new FileOutputStream(file); InputStream in = new ByteArrayInputStream(content.getBytes(EncodeConstants.ENCODING_UTF_8)); IOUtils.copyBinaryTo(in, out); + in.close(); out.close(); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); @@ -112,7 +94,7 @@ public class FileEntityBuilder { } public void deleteFileAndZipFile(File zipFile, String pathName) { - File file = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), pathName)); + File file = new File(pathName); CommonUtils.deleteFile(file); CommonUtils.deleteFile(zipFile); } @@ -124,9 +106,11 @@ public class FileEntityBuilder { * @throws IOException */ public static void uploadFile(File file, String keyFileName) throws IOException { + Date today=new Date(); + SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd"); HttpClient httpclient = new DefaultHttpClient(); try { - String signedUrl = generateSignedUploadUrl(FOCUS_POINT_FILE_ROOT_PATH + File.separator +keyFileName); + String signedUrl = generateSignedUploadUrl(FOCUS_POINT_FILE_ROOT_PATH + File.separator + f.format(today) + File.separator +keyFileName); if(StringUtils.isEmpty(signedUrl)){ FineLoggerFactory.getLogger().error("signedUrl is null."); return; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java index b6d18235e..4321d2818 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java @@ -102,7 +102,7 @@ public abstract class AbstractSendDataToCloud implements XMLable { try { JSONArray jsonArray = dealWithSendFunctionContent(points); //生成json文件 - fileEntityBuilder.generateFile(jsonArray, getFileEntityBuilder().getPathName()); + fileEntityBuilder.generateFile(jsonArray, getFileEntityBuilder().getFolderName()); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java index 668e7fa41..33adf8e2d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -26,6 +26,7 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { private static final String TAG = "FocusPointMessageTag"; private static final String SEPARATOR = "_"; private static final String FOCUS_POINT = "FocusPoint"; + private static final long DELTA = 24 * 3600 * 1000L; private static volatile FocusPointMessageUploader instance; public static FocusPointMessageUploader getInstance() { @@ -46,13 +47,13 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { FocusPoint focusPoint = (FocusPoint)t; JSONObject jo = new JSONObject(); jo.put("id",focusPoint.getId()); - jo.put("text",focusPoint.getId()); - jo.put("source",focusPoint.getId()); - jo.put("time",focusPoint.getId()); - jo.put("username",focusPoint.getId()); - jo.put("ip",focusPoint.getId()); - jo.put("title",focusPoint.getId()); - jo.put("body",focusPoint.getId()); + jo.put("text",focusPoint.getText()); + jo.put("source",focusPoint.getSource()); + jo.put("time",focusPoint.getTime()); + jo.put("username",focusPoint.getUsername()); + jo.put("ip",focusPoint.getIp()); + jo.put("title",focusPoint.getTitle()); + jo.put("body",focusPoint.getBody()); ja.put(jo); } return ja; @@ -61,10 +62,13 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { public void sendToCloudCenter() { MessageCollectUtils.readXMLFile(instance, getLastTimeFile()); long currentTime = new Date().getTime(); - long lastTIme = MessageCollectUtils.getLastTimeMillis(lastTime); + long lastTime = MessageCollectUtils.getLastTimeMillis(this.lastTime); + if (currentTime - lastTime <= DELTA) { + return; + } try { generatePath(); - queryData(currentTime, lastTIme, FocusPoint.class); + queryData(currentTime, lastTime, FocusPoint.class); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage()); } @@ -97,9 +101,7 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { append(ProductConstants.MINOR_VERSION).append(SEPARATOR). append(uuid).append(SEPARATOR).append(bbsUserName).append(SEPARATOR). append(UUID.randomUUID()); - String fileName = String.valueOf(UUID.randomUUID()); - String pathName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString(), fileName); String folderName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString()); - setFileEntityBuilder(new FileEntityBuilder(fileName, pathName, folderName)); + setFileEntityBuilder(new FileEntityBuilder(folderName)); } } From 11d5a16adf592a8d27e219fe1c87aa43a4e08f80 Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Wed, 24 Apr 2019 19:16:10 +0800 Subject: [PATCH 087/196] =?UTF-8?q?=E4=BD=BF=E7=94=A8JDateTime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messagecollect/entity/FileEntityBuilder.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index 24d14edf3..2555a2632 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -11,6 +11,7 @@ import com.fr.stable.CommonUtils; import com.fr.stable.EncodeConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.third.jodd.datetime.JDateTime; import com.fr.third.org.apache.http.HttpEntity; import com.fr.third.org.apache.http.HttpResponse; import com.fr.third.org.apache.http.client.HttpClient; @@ -24,8 +25,6 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -106,11 +105,10 @@ public class FileEntityBuilder { * @throws IOException */ public static void uploadFile(File file, String keyFileName) throws IOException { - Date today=new Date(); - SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd"); + String today = new JDateTime().toString("YYYY-MM-DD"); HttpClient httpclient = new DefaultHttpClient(); try { - String signedUrl = generateSignedUploadUrl(FOCUS_POINT_FILE_ROOT_PATH + File.separator + f.format(today) + File.separator +keyFileName); + String signedUrl = generateSignedUploadUrl(FOCUS_POINT_FILE_ROOT_PATH + File.separator + today + File.separator +keyFileName); if(StringUtils.isEmpty(signedUrl)){ FineLoggerFactory.getLogger().error("signedUrl is null."); return; From 2e26c1e1907baa08a57d2637b601ac6530d3fd58 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Thu, 25 Apr 2019 10:19:58 +0800 Subject: [PATCH 088/196] =?UTF-8?q?REPORT-14835=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/vcs/common/VcsHelper.java | 4 ++- .../mainframe/vcs/ui/FileVersionDialog.java | 32 ++++++++++--------- .../mainframe/vcs/ui/FileVersionRowPanel.java | 21 ++++++------ 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 27c606f4c..ecde0e133 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -34,8 +34,10 @@ public class VcsHelper { : WorkContext.getCurrent().getConnection().getUserName(); public final static Color TABLE_SELECT_BACKGROUND = new Color(0xD8F2FD); + public final static Color COPY_VERSION_BTN_COLOR = new Color(0x419BF9); - public final static EmptyBorder EMPTY_BORDER = new EmptyBorder(5, 10, 0, 10); + + public final static EmptyBorder EMPTY_BORDER = new EmptyBorder(10, 10, 0, 10); public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 6f6c92538..cb7234640 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -7,6 +7,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; @@ -17,6 +18,7 @@ import javax.swing.Box; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Window; import java.awt.event.ActionEvent; @@ -24,14 +26,12 @@ import java.awt.event.ActionListener; import java.util.Date; import java.util.List; -import static com.fr.design.mainframe.vcs.common.VcsHelper.EMPTY_BORDER; -import static com.fr.design.mainframe.vcs.common.VcsHelper.EMPTY_BORDER_BOTTOM; public class FileVersionDialog extends UIDialog { public static final long DELAY = 24 * 60 * 60 * 1000; - private UIButton okBtn = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); - private UIButton cancelBtn = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Utils_Design_Action_Cancel")); + private UIButton okBtn; + private UIButton cancelBtn; private DateEditor dateEditor; private UITextField textField; @@ -39,23 +39,25 @@ public class FileVersionDialog extends UIDialog { public FileVersionDialog(Frame frame) { super(frame); setUndecorated(true); + setModal(true); JPanel panel = new JPanel(new BorderLayout()); Box upBox = Box.createHorizontalBox(); - upBox.setBorder(EMPTY_BORDER_BOTTOM); - upBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_buildTime"))); + upBox.setBorder(VcsHelper.EMPTY_BORDER); + upBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_buildTime") + " ")); upBox.add(Box.createHorizontalGlue()); dateEditor = new DateEditor(new Date(), true, StringUtils.EMPTY, UIDatePicker.STYLE_CN_DATE1); upBox.add(dateEditor); Box downBox = Box.createHorizontalBox(); - downBox.setBorder(EMPTY_BORDER_BOTTOM); - downBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_CommitMsg"))); + downBox.setBorder(VcsHelper.EMPTY_BORDER); + downBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_CommitMsg") + " ")); textField = new UITextField(); downBox.add(textField); - Box box2 = Box.createHorizontalBox(); - box2.add(Box.createHorizontalGlue()); - box2.setBorder(EMPTY_BORDER); - box2.add(okBtn); - box2.add(cancelBtn); + JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + okBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")); + cancelBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Design_Action_Cancel")); + buttonPane.setBorder(VcsHelper.EMPTY_BORDER); + buttonPane.add(okBtn); + buttonPane.add(cancelBtn); okBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -74,9 +76,9 @@ public class FileVersionDialog extends UIDialog { }); panel.add(upBox, BorderLayout.NORTH); panel.add(downBox, BorderLayout.CENTER); - panel.add(box2, BorderLayout.SOUTH); + panel.add(buttonPane, BorderLayout.SOUTH); add(panel); - setSize(new Dimension(220, 100)); + setSize(new Dimension(230, 105)); centerWindow(this); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index 78f8c62f4..657e990cc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -33,7 +33,7 @@ public class FileVersionRowPanel extends JPanel { private VcsEntity vcsEntity; private UILabel versionLabel = new UILabel(); private UILabel usernameLabel = new UILabel(StringUtils.EMPTY, VcsHelper.VCS_USER_PNG, SwingConstants.LEFT); - private UITextPane timeAndMsgLabel = new UITextPane(); + private UITextPane msgLabel = new UITextPane(); private UILabel timeLabel = new UILabel(); private EditFileVersionDialog editDialog; @@ -49,12 +49,12 @@ public class FileVersionRowPanel extends JPanel { // msg - timeAndMsgLabel.setBorder(VcsHelper.EMPTY_BORDER); - timeAndMsgLabel.setOpaque(false); - timeAndMsgLabel.setBackground(new Color(0, 0, 0, 0)); - timeAndMsgLabel.setEditable(false); + msgLabel.setBorder(VcsHelper.EMPTY_BORDER); + msgLabel.setOpaque(false); + msgLabel.setBackground(new Color(0, 0, 0, 0)); + msgLabel.setEditable(false); - // confirm + delete + // confirm + delete + edit UIButton confirmBtn = new UIButton(VcsHelper.VCS_REVERT); confirmBtn.set4ToolbarButton(); confirmBtn.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Revert")); @@ -108,9 +108,10 @@ public class FileVersionRowPanel extends JPanel { downPane.add(usernameLabel); downPane.setBorder(VcsHelper.EMPTY_BORDER_BOTTOM); downPane.add(Box.createHorizontalGlue()); + timeLabel.setForeground(VcsHelper.COPY_VERSION_BTN_COLOR); downPane.add(timeLabel); add(upPane, BorderLayout.NORTH); - add(timeAndMsgLabel, BorderLayout.CENTER); + add(msgLabel, BorderLayout.CENTER); add(downPane, BorderLayout.SOUTH); } @@ -126,11 +127,11 @@ public class FileVersionRowPanel extends JPanel { this.vcsEntity = fileVersion; versionLabel.setText(String.format("V.%s", fileVersion.getVersion())); usernameLabel.setText(fileVersion.getUsername()); - timeAndMsgLabel.setText(StringUtils.EMPTY); + msgLabel.setText(StringUtils.EMPTY); timeLabel.setText(timeStr(fileVersion.getTime())); try { - StyledDocument doc = timeAndMsgLabel.getStyledDocument(); - Style style = timeAndMsgLabel.getLogicalStyle(); + StyledDocument doc = msgLabel.getStyledDocument(); + Style style = msgLabel.getLogicalStyle(); StyleConstants.setForeground(style, Color.BLACK); doc.insertString(doc.getLength(), " " + fileVersion.getCommitMsg(), style); } catch (BadLocationException e) { From ba83e2bdcc36f9c9a46d743d755de786e9142016 Mon Sep 17 00:00:00 2001 From: rinoux Date: Thu, 25 Apr 2019 13:44:58 +0800 Subject: [PATCH 089/196] =?UTF-8?q?BI-44084=20=E8=99=9A=E6=8B=9F=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E9=83=A8=E7=BD=B2=E6=97=B6=E7=9A=84appname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/onlineupdate/ui/dialog/RestoreResultDialog.java | 7 +++---- .../fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java index 680d3190d..6496b662c 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -1,6 +1,5 @@ package com.fr.design.onlineupdate.ui.dialog; -import com.fr.base.FRContext; import com.fr.design.RestartHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; @@ -8,7 +7,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.onlineupdate.domain.UpdateConstants; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.locale.InterProviderFactory; +import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; @@ -176,8 +175,8 @@ public class RestoreResultDialog extends JDialog { String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; for (String file : files) { map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java index 570042d4e..d9d7a0181 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -1,6 +1,5 @@ package com.fr.design.onlineupdate.ui.dialog; -import com.fr.base.FRContext; import com.fr.design.RestartHelper; import com.fr.design.constants.LayoutConstants; import com.fr.design.dialog.UIDialog; @@ -684,7 +683,7 @@ public class UpdateMainDialog extends UIDialog { for (String file : files) { try { IOUtils.copy( - new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), new File(StableUtils.pathJoin(todayBackupDir))); } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage()); @@ -725,8 +724,8 @@ public class UpdateMainDialog extends UIDialog { private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { for (String file : files) { map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } From 11486cef0f9dcd742d9d811576e69586493441b4 Mon Sep 17 00:00:00 2001 From: rinoux Date: Thu, 25 Apr 2019 14:22:46 +0800 Subject: [PATCH 090/196] update --- .../design/onlineupdate/ui/dialog/RestoreResultDialog.java | 4 ++-- .../fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java index 6496b662c..fb840d95c 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -175,8 +175,8 @@ public class RestoreResultDialog extends JDialog { String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; for (String file : files) { map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java index d9d7a0181..9438df33b 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -683,7 +683,7 @@ public class UpdateMainDialog extends UIDialog { for (String file : files) { try { IOUtils.copy( - new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), new File(StableUtils.pathJoin(todayBackupDir))); } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage()); @@ -724,8 +724,8 @@ public class UpdateMainDialog extends UIDialog { private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { for (String file : files) { map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } From 018f6386e297b5ac001689c541d52f886b9efc7a Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 25 Apr 2019 15:51:51 +0800 Subject: [PATCH 091/196] =?UTF-8?q?REPORT-16494=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86,=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E6=9C=89=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/template/info/SendHelper.java | 17 +++++---- .../template/info/SendHelperTest.java | 35 +++++++++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java index 1f7aeec63..8b188397c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java @@ -5,8 +5,8 @@ import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.http.HttpToolbox; import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; -import java.io.IOException; import java.util.HashMap; /** @@ -30,14 +30,17 @@ class SendHelper { } private static boolean sendSingleTemplateInfo(String url, String content) { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", content); - try { - String res = HttpToolbox.get(url, para); + HashMap para = new HashMap<>(); + para.put("token", SiteCenterToken.generateToken()); + para.put("content", content); + + String res = HttpToolbox.post(url, para); + return ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - } catch (IOException ignore) { + } catch (Throwable e) { + // 客户不需要关心,错误等级为 debug 就行了 + FineLoggerFactory.getLogger().debug(e.getMessage(), e); } return false; } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java new file mode 100644 index 000000000..fb89143d8 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/SendHelperTest.java @@ -0,0 +1,35 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.invoke.Reflect; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; + +import java.io.StringReader; + +import static org.junit.Assert.assertTrue; + +/** + * Created by plough on 2019/4/25. + */ +public class SendHelperTest { + private static final String CONSUMING_URL = "http://cloud.fanruan.com/api/monitor/record_of_reports_consuming/single"; + private static final String PROCESS_URL = "http://cloud.fanruan.com/api/monitor/record_of_reports_process/single"; + + private static final String NORMAL_INFO = "\n" + + "\n" + + "\n" + + ""; + + // 只在调试的时候运行,不需要每次都自动运行 + public static void main(String[] args) throws XMLStreamException { + StringReader sr = new StringReader(NORMAL_INFO); + XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); + TemplateInfo templateInfo = TemplateInfo.newInstanceByRead(xmlReader); + + boolean res = Reflect.on(SendHelper.class).call("sendSingleTemplateInfo", CONSUMING_URL, templateInfo.getConsumingMapJsonString()).get(); + assertTrue(res); + + boolean res2 = Reflect.on(SendHelper.class).call("sendSingleTemplateInfo", PROCESS_URL, templateInfo.getProcessMapJsonString()).get(); + assertTrue(res2); + } +} From 476d3821d682ffe2bd4f9161588345130f4589fd Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 25 Apr 2019 15:53:34 +0800 Subject: [PATCH 092/196] =?UTF-8?q?REPORT-16494=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86,=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E6=9C=89=E6=8A=A5=E9=94=99=3D>?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/template/info/SendHelper.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java index 8b188397c..b3437e4d3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java @@ -30,13 +30,12 @@ class SendHelper { } private static boolean sendSingleTemplateInfo(String url, String content) { - try { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", content); + HashMap para = new HashMap<>(); + para.put("token", SiteCenterToken.generateToken()); + para.put("content", content); + try { String res = HttpToolbox.post(url, para); - return ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); } catch (Throwable e) { // 客户不需要关心,错误等级为 debug 就行了 From 376cc6c7b5b37016c5be9b261f5782ea14f711c6 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 25 Apr 2019 15:54:37 +0800 Subject: [PATCH 093/196] =?UTF-8?q?REPORT-16494=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86,=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E6=9C=89=E6=8A=A5=E9=94=99=3D>?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/template/info/SendHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java index b3437e4d3..db489fb3c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/SendHelper.java @@ -8,6 +8,7 @@ import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import java.util.HashMap; +import java.util.Map; /** * 负责向服务器发送信息 @@ -30,7 +31,7 @@ class SendHelper { } private static boolean sendSingleTemplateInfo(String url, String content) { - HashMap para = new HashMap<>(); + Map para = new HashMap<>(); para.put("token", SiteCenterToken.generateToken()); para.put("content", content); From 9a7ff547b9c6b2c174560484c5ac9b50b1bf0744 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 25 Apr 2019 18:14:07 +0800 Subject: [PATCH 094/196] =?UTF-8?q?REPORT-16456=20=E3=80=9010.0.3=E5=9F=8B?= =?UTF-8?q?=E7=82=B9-=E6=A8=A1=E6=9D=BF=E3=80=91=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/template/info/TemplateInfoCollector.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index c16c6b627..e7fc95594 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -145,10 +145,6 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { } private boolean shouldCollectInfo() { - //只收集本地环境的 - if (!WorkContext.getCurrent().isLocal()) { - return false; - } return DesignerEnvManager.getEnvManager().isJoinProductImprove() && FRContext.isChineseEnv(); } From d1953594aa7884f09579be25f496416b0fce2fd0 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 26 Apr 2019 10:16:23 +0800 Subject: [PATCH 095/196] =?UTF-8?q?REPORT-16490=20=E5=A4=9Atab=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E6=8E=A7=E4=BB=B6=E5=90=8D=E7=A7=B0=E5=8F=AA?= =?UTF-8?q?=E8=83=BD=E8=AF=BB=E5=8F=96=E5=88=B0=E7=AC=AC=E4=B8=80=E4=B8=AA?= =?UTF-8?q?tab=E5=9D=97=E9=87=8C=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/FormModelAdapter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormModelAdapter.java b/designer-form/src/main/java/com/fr/design/mainframe/FormModelAdapter.java index 670c2fa48..090969d34 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormModelAdapter.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormModelAdapter.java @@ -78,6 +78,10 @@ public class FormModelAdapter extends DesignModelAdapter> list.add(new WidgetName(widget.getWidgetName())); } } + @Override + public boolean dealWithAllCards() { + return true; + } }); return list; } @@ -135,4 +139,4 @@ public class FormModelAdapter extends DesignModelAdapter> protected Parameter[] getLatestParameters() { return this.getBook().getParameters(); } -} \ No newline at end of file +} From 471a2852aff5c6141319e3eba053b199ea9136dd Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 11:06:20 +0800 Subject: [PATCH 096/196] =?UTF-8?q?REPORT-16517=20=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 13 ++++++- .../design/actions/file/PreferencePane.java | 37 +++++++++++++++---- .../DesignerFrameFileDealerPane.java | 5 ++- .../mainframe/vcs/common/VcsHelper.java | 10 ++++- 4 files changed, 54 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 6d8d5b9c0..2c028670e 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -132,6 +132,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private String jdkHome; private boolean vcsEnable; private boolean saveCommit; + private boolean useInterval; private int saveInterval; @@ -1608,7 +1609,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setUndoLimit(reader.getAttrAsInt("undoLimit", 5)); this.setDefaultStringToFormula(reader.getAttrAsBoolean("defaultStringToFormula", false)); this.setVcsEnable(reader.getAttrAsBoolean("supportVcs", true)); - this.setSaveCommit(reader.getAttrAsBoolean("saveCommit", false)); + this.setSaveCommit(reader.getAttrAsBoolean("saveCommit", true)); + this.setUseInterval(reader.getAttrAsBoolean("userInterval", true)); this.setSaveInterval(reader.getAttrAsInt("saveInterval", 60)); if ((tmpVal = reader.getAttrAsString("gridLineColor", null)) != null) { this.setGridLineColor(new Color(Integer.parseInt(tmpVal))); @@ -1947,6 +1949,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .attr("supportCellEditorDef", this.isSupportCellEditorDef()) .attr("supportVcs", this.isVcsEnable()) .attr("saveInterval", this.getSaveInterval()) + .attr("userInterval", this.isUseInterval()) .attr("saveCommit", this.isSaveCommit()) .attr("isDragPermited", this.isDragPermited()) .attr("gridLineColor", this.getGridLineColor().getRGB()) @@ -1982,4 +1985,12 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { public void setSaveInterval(int saveInterval) { this.saveInterval = saveInterval; } + + public boolean isUseInterval() { + return useInterval; + } + + public void setUseInterval(boolean useInterval) { + this.useInterval = useInterval; + } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index e7db515af..da5d381c3 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -23,6 +23,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; @@ -139,7 +140,9 @@ public class PreferencePane extends BasicPane { private UICheckBox vcsEnableCheckBox; private UICheckBox saveCommitCheckBox; + private UICheckBox useIntervalCheckBox; private IntegerEditor saveIntervalEditor; + private UILabel remindVcsLabel; @@ -205,15 +208,22 @@ public class PreferencePane extends BasicPane { private void createVcsSettingPane(JPanel generalPane) { JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); generalPane.add(vcsPane); + remindVcsLabel = new UILabel("Fine-Design_Vcs_Remind"); + remindVcsLabel.setVisible(!VcsHelper.needInit()); vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); saveIntervalEditor = new IntegerEditor(30); - JPanel memorySpace = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); + useIntervalCheckBox = new UICheckBox(); + JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); + enableVcsPanel.add(vcsEnableCheckBox); + enableVcsPanel.add(remindVcsLabel); + JPanel intervalPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); UILabel everyLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Every")); UILabel delayLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Delay")); - memorySpace.add(everyLabel); - memorySpace.add(saveIntervalEditor); - memorySpace.add(delayLabel); + intervalPanel.add(useIntervalCheckBox); + intervalPanel.add(everyLabel); + intervalPanel.add(saveIntervalEditor); + intervalPanel.add(delayLabel); vcsEnableCheckBox.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { @@ -221,14 +231,16 @@ public class PreferencePane extends BasicPane { if (selected) { saveCommitCheckBox.setEnabled(true); saveIntervalEditor.setEnabled(true); + useIntervalCheckBox.setEnabled(true); } else { saveCommitCheckBox.setEnabled(false); saveIntervalEditor.setEnabled(false); + useIntervalCheckBox.setEnabled(false); } } }); - vcsPane.add(vcsEnableCheckBox); - vcsPane.add(memorySpace); + vcsPane.add(enableVcsPanel); + vcsPane.add(intervalPanel); vcsPane.add(saveCommitCheckBox); } @@ -581,13 +593,21 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setEnabled(false); defaultStringToFormulaBox.setSelected(false); } - vcsEnableCheckBox.setSelected(designerEnvManager.isVcsEnable()); + if (VcsHelper.needInit()) { + vcsEnableCheckBox.setSelected(designerEnvManager.isVcsEnable()); + } else { + vcsEnableCheckBox.setEnabled(false); + vcsEnableCheckBox.setSelected(false); + } if (!vcsEnableCheckBox.isSelected()) { - saveIntervalEditor.setEnabled(false); saveCommitCheckBox.setEnabled(false); + saveIntervalEditor.setEnabled(false); + useIntervalCheckBox.setEnabled(false); } + saveIntervalEditor.setValue(designerEnvManager.getSaveInterval()); saveCommitCheckBox.setSelected(designerEnvManager.isSaveCommit()); + useIntervalCheckBox.setSelected(designerEnvManager.isUseInterval()); supportCellEditorDefCheckBox.setSelected(designerEnvManager.isSupportCellEditorDef()); @@ -680,6 +700,7 @@ public class PreferencePane extends BasicPane { designerEnvManager.setSaveInterval(this.saveIntervalEditor.getValue()); designerEnvManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); designerEnvManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); + designerEnvManager.setUseInterval(this.useIntervalCheckBox.isSelected()); if (this.autoPushUpdateCheckBox != null) { designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected()); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 32b9d1140..87966c6c1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -197,11 +197,14 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt if (WorkContext.getCurrent().isLocal()) { toolbarDef.addShortCut(showInExplorerAction); } - toolbarDef.addShortCut(renameAction, delFileAction, vcsAction); + toolbarDef.addShortCut(renameAction, delFileAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); for (ShortCut shortCut : extraShortCuts) { toolbarDef.addShortCut(shortCut); } + if (VcsHelper.needInit()) { + toolbarDef.addShortCut(vcsAction); + } toolbarDef.updateToolBar(toolBar); resetActionStatus(); refresh(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index ecde0e133..748d10026 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -7,6 +7,8 @@ import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.general.IOUtils; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.manage.PluginManager; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; @@ -27,6 +29,7 @@ public class VcsHelper { private final static String VCS_DIR = "vcs"; public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); private static final int MINUTE = 60 * 1000; + private final static String VCS_PLUGIN_ID = "com.fr.plugin.vcs.v10"; public final static String CURRENT_USERNAME = WorkContext.getCurrent().isLocal() @@ -92,11 +95,16 @@ public class VcsHelper { } public static boolean needDeleteVersion(VcsEntity entity) { - if (entity == null) { + if (entity == null || !DesignerEnvManager.getEnvManager().isUseInterval()) { return false; } return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getSaveInterval() * MINUTE && StringUtils.isBlank(entity.getCommitMsg()); } + public static boolean needInit() { + PluginContext context = PluginManager.getContext(VCS_PLUGIN_ID); + return context == null || !context.isActive(); + } + } From 1e8eebe86d6bbe693c51857dd739c73b2ecd0602 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 12:19:05 +0800 Subject: [PATCH 097/196] =?UTF-8?q?REPORT-16527=20@xiaoxia=20=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=9B=B4=E6=8E=A5=E9=A2=84=E8=A7=88=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E7=89=88=E4=BF=9D=E5=AD=98=EF=BC=8C=E8=AF=A5?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E4=B8=8D=E4=BC=9A=E4=BF=9D=E5=AD=98=E6=96=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 4 ++ .../mainframe/vcs/common/VcsHelper.java | 35 +++++++++++++ .../src/main/java/com/fr/start/Designer.java | 51 ++----------------- 3 files changed, 44 insertions(+), 46 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 9b6a76172..99273ec5b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -39,6 +39,7 @@ import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.template.info.TimeConsumeTimer; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.VcsScene; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.MenuDef; import com.fr.design.menu.NameSeparator; import com.fr.design.menu.ShortCut; @@ -542,6 +543,9 @@ public abstract class JTemplate> return false; } collectInfo(); + if (DesignerEnvManager.getEnvManager().isVcsEnable()) { + VcsHelper.dealWithVcs(this); + } return this.saveFile(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 748d10026..ec88800a7 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -5,7 +5,9 @@ import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.general.IOUtils; import com.fr.plugin.context.PluginContext; import com.fr.plugin.manage.PluginManager; @@ -13,6 +15,7 @@ import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.Icon; import javax.swing.border.EmptyBorder; @@ -106,5 +109,37 @@ public class VcsHelper { return context == null || !context.isActive(); } + /** + * 版本控制 + * @param jt + */ + public static void dealWithVcs(final JTemplate jt) { + new Thread(new Runnable() { + @Override + public void run() { + String fileName = VcsHelper.getEditingFilename(); + VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); + VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); + int latestFileVersion = 0; + if (entity != null) { + latestFileVersion = entity.getVersion(); + } + if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { + operator.saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); + } else { + operator.saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + } + VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndex(fileName, 1); + if (VcsHelper.needDeleteVersion(oldEntity)) { + operator.deleteVersion(oldEntity.getFilename(), oldEntity.getVersion()); + } + + } + }).start(); + + } + } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index a2f6c92c7..daf0046d7 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -23,7 +23,6 @@ import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.itoolbar.UILargeToolbar; import com.fr.design.mainframe.ActiveKeyGenerator; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.InformationCollector; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JWorkBook; @@ -32,8 +31,6 @@ import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.mainframe.vcs.common.VcsCacheFileNodeFile; -import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -46,7 +43,6 @@ import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.module.Module; import com.fr.module.ModuleContext; -import com.fr.report.entity.VcsEntity; import com.fr.runtime.FineRuntime; import com.fr.stable.BuildContext; import com.fr.stable.OperatingSystem; @@ -61,8 +57,6 @@ import com.fr.start.module.StartupArgs; import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; import com.fr.workspace.WorkContext; -import com.fr.workspace.server.vcs.VcsOperator; -import com.fr.design.mainframe.vcs.common.VcsHelper; import javax.swing.JComponent; import javax.swing.JOptionPane; @@ -97,13 +91,17 @@ public class Designer extends BaseDesigner { private UIButton redo; private UIPreviewButton run; + public Designer(String[] args) { + super(args); + } + /** * 设计器启动的Main方法 * * @param args 参数 */ public static void main(String[] args) { - + //启动运行时 FineRuntime.start(); BuildContext.setBuildFilePath("/com/fr/stable/build.properties"); @@ -169,11 +167,6 @@ public class Designer extends BaseDesigner { return new SplashFx(); } - public Designer(String[] args) { - super(args); - } - - /** * 创建新建文件的快捷方式数组。 * @@ -280,45 +273,11 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); - if (DesignerEnvManager.getEnvManager().isVcsEnable()) { - dealWithVcs(jt); - } } }); return saveButton; } - /** - * 版本控制 - * @param jt - */ - private void dealWithVcs(final JTemplate jt) { - new Thread(new Runnable() { - @Override - public void run() { - String fileName = VcsHelper.getEditingFilename(); - VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); - VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); - int latestFileVersion = 0; - if (entity != null) { - latestFileVersion = entity.getVersion(); - } - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - operator.saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); - } else { - operator.saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); - } - VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndex(fileName, 1); - if (VcsHelper.needDeleteVersion(oldEntity)) { - operator.deleteVersion(oldEntity.getFilename(), oldEntity.getVersion()); - } - - } - }).start(); - - } private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); From a54b6ce6ef452d46ddca61be503c76bd6b62682e Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 26 Apr 2019 12:27:15 +0800 Subject: [PATCH 098/196] =?UTF-8?q?REPORT-16461=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=E5=85=B3=E9=97=AD=E8=87=AA=E5=8A=A8=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E6=9B=B4=E6=96=B0=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../push/DesignerPushUpdateManager.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index 7ac254c93..f867d6cfd 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -13,28 +13,29 @@ import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; -import java.io.IOException; - /** * Created by plough on 2019/4/8. */ public class DesignerPushUpdateManager { private static final String SPLIT_CHAR = "-"; private static DesignerPushUpdateManager singleton; + private static DesignerPushUpdateConfigManager config; + private DesignerUpdateInfo updateInfo; - private DesignerPushUpdateConfigManager config; static { - DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { - @Override - public void designerOpened() { - getInstance().checkAndPop(); - } - }); + config = DesignerPushUpdateConfigManager.getInstance(); + if (config.isAutoPushUpdateEnabled()) { + DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + getInstance().checkAndPop(); + } + }); + } } private DesignerPushUpdateManager() { - config = DesignerPushUpdateConfigManager.getInstance(); } public static DesignerPushUpdateManager getInstance() { @@ -56,7 +57,7 @@ public class DesignerPushUpdateManager { try { String res = HttpToolbox.get(CloudCenter.getInstance().acquireUrlByKind("jar10.update")); return new JSONObject(res).optString("buildNO"); - } catch (IOException e) { + } catch (Throwable e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } return StringUtils.EMPTY; From 71025a0b7485681ee778dfb69c41fae4cc964c18 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 26 Apr 2019 13:39:06 +0800 Subject: [PATCH 099/196] =?UTF-8?q?REPORT-16461=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=E5=85=B3=E9=97=AD=E8=87=AA=E5=8A=A8=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E6=9B=B4=E6=96=B0=E6=97=A0=E6=95=88=3D>=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/update/push/DesignerPushUpdateManager.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java index f867d6cfd..dcb5d45fd 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateManager.java @@ -19,13 +19,11 @@ import com.fr.workspace.WorkContext; public class DesignerPushUpdateManager { private static final String SPLIT_CHAR = "-"; private static DesignerPushUpdateManager singleton; - private static DesignerPushUpdateConfigManager config; private DesignerUpdateInfo updateInfo; static { - config = DesignerPushUpdateConfigManager.getInstance(); - if (config.isAutoPushUpdateEnabled()) { + if (DesignerPushUpdateConfigManager.getInstance().isAutoPushUpdateEnabled()) { DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { @Override public void designerOpened() { @@ -46,7 +44,7 @@ public class DesignerPushUpdateManager { } private void initUpdateInfo(String currentVersion, String latestVersion) { - String lastIgnoredVersion = config.getLastIgnoredVersion(); + String lastIgnoredVersion = DesignerPushUpdateConfigManager.getInstance().getLastIgnoredVersion(); String updatePushInfo = CloudCenter.getInstance().acquireUrlByKind("update.push"); JSONObject pushData = new JSONObject(updatePushInfo); @@ -165,6 +163,6 @@ public class DesignerPushUpdateManager { if (updateInfo == null) { return; } - config.setLastIgnoredVersion(updateInfo.getPushVersion()); + DesignerPushUpdateConfigManager.getInstance().setLastIgnoredVersion(updateInfo.getPushVersion()); } } From ace14386607b3b6043b71c08d8f2f3afed744e76 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 13:49:08 +0800 Subject: [PATCH 100/196] =?UTF-8?q?=E5=B0=81=E8=A3=85vcsconfigmanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 55 ++++---------- .../design/actions/file/PreferencePane.java | 21 ++--- .../DesignerFrameFileDealerPane.java | 2 +- .../com/fr/design/mainframe/JTemplate.java | 2 +- .../mainframe/vcs/VcsConfigManager.java | 76 +++++++++++++++++++ .../mainframe/vcs/common/VcsHelper.java | 6 +- 6 files changed, 110 insertions(+), 52 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 2c028670e..bd464d77e 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -14,6 +14,7 @@ import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.update.push.DesignerPushUpdateConfigManager; import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.utils.DesignUtils; @@ -130,12 +131,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private int westRegionContainerWidth = 240; private String encryptionKey; private String jdkHome; - private boolean vcsEnable; - private boolean saveCommit; - private boolean useInterval; - private int saveInterval; - - //上一次登录弹窗的时间, 为了控制一天只弹一次窗口 private String lastShowBBSTime; @@ -155,6 +150,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private DesignerPushUpdateConfigManager designerPushUpdateConfigManager = DesignerPushUpdateConfigManager.getInstance(); + private VcsConfigManager vcsConfigManager = VcsConfigManager.getInstance(); + public static final String CAS_CERTIFICATE_PATH = "certificatePath"; public static final String CAS_CERTIFICATE_PASSWORD = "certificatePass"; @@ -1502,6 +1499,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readOpenDebug(reader); } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) { readDesignerPushUpdateAttr(reader); + } else if (name.equals(vcsConfigManager.XML_TAG)) { + readVcsAttr(reader); } else { readLayout(reader, name); } @@ -1608,10 +1607,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setDragPermited(reader.getAttrAsBoolean("isDragPermited", false)); this.setUndoLimit(reader.getAttrAsInt("undoLimit", 5)); this.setDefaultStringToFormula(reader.getAttrAsBoolean("defaultStringToFormula", false)); - this.setVcsEnable(reader.getAttrAsBoolean("supportVcs", true)); - this.setSaveCommit(reader.getAttrAsBoolean("saveCommit", true)); - this.setUseInterval(reader.getAttrAsBoolean("userInterval", true)); - this.setSaveInterval(reader.getAttrAsInt("saveInterval", 60)); if ((tmpVal = reader.getAttrAsString("gridLineColor", null)) != null) { this.setGridLineColor(new Color(Integer.parseInt(tmpVal))); } @@ -1692,6 +1687,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { reader.readXMLObject(designerPushUpdateConfigManager); } + private void readVcsAttr(XMLableReader reader) { + reader.readXMLObject(vcsConfigManager); + } + /** * Write XML.
* The method will be invoked when save data to XML file.
@@ -1716,6 +1715,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeRecentColor(writer); writeOpenDebug(writer); writeDesignerPushUpdateAttr(writer); + writeVcsAttr(writer); writer.end(); } @@ -1947,10 +1947,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .attr("verticalScrollBarVisible", this.isVerticalScrollBarVisible()) .attr("horizontalScrollBarVisible", this.isHorizontalScrollBarVisible()) .attr("supportCellEditorDef", this.isSupportCellEditorDef()) - .attr("supportVcs", this.isVcsEnable()) - .attr("saveInterval", this.getSaveInterval()) - .attr("userInterval", this.isUseInterval()) - .attr("saveCommit", this.isSaveCommit()) .attr("isDragPermited", this.isDragPermited()) .attr("gridLineColor", this.getGridLineColor().getRGB()) .attr("paginationLineColor", this.getPaginationLineColor().getRGB()) @@ -1962,35 +1958,16 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.designerPushUpdateConfigManager.writeXML(writer); } - public boolean isVcsEnable() { - return vcsEnable; - } - - public void setVcsEnable(boolean vcsEnable) { - this.vcsEnable = vcsEnable; + private void writeVcsAttr(XMLPrintWriter writer) { + this.vcsConfigManager.writeXML(writer); } - public boolean isSaveCommit() { - return saveCommit; - } - - public void setSaveCommit(boolean saveCommit) { - this.saveCommit = saveCommit; - } - - public int getSaveInterval() { - return saveInterval; - } - - public void setSaveInterval(int saveInterval) { - this.saveInterval = saveInterval; - } - public boolean isUseInterval() { - return useInterval; + public VcsConfigManager getVcsConfigManager() { + return vcsConfigManager; } - public void setUseInterval(boolean useInterval) { - this.useInterval = useInterval; + public void setVcsConfigManager(VcsConfigManager vcsConfigManager) { + this.vcsConfigManager = vcsConfigManager; } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index da5d381c3..1686613cd 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -23,6 +23,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.utils.gui.GUICoreUtils; @@ -209,7 +210,7 @@ public class PreferencePane extends BasicPane { JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); generalPane.add(vcsPane); remindVcsLabel = new UILabel("Fine-Design_Vcs_Remind"); - remindVcsLabel.setVisible(!VcsHelper.needInit()); +// remindVcsLabel.setVisible(!VcsHelper.needInit()); vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); saveIntervalEditor = new IntegerEditor(30); @@ -593,8 +594,9 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setEnabled(false); defaultStringToFormulaBox.setSelected(false); } + VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); if (VcsHelper.needInit()) { - vcsEnableCheckBox.setSelected(designerEnvManager.isVcsEnable()); + vcsEnableCheckBox.setSelected(vcsConfigManager.isVcsEnable()); } else { vcsEnableCheckBox.setEnabled(false); vcsEnableCheckBox.setSelected(false); @@ -605,9 +607,9 @@ public class PreferencePane extends BasicPane { useIntervalCheckBox.setEnabled(false); } - saveIntervalEditor.setValue(designerEnvManager.getSaveInterval()); - saveCommitCheckBox.setSelected(designerEnvManager.isSaveCommit()); - useIntervalCheckBox.setSelected(designerEnvManager.isUseInterval()); + saveIntervalEditor.setValue(vcsConfigManager.getSaveInterval()); + saveCommitCheckBox.setSelected(vcsConfigManager.isSaveCommit()); + useIntervalCheckBox.setSelected(vcsConfigManager.isUseInterval()); supportCellEditorDefCheckBox.setSelected(designerEnvManager.isSupportCellEditorDef()); @@ -697,10 +699,11 @@ public class PreferencePane extends BasicPane { designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); - designerEnvManager.setSaveInterval(this.saveIntervalEditor.getValue()); - designerEnvManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); - designerEnvManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); - designerEnvManager.setUseInterval(this.useIntervalCheckBox.isSelected()); + VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); + vcsConfigManager.setSaveInterval(this.saveIntervalEditor.getValue()); + vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); + vcsConfigManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); + vcsConfigManager.setUseInterval(this.useIntervalCheckBox.isSelected()); if (this.autoPushUpdateCheckBox != null) { designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected()); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 87966c6c1..265e7dfe6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -464,7 +464,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } private void handleVcsAction() { - if (!DesignerEnvManager.getEnvManager().isVcsEnable() || VcsHelper.isUnSelectedTemplate()) { + if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.isUnSelectedTemplate()) { vcsAction.setEnabled(false); return; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 99273ec5b..87d0f9d35 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -543,7 +543,7 @@ public abstract class JTemplate> return false; } collectInfo(); - if (DesignerEnvManager.getEnvManager().isVcsEnable()) { + if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { VcsHelper.dealWithVcs(this); } return this.saveFile(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java new file mode 100644 index 000000000..8c94ac3d4 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java @@ -0,0 +1,76 @@ +package com.fr.design.mainframe.vcs; + +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLWriter; +import com.fr.stable.xml.XMLableReader; + +/** + * Created by XiaXiang on 2019/4/26. + */ +public class VcsConfigManager implements XMLReadable, XMLWriter { + public static final String XML_TAG = "VcsConfigManager"; + private static volatile VcsConfigManager instance = new VcsConfigManager(); + + public static VcsConfigManager getInstance() { + return instance; + } + + private boolean vcsEnable; + + public boolean isVcsEnable() { + return vcsEnable; + } + + public void setVcsEnable(boolean vcsEnable) { + this.vcsEnable = vcsEnable; + } + + public boolean isSaveCommit() { + return saveCommit; + } + + public void setSaveCommit(boolean saveCommit) { + this.saveCommit = saveCommit; + } + + public boolean isUseInterval() { + return useInterval; + } + + public void setUseInterval(boolean useInterval) { + this.useInterval = useInterval; + } + + public int getSaveInterval() { + return saveInterval; + } + + public void setSaveInterval(int saveInterval) { + this.saveInterval = saveInterval; + } + + private boolean saveCommit; + private boolean useInterval; + private int saveInterval; + + @Override + public void readXML(XMLableReader reader) { + if (reader.isAttr()) { + this.setSaveCommit(reader.getAttrAsBoolean("saveCommit", true)); + this.setSaveInterval(reader.getAttrAsInt("saveInterval", 60)); + this.setUseInterval(reader.getAttrAsBoolean("useInterval", true)); + this.setVcsEnable(reader.getAttrAsBoolean("vcsEnable", true)); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(XML_TAG); + writer.attr("saveCommit", this.isSaveCommit()); + writer.attr("saveInterval", this.getSaveInterval()); + writer.attr("useInterval", this.isUseInterval()); + writer.attr("vcsEnable", this.isVcsEnable()); + writer.end(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index ec88800a7..4fc99731a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -7,6 +7,7 @@ import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.general.IOUtils; import com.fr.plugin.context.PluginContext; @@ -98,10 +99,10 @@ public class VcsHelper { } public static boolean needDeleteVersion(VcsEntity entity) { - if (entity == null || !DesignerEnvManager.getEnvManager().isUseInterval()) { + if (entity == null || !DesignerEnvManager.getEnvManager().getVcsConfigManager().isUseInterval()) { return false; } - return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getSaveInterval() * MINUTE && StringUtils.isBlank(entity.getCommitMsg()); + return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getVcsConfigManager().getSaveInterval() * MINUTE && StringUtils.isBlank(entity.getCommitMsg()); } public static boolean needInit() { @@ -117,6 +118,7 @@ public class VcsHelper { new Thread(new Runnable() { @Override public void run() { + String fileName = VcsHelper.getEditingFilename(); VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); From 05d747e5c3c78af05f6c495574e6f7778baf21ac Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 13:52:51 +0800 Subject: [PATCH 101/196] bug fix --- .../java/com/fr/design/actions/file/PreferencePane.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 1686613cd..929350081 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -209,11 +209,11 @@ public class PreferencePane extends BasicPane { private void createVcsSettingPane(JPanel generalPane) { JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); generalPane.add(vcsPane); - remindVcsLabel = new UILabel("Fine-Design_Vcs_Remind"); -// remindVcsLabel.setVisible(!VcsHelper.needInit()); + remindVcsLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Remind")); + remindVcsLabel.setVisible(!VcsHelper.needInit()); vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); - saveIntervalEditor = new IntegerEditor(30); + saveIntervalEditor = new IntegerEditor(60); useIntervalCheckBox = new UICheckBox(); JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); enableVcsPanel.add(vcsEnableCheckBox); From da3514e4db7e5cb9dd1e1200b4fb8dfaba8872c9 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 26 Apr 2019 13:58:15 +0800 Subject: [PATCH 102/196] =?UTF-8?q?REPORT-14865=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81=3D>=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/push/DesignerPushUpdateDialog.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java index 3327dd9ed..ab093605e 100644 --- a/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/push/DesignerPushUpdateDialog.java @@ -16,6 +16,7 @@ import com.fr.web.struct.category.StylePath; import com.fr.web.struct.impl.FineUI; import javax.swing.JPanel; +import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Frame; @@ -34,10 +35,15 @@ class DesignerPushUpdateDialog extends UIDialog { initComponents(); } - static void createAndShow(Frame parent, DesignerUpdateInfo updateInfo) { - DesignerPushUpdateDialog dialog = new DesignerPushUpdateDialog(parent); - dialog.populate(updateInfo); - dialog.showDialog(); + static void createAndShow(final Frame parent, final DesignerUpdateInfo updateInfo) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + DesignerPushUpdateDialog dialog = new DesignerPushUpdateDialog(parent); + dialog.populate(updateInfo); + dialog.showDialog(); + } + }); + } private void initComponents() { @@ -72,7 +78,7 @@ class DesignerPushUpdateDialog extends UIDialog { private Model createModel(DesignerUpdateInfo updateInfo) { Model model = new Model(); - model.setVersion(updateInfo.getPushVersion()); + model.setVersion(updateInfo.getLatestVersion()); model.setContent(updateInfo.getPushContent()); model.setMoreInfoUrl(updateInfo.getMoreInfoUrl()); model.setBackgroundUrl(updateInfo.getBackgroundUrl()); From 10773ba825703c1ded5ab8529d2722a826c198e2 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 13:59:55 +0800 Subject: [PATCH 103/196] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/vcs/VcsConfigManager.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java index 8c94ac3d4..bbb6e9d9b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java @@ -10,14 +10,16 @@ import com.fr.stable.xml.XMLableReader; */ public class VcsConfigManager implements XMLReadable, XMLWriter { public static final String XML_TAG = "VcsConfigManager"; - private static volatile VcsConfigManager instance = new VcsConfigManager(); + private static volatile VcsConfigManager instance = new VcsConfigManager(); + private boolean vcsEnable; + private boolean saveCommit; + private boolean useInterval; + private int saveInterval; public static VcsConfigManager getInstance() { return instance; } - private boolean vcsEnable; - public boolean isVcsEnable() { return vcsEnable; } @@ -50,10 +52,6 @@ public class VcsConfigManager implements XMLReadable, XMLWriter { this.saveInterval = saveInterval; } - private boolean saveCommit; - private boolean useInterval; - private int saveInterval; - @Override public void readXML(XMLableReader reader) { if (reader.isAttr()) { From d89a736cc2a614412ad5e0080bb71fab5402774a Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Fri, 26 Apr 2019 14:22:19 +0800 Subject: [PATCH 104/196] =?UTF-8?q?=E9=A1=B5=E5=A4=A7=E5=B0=8F=E6=94=B9?= =?UTF-8?q?=E5=A4=A7=E4=B8=80=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/messagecollect/impl/AbstractSendDataToCloud.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java index 4321d2818..da98e4778 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java @@ -26,7 +26,7 @@ public abstract class AbstractSendDataToCloud implements XMLable { private static final String COLUMN_TIME = "time"; protected String lastTime; - private static final int PAGE_SIZE = 200; + private static final int PAGE_SIZE = 10000; private long totalCount = -1; private FileEntityBuilder fileEntityBuilder; From 1c50203e9d52cff812760b9e156decc5a23ca1ab Mon Sep 17 00:00:00 2001 From: zheng Date: Fri, 26 Apr 2019 14:56:20 +0800 Subject: [PATCH 105/196] =?UTF-8?q?CHART-8970=20=E6=97=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=9B=BE=E8=A1=A8=20=E5=9B=BD=E9=99=85=E5=8C=96+?= =?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/ChartTypeInterfaceManager.java | 44 ++++++++++--------- .../com/fr/design/chart/ChartTypePane.java | 3 +- .../chart/gui/type/AreaPlotPane.java | 11 ++--- .../mainframe/chart/gui/type/BarPlotPane.java | 16 ++++--- .../chart/gui/type/BubblePlotPane.java | 11 ++--- .../chart/gui/type/ColumnPlotPane.java | 16 ++++--- .../chart/gui/type/CustomPlotPane.java | 11 ++--- .../chart/gui/type/DonutPlotPane.java | 13 +++--- .../chart/gui/type/FunnelPlotPane.java | 6 +-- .../chart/gui/type/GanttPlotPane.java | 11 ++--- .../chart/gui/type/GisMapPlotPane.java | 17 +++---- .../chart/gui/type/LinePlotPane.java | 11 ++--- .../mainframe/chart/gui/type/MapPlotPane.java | 5 ++- .../chart/gui/type/MeterPlotPane.java | 20 +++++---- .../mainframe/chart/gui/type/PiePlotPane.java | 18 ++++---- .../chart/gui/type/RadarPlotPane.java | 11 ++--- .../chart/gui/type/RangePlotPane.java | 11 ++--- .../chart/gui/type/StockPlotPane.java | 11 ++--- .../chart/gui/type/XYScatterPlotPane.java | 12 ++--- .../java/com/fr/poly/PolyComponentsBar.java | 3 +- 20 files changed, 141 insertions(+), 120 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java b/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java index 3a8abb56e..6b422dc25 100644 --- a/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java @@ -41,6 +41,7 @@ import com.fr.design.module.DesignModuleFactory; import com.fr.form.ui.ChartEditor; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; +import com.fr.general.Inter; import com.fr.plugin.chart.PiePlot4VanChart; import com.fr.plugin.chart.area.VanChartAreaPlot; import com.fr.plugin.chart.bubble.VanChartBubblePlot; @@ -99,7 +100,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import static com.fr.chart.charttypes.ChartTypeManager.CHART_PRIORITY; +import static com.fr.chart.charttypes.ChartTypeManager.DEFAULT_PRIORITY; +import static com.fr.chart.charttypes.ChartTypeManager.DEPRECATED_CHART_PRIORITY; import static com.fr.chart.charttypes.ChartTypeManager.VAN_CHART_PRIORITY; /** @@ -165,7 +167,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr } String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID); Icon icon = IOUtils.readIcon(iconPath); - child[index] = new ChartWidgetOption(com.fr.design.i18n.Toolkit.i18nText(bean.getName()), icon, ChartEditor.class, plotID); + child[index] = new ChartWidgetOption(Inter.getLocText(bean.getName()), icon, ChartEditor.class, plotID); index++; } @@ -198,23 +200,23 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr private static void readDefault() { - addChartTypeInterface(CHART_PRIORITY, ChartConstants.COLUMN_CHART, new ColumnIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.LINE_CHART, new LineIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.BAR_CHART, new BarIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.PIE_CHART, new PieIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.AREA_CHART, new AreaIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.SCATTER_CHART, new XYScatterIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.BUBBLE_CHART, new BubbleIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.RADAR_CHART, new RadarIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.STOCK_CHART, new StockIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.METER_CHART, new MeterIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.RANGE_CHART, new RangeIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.CUSTOM_CHART, new CustomIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.GANTT_CHART, new GanttIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.DONUT_CHART, new DonutIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.MAP_CHART, new MapIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.GIS_CHAER, new GisMapIndependentChartInterface()); - addChartTypeInterface(CHART_PRIORITY, ChartConstants.FUNNEL_CHART, new FunnelIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.COLUMN_CHART, new ColumnIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.LINE_CHART, new LineIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.BAR_CHART, new BarIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.PIE_CHART, new PieIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.AREA_CHART, new AreaIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.SCATTER_CHART, new XYScatterIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.BUBBLE_CHART, new BubbleIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.RADAR_CHART, new RadarIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.STOCK_CHART, new StockIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.METER_CHART, new MeterIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.RANGE_CHART, new RangeIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.CUSTOM_CHART, new CustomIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.GANTT_CHART, new GanttIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.DONUT_CHART, new DonutIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.MAP_CHART, new MapIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.GIS_CHAER, new GisMapIndependentChartInterface()); + addChartTypeInterface(DEPRECATED_CHART_PRIORITY, ChartConstants.FUNNEL_CHART, new FunnelIndependentChartInterface()); } private static void addChartTypeInterface(String priority, String plotID, IndependentChartUIProvider provider) { @@ -462,7 +464,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr public void mount(PluginSingleInjection injection) { if (isIndependentChartUIProvider(injection)) { - String priority = injection.getAttribute("priority", CHART_PRIORITY); + String priority = injection.getAttribute("priority", DEFAULT_PRIORITY); String plotID = injection.getAttribute("plotID"); IndependentChartUIProvider instance = (IndependentChartUIProvider) injection.getObject(); addChartTypeInterface(priority, plotID, instance); @@ -474,7 +476,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr public void demount(PluginSingleInjection injection) { if (isIndependentChartUIProvider(injection)) { - String priority = injection.getAttribute("priority", CHART_PRIORITY); + String priority = injection.getAttribute("priority", DEFAULT_PRIORITY); String plotID = injection.getAttribute("plotID"); removeChartTypeInterface(priority, plotID); } diff --git a/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java b/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java index de7d08a2b..44c9e0067 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java @@ -14,6 +14,7 @@ import com.fr.chart.charttypes.ChartTypeManager; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.Inter; import com.fr.license.exception.RegistEditionException; import com.fr.license.function.VT4FR; import com.fr.log.FineLoggerFactory; @@ -67,7 +68,7 @@ public class ChartTypePane extends ChartCommonWizardPane { mainTypeList = new JList(defaultListModel); for (int i = 0; i < typeName.length; i++) { - defaultListModel.insertElementAt(com.fr.design.i18n.Toolkit.i18nText(typeName[i].getName()), i); + defaultListModel.insertElementAt(Inter.getLocText(typeName[i].getName()), i); } mainTypeList.addListSelectionListener(listSelectionListener); diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java index 42667ee9d..a2e24692a 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java @@ -8,6 +8,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.charttypes.AreaIndependentChart; +import com.fr.general.Inter; /** @@ -33,9 +34,9 @@ public class AreaPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { - String area = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Area"); - String stack = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stacked"); - String percent = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); + String area = Inter.getLocText("Fine-Engine_Chart_Type_Area"); + String stack = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stacked"); + String percent = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); String td = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D"); return new String[]{ stack + area, @@ -139,8 +140,8 @@ public class AreaPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Area"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Area"); + } public Chart getDefaultChart() { return AreaIndependentChart.areaChartTypes[0]; diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java index 280fca724..71eba25ac 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java @@ -6,6 +6,8 @@ import com.fr.chart.chartattr.BarPlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.BarIndependentChart; +import com.fr.design.i18n.Toolkit; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; @@ -31,16 +33,16 @@ public class BarPlotPane extends AbstractBarPane{ @Override protected String[] getTypeTipName() { - String bar = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Bar"); - String stack = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stacked"); - String percent = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); - String td = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D"); + String bar = Inter.getLocText("Fine-Engine_Chart_Type_Bar"); + String stack = Toolkit.i18nText("Fine-Design_Chart_Stacked"); + String percent = Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); + String td = Toolkit.i18nText("Fine-Design_Chart_3D"); return new String[]{ bar, stack + bar, percent + stack + bar, td + bar, - td + bar + "(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal") + ")", + td + bar + "(" + Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal") + ")", td + stack + bar, td + percent + stack + bar }; @@ -65,8 +67,8 @@ public class BarPlotPane extends AbstractBarPane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Bar"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Bar"); + } protected Plot getSelectedClonedPlot(){ Chart[] barChart = BarIndependentChart.barChartTypes; diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java index 103dbd194..eeaa6fbb7 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java @@ -4,6 +4,7 @@ import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.BubblePlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.BubbleIndependentChart; +import com.fr.general.Inter; /** @@ -25,9 +26,9 @@ public class BubblePlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Bubble_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Bubble_Chart") + }; + } @Override protected String[] getTypeLayoutPath() { @@ -44,8 +45,8 @@ public class BubblePlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Bubble_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Bubble_Chart"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java index 5f290d592..657bca1aa 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java @@ -5,6 +5,8 @@ import com.fr.chart.chartattr.BarPlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.ColumnIndependentChart; +import com.fr.design.i18n.Toolkit; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; @@ -30,16 +32,16 @@ public class ColumnPlotPane extends AbstractBarPane{ @Override protected String[] getTypeTipName() { - String column = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Column"); - String stack = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stacked"); - String percent = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); - String td = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D"); + String column = Inter.getLocText("Fine-Engine_Chart_Type_Column"); + String stack = Toolkit.i18nText("Fine-Design_Chart_Stacked"); + String percent = Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); + String td = Toolkit.i18nText("Fine-Design_Chart_3D"); return new String[]{ column, stack + column, percent + stack + column, td + column, - td + column + "(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal") + ")", + td + column + "(" + Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal") + ")", td + stack + column, td + percent + stack + column }; @@ -63,8 +65,8 @@ public class ColumnPlotPane extends AbstractBarPane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Column"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Column"); + } protected Plot getSelectedClonedPlot(){ Chart[] barChart = ColumnIndependentChart.columnChartTypes; diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java index d6a46df45..4fe0f70ce 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.CustomIndependentChart; +import com.fr.general.Inter; /** @@ -26,9 +27,9 @@ public class CustomPlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Combine_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_Combine") + }; + } @Override protected String[] getTypeLayoutPath() { @@ -45,8 +46,8 @@ public class CustomPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Combine_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Combine"); + } /** * 更新界面内容 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java index e8643c34f..c7e72532b 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java @@ -10,10 +10,11 @@ import com.fr.chart.chartattr.Donut3DPlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.charttypes.DonutIndependentChart; - +import com.fr.design.i18n.Toolkit; +import com.fr.general.Inter; import com.fr.stable.Constants; -import java.awt.*; +import java.awt.Color; import java.text.DecimalFormat; /** @@ -35,10 +36,10 @@ public class DonutPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { - String donut = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Donut_Chart"); + String donut = Inter.getLocText("Fine-Engine_Chart_Type_Donut"); return new String[]{ donut, - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D") + donut + Toolkit.i18nText("Fine-Design_Chart_3D") + donut }; } @@ -103,8 +104,8 @@ public class DonutPlotPane extends AbstractChartTypePane{ * @return 标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Donut_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Donut"); + } /** * 是否有坐标轴 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java index 8f31c8c55..def909e02 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java @@ -7,7 +7,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.FunnelPlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.FunnelIndependentChart; - +import com.fr.general.Inter; import java.text.DecimalFormat; @@ -31,7 +31,7 @@ public class FunnelPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Funnel") + Inter.getLocText("Fine-Engine_Chart_Type_Funnel") }; } @@ -50,7 +50,7 @@ public class FunnelPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Funnel"); + return Inter.getLocText("Fine-Engine_Chart_Type_Funnel"); } /** diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java index 537fa4628..f03ff9891 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.GanttIndependentChart; +import com.fr.general.Inter; /** @@ -24,9 +25,9 @@ public class GanttPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gantt_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_Gantt") + }; + } @Override protected String getPlotTypeID() { @@ -47,8 +48,8 @@ public class GanttPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gantt_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Gantt"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java index 25d2fa48f..9909a2d85 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java @@ -11,11 +11,12 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; - -import javax.swing.*; -import java.awt.*; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; public class GisMapPlotPane extends AbstractChartTypePane{ @@ -72,9 +73,9 @@ public class GisMapPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - "gis"+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Map") - }; - } + Inter.getLocText("Fine-Engine_Chart_GIS_Map") + }; + } @Override protected String getPlotTypeID() { @@ -172,8 +173,8 @@ public class GisMapPlotPane extends AbstractChartTypePane{ * @return 标题 */ public String title4PopupWindow() { - return "gis"+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Map"); - } + return Inter.getLocText("Fine-Engine_Chart_GIS_Map"); + } /** * 是否有坐标轴 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java index 5afd3e217..0216b1ed7 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java @@ -5,6 +5,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.LinePlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.LineIndependentChart; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; @@ -21,9 +22,9 @@ public class LinePlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Line_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_Line") + }; + } @Override protected String[] getTypeLayoutPath() { @@ -83,8 +84,8 @@ public class LinePlotPane extends AbstractChartTypePane{ } public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Line_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Line"); + } public Chart getDefaultChart() { return LineIndependentChart.lineChartTypes[0]; diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java index 6f9a55ab5..ba1de4384 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java @@ -10,6 +10,7 @@ import com.fr.chart.charttypes.MapIndependentChart; import com.fr.design.chart.series.PlotSeries.MapGroupExtensionPane; import com.fr.design.chart.series.PlotStyle.ChartSelectDemoPane; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; import javax.swing.JPanel; @@ -71,8 +72,8 @@ public class MapPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Map_Map"); - } + return Inter.getLocText("Fine-Engine_Chart_SVG_MAP"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java index 811053641..fa9eb2c6a 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java @@ -6,6 +6,8 @@ import com.fr.chart.chartattr.MeterPlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.MeterStyle; import com.fr.chart.charttypes.MeterIndependentChart; +import com.fr.design.i18n.Toolkit; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; @@ -31,9 +33,9 @@ public class MeterPlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { - String meter = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Gauge"); + String meter = Inter.getLocText("Fine-Engine_Chart_Type_Meter"); return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Mode_Custom") + meter, + Toolkit.i18nText("Fine-Design_Chart_Mode_Custom") + meter, meter + "1", meter + "2" }; @@ -77,13 +79,13 @@ public class MeterPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Gauge"); - } - - /** - * 保存界面属性 - */ - public void updateBean(Chart chart) { + return Inter.getLocText("Fine-Engine_Chart_Type_Meter"); + } + + /** + * 保存界面属性 + */ + public void updateBean(Chart chart) { if(needsResetChart(chart)){ resetChart(chart); } diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java index 98ccb0e53..61076743e 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java @@ -10,10 +10,10 @@ import com.fr.chart.chartattr.PiePlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.charttypes.PieIndependentChart; - +import com.fr.general.Inter; import com.fr.stable.Constants; -import java.awt.*; +import java.awt.Color; import java.text.DecimalFormat; /** @@ -36,11 +36,11 @@ public class PiePlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { - String pie = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Pie"); - return new String[]{ - pie, - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D") + pie - }; + String pie = Inter.getLocText("Fine-Engine_Chart_Type_Pie"); + return new String[]{ + pie, + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D") + pie + }; } @Override @@ -63,8 +63,8 @@ public class PiePlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_New_Pie"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Pie"); + } private void createPieCondition(Plot plot) { ConditionCollection collection = plot.getConditionCollection(); diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java index 631a4d9d4..ab73ee4ac 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.RadarIndependentChart; +import com.fr.general.Inter; /** @@ -24,9 +25,9 @@ public class RadarPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Radar_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_Radar") + }; + } @Override protected String getPlotTypeID() { @@ -48,8 +49,8 @@ public class RadarPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Radar_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Radar"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java index 405f9aa4f..e317e571b 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java @@ -4,6 +4,7 @@ import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.RangePlot; import com.fr.chart.charttypes.RangeIndependentChart; +import com.fr.general.Inter; /** @@ -25,9 +26,9 @@ public class RangePlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Range_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_Range") + }; + } @Override protected String getPlotTypeID() { @@ -49,8 +50,8 @@ public class RangePlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Range_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Range"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java index 567595703..b590109d4 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.StockIndependentChart; +import com.fr.general.Inter; /** @@ -24,9 +25,9 @@ public class StockPlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stock_Chart") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_Stock") + }; + } @Override protected String getPlotTypeID() { @@ -48,8 +49,8 @@ public class StockPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stock_Chart"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_Stock"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java index 0effae28e..d1d0c603c 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java @@ -6,7 +6,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.XYScatterPlot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.charttypes.XYScatterIndependentChart; - +import com.fr.general.Inter; import com.fr.stable.Constants; /** @@ -28,9 +28,9 @@ public class XYScatterPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_I_XYScatterStyle_Marker") - }; - } + Inter.getLocText("Fine-Engine_Chart_Type_XYScatter") + }; + } @Override protected String[] getTypeLayoutPath() { @@ -47,8 +47,8 @@ public class XYScatterPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_I_XYScatterStyle_Marker"); - } + return Inter.getLocText("Fine-Engine_Chart_Type_XYScatter"); + } /** * 保存界面内容 diff --git a/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java b/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java index 3130a4b86..0dbc47053 100644 --- a/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java +++ b/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java @@ -12,6 +12,7 @@ import com.fr.design.gui.itooltip.MultiLineToolTip; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.dnd.SerializableTransferable; +import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; import com.fr.report.poly.PolyECBlock; import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; @@ -65,7 +66,7 @@ public class PolyComponentsBar extends JToolBar { for (int i = 0; i < typeLen; i++) { BaseChart[] rowChart = BaseChartGetter.getStaticChartTypes(typeName[i].getPlotID()); String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(typeName[i].getPlotID()); - serIcons[i + 1] = new SerIcon(rowChart[0], Toolkit.i18nText(typeName[i].getName()), iconPath); + serIcons[i + 1] = new SerIcon(rowChart[0], Inter.getLocText(typeName[i].getName()), iconPath); this.add(serIcons[i + 1]); } From 0d0f540bc5fa28cd6f86511b1f23f9bb7ba3f02c Mon Sep 17 00:00:00 2001 From: zheng Date: Fri, 26 Apr 2019 15:32:15 +0800 Subject: [PATCH 106/196] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/ChartTypeInterfaceManager.java | 4 ++-- .../java/com/fr/design/chart/ChartTypePane.java | 4 ++-- .../mainframe/chart/gui/type/AreaPlotPane.java | 15 ++++++++------- .../mainframe/chart/gui/type/BarPlotPane.java | 6 +++--- .../mainframe/chart/gui/type/BubblePlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/ColumnPlotPane.java | 6 +++--- .../mainframe/chart/gui/type/CustomPlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/DonutPlotPane.java | 6 +++--- .../mainframe/chart/gui/type/FunnelPlotPane.java | 6 +++--- .../mainframe/chart/gui/type/GanttPlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/GisMapPlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/LinePlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/MapPlotPane.java | 6 +++--- .../mainframe/chart/gui/type/MeterPlotPane.java | 6 +++--- .../mainframe/chart/gui/type/PiePlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/RadarPlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/RangePlotPane.java | 10 +++++----- .../mainframe/chart/gui/type/StockPlotPane.java | 10 +++++----- .../chart/gui/type/XYScatterPlotPane.java | 10 +++++----- .../main/java/com/fr/poly/PolyComponentsBar.java | 4 ++-- 20 files changed, 82 insertions(+), 81 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java b/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java index 6b422dc25..1255d87d5 100644 --- a/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java @@ -41,7 +41,7 @@ import com.fr.design.module.DesignModuleFactory; import com.fr.form.ui.ChartEditor; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.plugin.chart.PiePlot4VanChart; import com.fr.plugin.chart.area.VanChartAreaPlot; import com.fr.plugin.chart.bubble.VanChartBubblePlot; @@ -167,7 +167,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr } String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID); Icon icon = IOUtils.readIcon(iconPath); - child[index] = new ChartWidgetOption(Inter.getLocText(bean.getName()), icon, ChartEditor.class, plotID); + child[index] = new ChartWidgetOption(InterProviderFactory.getProvider().getLocText(bean.getName()), icon, ChartEditor.class, plotID); index++; } diff --git a/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java b/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java index 44c9e0067..d914a81e8 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/ChartTypePane.java @@ -14,9 +14,9 @@ import com.fr.chart.charttypes.ChartTypeManager; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.Inter; import com.fr.license.exception.RegistEditionException; import com.fr.license.function.VT4FR; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import javax.swing.BorderFactory; @@ -68,7 +68,7 @@ public class ChartTypePane extends ChartCommonWizardPane { mainTypeList = new JList(defaultListModel); for (int i = 0; i < typeName.length; i++) { - defaultListModel.insertElementAt(Inter.getLocText(typeName[i].getName()), i); + defaultListModel.insertElementAt(InterProviderFactory.getProvider().getLocText(typeName[i].getName()), i); } mainTypeList.addListSelectionListener(listSelectionListener); diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java index a2e24692a..425f50807 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AreaPlotPane.java @@ -8,7 +8,8 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.charttypes.AreaIndependentChart; -import com.fr.general.Inter; +import com.fr.design.i18n.Toolkit; +import com.fr.locale.InterProviderFactory; /** @@ -34,10 +35,10 @@ public class AreaPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { - String area = Inter.getLocText("Fine-Engine_Chart_Type_Area"); - String stack = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Stacked"); - String percent = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); - String td = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D"); + String area = InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Area"); + String stack = Toolkit.i18nText("Fine-Design_Chart_Stacked"); + String percent = Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); + String td = Toolkit.i18nText("Fine-Design_Chart_3D"); return new String[]{ stack + area, percent + stack + area, @@ -140,8 +141,8 @@ public class AreaPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Area"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Area"); + } public Chart getDefaultChart() { return AreaIndependentChart.areaChartTypes[0]; diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java index 71eba25ac..cd5e1b4d6 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java @@ -7,7 +7,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.BarIndependentChart; import com.fr.design.i18n.Toolkit; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; @@ -33,7 +33,7 @@ public class BarPlotPane extends AbstractBarPane{ @Override protected String[] getTypeTipName() { - String bar = Inter.getLocText("Fine-Engine_Chart_Type_Bar"); + String bar = InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Bar"); String stack = Toolkit.i18nText("Fine-Design_Chart_Stacked"); String percent = Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); String td = Toolkit.i18nText("Fine-Design_Chart_3D"); @@ -67,7 +67,7 @@ public class BarPlotPane extends AbstractBarPane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Bar"); + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Bar"); } protected Plot getSelectedClonedPlot(){ diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java index eeaa6fbb7..b3e7cd34a 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/BubblePlotPane.java @@ -4,7 +4,7 @@ import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.BubblePlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.BubbleIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; /** @@ -26,8 +26,8 @@ public class BubblePlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Bubble_Chart") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Bubble_Chart") + }; } @Override @@ -45,8 +45,8 @@ public class BubblePlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Bubble_Chart"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Bubble_Chart"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java index 657bca1aa..55de24714 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java @@ -6,7 +6,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.ColumnIndependentChart; import com.fr.design.i18n.Toolkit; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; @@ -32,7 +32,7 @@ public class ColumnPlotPane extends AbstractBarPane{ @Override protected String[] getTypeTipName() { - String column = Inter.getLocText("Fine-Engine_Chart_Type_Column"); + String column = InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Column"); String stack = Toolkit.i18nText("Fine-Design_Chart_Stacked"); String percent = Toolkit.i18nText("Fine-Design_Chart_Use_Percent"); String td = Toolkit.i18nText("Fine-Design_Chart_3D"); @@ -65,7 +65,7 @@ public class ColumnPlotPane extends AbstractBarPane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Column"); + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Column"); } protected Plot getSelectedClonedPlot(){ diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java index 4fe0f70ce..8e367444f 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/CustomPlotPane.java @@ -3,7 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.CustomIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; /** @@ -27,8 +27,8 @@ public class CustomPlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Combine") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Combine") + }; } @Override @@ -46,8 +46,8 @@ public class CustomPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Combine"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Combine"); + } /** * 更新界面内容 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java index c7e72532b..c1cd47d78 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/DonutPlotPane.java @@ -11,7 +11,7 @@ import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.charttypes.DonutIndependentChart; import com.fr.design.i18n.Toolkit; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.stable.Constants; import java.awt.Color; @@ -36,7 +36,7 @@ public class DonutPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { - String donut = Inter.getLocText("Fine-Engine_Chart_Type_Donut"); + String donut = InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Donut"); return new String[]{ donut, Toolkit.i18nText("Fine-Design_Chart_3D") + donut @@ -104,7 +104,7 @@ public class DonutPlotPane extends AbstractChartTypePane{ * @return 标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Donut"); + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Donut"); } /** diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java index def909e02..2de685cb8 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/FunnelPlotPane.java @@ -7,7 +7,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.FunnelPlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.FunnelIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import java.text.DecimalFormat; @@ -31,7 +31,7 @@ public class FunnelPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Funnel") + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Funnel") }; } @@ -50,7 +50,7 @@ public class FunnelPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Funnel"); + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Funnel"); } /** diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java index f03ff9891..b1845bfe4 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GanttPlotPane.java @@ -3,7 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.GanttIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; /** @@ -25,8 +25,8 @@ public class GanttPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Gantt") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Gantt") + }; } @Override @@ -48,8 +48,8 @@ public class GanttPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Gantt"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Gantt"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java index 9909a2d85..9911ce4fb 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java @@ -11,7 +11,7 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import javax.swing.JPanel; @@ -73,8 +73,8 @@ public class GisMapPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_GIS_Map") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_GIS_Map") + }; } @Override @@ -173,8 +173,8 @@ public class GisMapPlotPane extends AbstractChartTypePane{ * @return 标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_GIS_Map"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_GIS_Map"); + } /** * 是否有坐标轴 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java index 0216b1ed7..0f93938bb 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java @@ -5,7 +5,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.LinePlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.LineIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; @@ -22,8 +22,8 @@ public class LinePlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Line") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Line") + }; } @Override @@ -84,8 +84,8 @@ public class LinePlotPane extends AbstractChartTypePane{ } public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Line"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Line"); + } public Chart getDefaultChart() { return LineIndependentChart.lineChartTypes[0]; diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java index ba1de4384..d761be371 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MapPlotPane.java @@ -10,7 +10,7 @@ import com.fr.chart.charttypes.MapIndependentChart; import com.fr.design.chart.series.PlotSeries.MapGroupExtensionPane; import com.fr.design.chart.series.PlotStyle.ChartSelectDemoPane; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import javax.swing.JPanel; @@ -72,8 +72,8 @@ public class MapPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_SVG_MAP"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_SVG_MAP"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java index fa9eb2c6a..10293b68c 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java @@ -7,7 +7,7 @@ import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.MeterStyle; import com.fr.chart.charttypes.MeterIndependentChart; import com.fr.design.i18n.Toolkit; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; @@ -33,7 +33,7 @@ public class MeterPlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { - String meter = Inter.getLocText("Fine-Engine_Chart_Type_Meter"); + String meter = InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Meter"); return new String[]{ Toolkit.i18nText("Fine-Design_Chart_Mode_Custom") + meter, meter + "1", @@ -79,7 +79,7 @@ public class MeterPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Meter"); + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Meter"); } /** diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java index 61076743e..eeccd2246 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/PiePlotPane.java @@ -10,7 +10,7 @@ import com.fr.chart.chartattr.PiePlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.charttypes.PieIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.stable.Constants; import java.awt.Color; @@ -36,8 +36,8 @@ public class PiePlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { - String pie = Inter.getLocText("Fine-Engine_Chart_Type_Pie"); - return new String[]{ + String pie = InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Pie"); + return new String[]{ pie, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_3D") + pie }; @@ -63,8 +63,8 @@ public class PiePlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Pie"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Pie"); + } private void createPieCondition(Plot plot) { ConditionCollection collection = plot.getConditionCollection(); diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java index ab73ee4ac..50e4a756e 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RadarPlotPane.java @@ -3,7 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.RadarIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; /** @@ -25,8 +25,8 @@ public class RadarPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Radar") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Radar") + }; } @Override @@ -49,8 +49,8 @@ public class RadarPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Radar"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Radar"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java index e317e571b..f87c6074d 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/RangePlotPane.java @@ -4,7 +4,7 @@ import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.RangePlot; import com.fr.chart.charttypes.RangeIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; /** @@ -26,8 +26,8 @@ public class RangePlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Range") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Range") + }; } @Override @@ -50,8 +50,8 @@ public class RangePlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Range"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Range"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java index b590109d4..63f4ead33 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/StockPlotPane.java @@ -3,7 +3,7 @@ package com.fr.design.mainframe.chart.gui.type; import com.fr.chart.base.ChartConstants; import com.fr.chart.chartattr.Chart; import com.fr.chart.charttypes.StockIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; /** @@ -25,8 +25,8 @@ public class StockPlotPane extends AbstractChartTypePane { @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_Stock") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Stock") + }; } @Override @@ -49,8 +49,8 @@ public class StockPlotPane extends AbstractChartTypePane { * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_Stock"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_Stock"); + } /** * 保存界面属性 diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java index d1d0c603c..46a5b13c0 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/XYScatterPlotPane.java @@ -6,7 +6,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.XYScatterPlot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.charttypes.XYScatterIndependentChart; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.stable.Constants; /** @@ -28,8 +28,8 @@ public class XYScatterPlotPane extends AbstractChartTypePane{ @Override protected String[] getTypeTipName() { return new String[]{ - Inter.getLocText("Fine-Engine_Chart_Type_XYScatter") - }; + InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_XYScatter") + }; } @Override @@ -47,8 +47,8 @@ public class XYScatterPlotPane extends AbstractChartTypePane{ * @return 界面标题 */ public String title4PopupWindow() { - return Inter.getLocText("Fine-Engine_Chart_Type_XYScatter"); - } + return InterProviderFactory.getProvider().getLocText("Fine-Engine_Chart_Type_XYScatter"); + } /** * 保存界面内容 diff --git a/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java b/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java index 0dbc47053..564a3ae6a 100644 --- a/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java +++ b/designer-realize/src/main/java/com/fr/poly/PolyComponentsBar.java @@ -12,7 +12,7 @@ import com.fr.design.gui.itooltip.MultiLineToolTip; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.dnd.SerializableTransferable; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.poly.PolyECBlock; import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; @@ -66,7 +66,7 @@ public class PolyComponentsBar extends JToolBar { for (int i = 0; i < typeLen; i++) { BaseChart[] rowChart = BaseChartGetter.getStaticChartTypes(typeName[i].getPlotID()); String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(typeName[i].getPlotID()); - serIcons[i + 1] = new SerIcon(rowChart[0], Inter.getLocText(typeName[i].getName()), iconPath); + serIcons[i + 1] = new SerIcon(rowChart[0], InterProviderFactory.getProvider().getLocText(typeName[i].getName()), iconPath); this.add(serIcons[i + 1]); } From fef8c6686c8c18691f3fa3bb3bb6ae8a8f36efed Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 15:40:38 +0800 Subject: [PATCH 107/196] ct --- .../com/fr/design/DesignerEnvManager.java | 53 +- .../design/actions/file/PreferencePane.java | 120 +-- .../ui/dialog/UpdateMainDialog.java | 825 ++++++++++++++++++ .../main/java/com/fr/design/ui/Assistant.java | 1 + .../com/fr/design/ui/EmbProtocolHandler.java | 34 +- .../java/com/fr/design/ui/ModernUIPane.java | 82 +- .../com/fr/design/ui/InitNameSpace.js | 6 +- .../java/com/fr/design/ui/FineUIDemo.java | 6 +- .../com/fr/design/ui/ModernUIPaneTest.java | 9 +- .../test/resources/com/fr/design/ui/demo.html | 6 + .../mainframe/InformationCollector.java | 282 +++++- .../src/main/java/com/fr/start/Designer.java | 61 +- 12 files changed, 1238 insertions(+), 247 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index bd464d77e..66a516554 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -14,8 +14,6 @@ import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.vcs.VcsConfigManager; -import com.fr.design.update.push.DesignerPushUpdateConfigManager; import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.utils.DesignUtils; import com.fr.file.FILEFactory; @@ -148,9 +146,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { */ private AlphaFineConfigManager alphaFineConfigManager = new AlphaFineConfigManager(); - private DesignerPushUpdateConfigManager designerPushUpdateConfigManager = DesignerPushUpdateConfigManager.getInstance(); - - private VcsConfigManager vcsConfigManager = VcsConfigManager.getInstance(); public static final String CAS_CERTIFICATE_PATH = "certificatePath"; @@ -182,6 +177,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { public static DesignerEnvManager getEnvManager(boolean needCheckEnv) { if (designerEnvManager == null) { designerEnvManager = new DesignerEnvManager(); + //REPORT-15332有一个国际化调用比较早,需要在这边就设置好locale,由于后台GeneralContext默认是China + GeneralContext.setLocale(designerEnvManager.getLanguage()); try { XMLTools.readFileXML(designerEnvManager, designerEnvManager.getDesignerEnvFile()); } catch (Exception e) { @@ -696,14 +693,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.joinProductImprove = joinProductImprove; } - public boolean isAutoPushUpdateEnabled() { - return designerPushUpdateConfigManager.isAutoPushUpdateEnabled(); - } - - public void setAutoPushUpdateEnabled(boolean autoPushUpdateEnabled) { - designerPushUpdateConfigManager.setAutoPushUpdateEnabled(autoPushUpdateEnabled); - } - /** * 是否磁盘空间参数 * @@ -1344,7 +1333,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } - private void readJettyPort(XMLableReader reader) { String tmpVal; if ((tmpVal = reader.getElementValue()) != null) { @@ -1489,18 +1477,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readUUID(reader); } else if ("status".equals(name)) { readActiveStatus(reader); - } else if (ComparatorUtils.equals(CAS_PARAS, name)) { + } else if (CAS_PARAS.equals(name)) { readHttpsParas(reader); - } else if (name.equals("AlphaFineConfigManager")) { + } else if ("AlphaFineConfigManager".equals(name)) { readAlphaFineAttr(reader); - } else if (name.equals("RecentColors")) { + } else if ("RecentColors".equals(name)) { readRecentColor(reader); } else if ("OpenDebug".equals(name)) { readOpenDebug(reader); - } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) { - readDesignerPushUpdateAttr(reader); - } else if (name.equals(vcsConfigManager.XML_TAG)) { - readVcsAttr(reader); } else { readLayout(reader, name); } @@ -1683,14 +1667,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { checkRecentOpenedFileNum(); } - private void readDesignerPushUpdateAttr(XMLableReader reader) { - reader.readXMLObject(designerPushUpdateConfigManager); - } - - private void readVcsAttr(XMLableReader reader) { - reader.readXMLObject(vcsConfigManager); - } - /** * Write XML.
* The method will be invoked when save data to XML file.
@@ -1714,8 +1690,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeAlphaFineAttr(writer); writeRecentColor(writer); writeOpenDebug(writer); - writeDesignerPushUpdateAttr(writer); - writeVcsAttr(writer); writer.end(); } @@ -1739,6 +1713,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } + //写入uuid private void writeUUID(XMLPrintWriter writer) { writer.startTAG("uuid"); @@ -1954,20 +1929,4 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .end(); } - private void writeDesignerPushUpdateAttr(XMLPrintWriter writer) { - this.designerPushUpdateConfigManager.writeXML(writer); - } - - private void writeVcsAttr(XMLPrintWriter writer) { - this.vcsConfigManager.writeXML(writer); - } - - - public VcsConfigManager getVcsConfigManager() { - return vcsConfigManager; - } - - public void setVcsConfigManager(VcsConfigManager vcsConfigManager) { - this.vcsConfigManager = vcsConfigManager; - } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 929350081..ae6ba4c25 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -2,6 +2,7 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; import com.fr.config.Configuration; +import com.fr.config.ServerPreferenceConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.dialog.BasicDialog; @@ -23,9 +24,6 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.vcs.VcsConfigManager; -import com.fr.design.mainframe.vcs.common.VcsHelper; -import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; @@ -43,8 +41,6 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; @@ -122,6 +118,7 @@ public class PreferencePane extends BasicPane { private KeyStroke shortCutKeyStore = null; private UIColorButton gridLineColorTBButton; + private UIColorButton paginationLineColorTBButton; private UICheckBox supportCellEditorDefCheckBox; @@ -136,16 +133,8 @@ public class PreferencePane extends BasicPane { private UICheckBox oracleSpace; private UISpinner cachingTemplateSpinner; private UICheckBox openDebugComboBox; - private UICheckBox joinProductImproveCheckBox; - private UICheckBox autoPushUpdateCheckBox; - - private UICheckBox vcsEnableCheckBox; - private UICheckBox saveCommitCheckBox; - private UICheckBox useIntervalCheckBox; - private IntegerEditor saveIntervalEditor; - private UILabel remindVcsLabel; - - + private UICheckBox useOptimizedUPMCheckbox; + private UICheckBox joinProductImprove; public PreferencePane() { this.initComponents(); @@ -163,11 +152,11 @@ public class PreferencePane extends BasicPane { jtabPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Advanced"), advancePane); contentPane.add(jtabPane, BorderLayout.NORTH); + createFunctionPane(generalPane); createEditPane(generalPane); createGuiOfGridPane(generalPane); createColorSettingPane(generalPane); - createVcsSettingPane(generalPane); // ConfPane JPanel confLocationPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane(); @@ -190,14 +179,15 @@ public class PreferencePane extends BasicPane { debuggerPane.add(openDebugComboBox, BorderLayout.CENTER); advancePane.add(debuggerPane); - JPanel improvePane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); - joinProductImproveCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); - improvePane.add(joinProductImproveCheckBox); + JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager")); + useOptimizedUPMCheckbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager")); + upmSelectorPane.add(useOptimizedUPMCheckbox); + advancePane.add(upmSelectorPane); - if (DesignerPushUpdateManager.getInstance().isAutoPushUpdateSupported()) { - autoPushUpdateCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); - improvePane.add(autoPushUpdateCheckBox); - } + + JPanel improvePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); + joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); + improvePane.add(joinProductImprove); JPanel spaceUpPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); spaceUpPane.add(oraclePane, BorderLayout.NORTH); @@ -206,45 +196,6 @@ public class PreferencePane extends BasicPane { advancePane.add(spaceUpPane); } - private void createVcsSettingPane(JPanel generalPane) { - JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); - generalPane.add(vcsPane); - remindVcsLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Remind")); - remindVcsLabel.setVisible(!VcsHelper.needInit()); - vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); - saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); - saveIntervalEditor = new IntegerEditor(60); - useIntervalCheckBox = new UICheckBox(); - JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); - enableVcsPanel.add(vcsEnableCheckBox); - enableVcsPanel.add(remindVcsLabel); - JPanel intervalPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); - UILabel everyLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Every")); - UILabel delayLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Delay")); - intervalPanel.add(useIntervalCheckBox); - intervalPanel.add(everyLabel); - intervalPanel.add(saveIntervalEditor); - intervalPanel.add(delayLabel); - vcsEnableCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - boolean selected = vcsEnableCheckBox.isSelected(); - if (selected) { - saveCommitCheckBox.setEnabled(true); - saveIntervalEditor.setEnabled(true); - useIntervalCheckBox.setEnabled(true); - } else { - saveCommitCheckBox.setEnabled(false); - saveIntervalEditor.setEnabled(false); - useIntervalCheckBox.setEnabled(false); - } - } - }); - vcsPane.add(enableVcsPanel); - vcsPane.add(intervalPanel); - vcsPane.add(saveCommitCheckBox); - } - private void createFunctionPane(JPanel generalPane) { JPanel functionPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Function")); generalPane.add(functionPane); @@ -594,22 +545,6 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setEnabled(false); defaultStringToFormulaBox.setSelected(false); } - VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); - if (VcsHelper.needInit()) { - vcsEnableCheckBox.setSelected(vcsConfigManager.isVcsEnable()); - } else { - vcsEnableCheckBox.setEnabled(false); - vcsEnableCheckBox.setSelected(false); - } - if (!vcsEnableCheckBox.isSelected()) { - saveCommitCheckBox.setEnabled(false); - saveIntervalEditor.setEnabled(false); - useIntervalCheckBox.setEnabled(false); - } - - saveIntervalEditor.setValue(vcsConfigManager.getSaveInterval()); - saveCommitCheckBox.setSelected(vcsConfigManager.isSaveCommit()); - useIntervalCheckBox.setSelected(vcsConfigManager.isUseInterval()); supportCellEditorDefCheckBox.setSelected(designerEnvManager.isSupportCellEditorDef()); @@ -631,13 +566,11 @@ public class PreferencePane extends BasicPane { openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); + useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM()); + this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); - this.joinProductImproveCheckBox.setSelected(designerEnvManager.isJoinProductImprove()); - - if (this.autoPushUpdateCheckBox != null) { - this.autoPushUpdateCheckBox.setSelected(designerEnvManager.isAutoPushUpdateEnabled()); - } + this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); } private int chooseCase(int sign) { @@ -698,15 +631,7 @@ public class PreferencePane extends BasicPane { designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); - designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); - VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); - vcsConfigManager.setSaveInterval(this.saveIntervalEditor.getValue()); - vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); - vcsConfigManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); - vcsConfigManager.setUseInterval(this.useIntervalCheckBox.isSelected()); - if (this.autoPushUpdateCheckBox != null) { - designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected()); - } + designerEnvManager.setJoinProductImprove(this.joinProductImprove.isSelected()); designerEnvManager.setUndoLimit(maxUndoLimit.getSelectedIndex() * SELECTED_INDEX_5); if (maxUndoLimit.getSelectedIndex() == SELECTED_INDEX_5) { @@ -724,6 +649,17 @@ public class PreferencePane extends BasicPane { return new Class[]{Log4jConfig.class}; } }); + Configurations.update(new Worker() { + @Override + public void run() { + ServerPreferenceConfig.getInstance().setUseOptimizedUPM(useOptimizedUPMCheckbox.isSelected()); + } + + @Override + public Class[] targets() { + return new Class[] {ServerPreferenceConfig.class}; + } + }); } diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java new file mode 100644 index 000000000..9438df33b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -0,0 +1,825 @@ +package com.fr.design.onlineupdate.ui.dialog; + +import com.fr.design.RestartHelper; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.onlineupdate.actions.FileDownloader; +import com.fr.design.onlineupdate.domain.DownloadItem; +import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.onlineupdate.domain.UpdateInfoCachePropertyManager; +import com.fr.design.onlineupdate.factory.DirectoryOperationFactory; +import com.fr.design.onlineupdate.ui.widget.LoadingLabel; +import com.fr.design.onlineupdate.ui.widget.UpdateActionLabel; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTable; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableCellRender; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableModel; +import com.fr.design.onlineupdate.ui.widget.UpdateInfoTextAreaCellRender; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.general.DateUtils; +import com.fr.general.GeneralContext; +import com.fr.general.GeneralUtils; +import com.fr.general.IOUtils; +import com.fr.general.SiteCenter; +import com.fr.general.http.HttpClient; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; +import com.fr.workspace.WorkContext; +import com.sun.java.swing.plaf.motif.MotifProgressBarUI; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.RowSorter; +import javax.swing.SortOrder; +import javax.swing.SwingConstants; +import javax.swing.SwingWorker; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.TableRowSorter; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.*; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutionException; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class UpdateMainDialog extends UIDialog { + public static final Dimension DEFAULT = new Dimension(660, 620); + + private static final Dimension PROGRESSBAR = new Dimension(120, 15); + private static final Dimension UPDATE_BUTTON = new Dimension(80, 24); + private static final int UPDATE_PANE_ROW_SIZE = 30; + private static final int UPDATE_CONTENT_PANE_ROW_SIZE = 10; + private static final int UPDATE_CONTENT_PANE_COLUMN_SIZE = 10; + private static final int UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE = 100; + private static final int SEARCH_PANE_ROW_SIZE = 50; + private static final int SEARCH_PANE_TEXT_COLUMN = 130; + private static final int SEARCH_PANE_COLUMN_GAP = 3; + private static final int UPDATE_INFO_TABLE_HEADER_TIME_WIDTH = 120; + private static final int UPDATE_CONTENT_PANE_BORDER_COLOR = 0xCCCCCC; + private static final int RESTORE_LABEL_COLOR = 0x3384F0; + + private static final String UPDATE_CACHE_STATE_FAIL = "fail"; + private static final String UPDATE_CACHE_STATE_SUCCESS = "success"; + + private static final SimpleDateFormat CHANGELOG_FORMAT = new SimpleDateFormat("M/d/y, h:m:s a", Locale.ENGLISH); + private static final SimpleDateFormat UPDATE_INFO_TABLE_FORMAT = new SimpleDateFormat("yyyy.MM.dd"); + + private Set downloadItems = new HashSet(); + private JSONObject downloadFileConfig; + //最新版本标签 + private LoadingLabel loadingLabel; + //更新按钮 + private UIButton updateButton; + //有新版本提示标签 + private UILabel updateLabel; + + //jar包版本信息面板,包括当前版本和最新版本 + private JPanel jarVersionInfoPane; + //jar包更新信息面板,包括每个版本更新的信息 + private JPanel jarUpdateInfoPane; + //jar包更新操作面板,包括更新重启按钮和进度条 + private JPanel updateActionPane; + //进度条 + private JProgressBar progressBar; + //更新版本提示面板 + private JPanel updateVersionReminderPane; + //jar包版本标签 + private UILabel jarCurrentLabel; + //jar包还原标签 + private UILabel jarRestoreLabel; + //更新信息搜索按钮 + private UIButton searchUpdateInfoBtn; + //搜索更新信息关键词文本框 + private UITextField searchUpdateInfoKeyword; + + private boolean updateSuccessful; + + private UpdateInfoTable updateInfoTable; + + private ArrayList updateInfoList; + + private boolean getUpdateInfoSuccess; + + private UpdateInfoCachePropertyManager cacheProperty; + private String lastUpdateCacheTime; + private String lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; + + public UpdateMainDialog(Dialog parent) { + super(parent); + initComponents(); + } + + public UpdateMainDialog(Frame parent) { + super(parent); + setModal(true); + initComponents(); + } + + private void initUpdateActionPane() { + double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; + double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; + double[] columnUpdateSubContentPaneProgressSize = {TableLayout.FILL, TableLayout.PREFERRED}; + double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.FILL, TableLayout.PREFERRED}; + JPanel progressBarPane = new JPanel(new BorderLayout()); + + progressBar = new JProgressBar(); + progressBar.setUI(new MotifProgressBarUI()); + progressBar.setForeground(UpdateConstants.BAR_COLOR); + progressBar.setVisible(false); + progressBar.setStringPainted(true); + progressBar.setPreferredSize(PROGRESSBAR); + + updateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_New_Version_Available")); + updateLabel.setHorizontalAlignment(SwingConstants.RIGHT); + updateLabel.setVisible(false); + + progressBarPane.add(GUICoreUtils.createBorderLayoutPane( + progressBar, BorderLayout.CENTER, + updateLabel, BorderLayout.EAST + ), BorderLayout.CENTER); + + updateActionPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateSubContentPaneProgressSize, progressBarPane, updateButton), new UILabel()}, + new Component[]{new UILabel(), new UILabel(), new UILabel()} + }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); + } + + private JPanel initPaneContent(Color color, double[] row, double[] column, Component... var) { + JPanel paneContent = TableLayoutHelper.createTableLayoutPane(new Component[][]{var}, row, column); + paneContent.setBackground(color); + return paneContent; + } + + private void initJarVersionInfoPane() { + double[] rowUpdatePaneSize = {UPDATE_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED}; + double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; + double[] columnUpdateContentPaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; + double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.FILL, TableLayout.PREFERRED}; + double[] columnUpdateSubContentPaneLabelSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; + + JPanel jarUpdateContentPane = new JPanel(); + jarUpdateContentPane.setLayout(new BorderLayout()); + jarUpdateContentPane.setBorder(BorderFactory.createLineBorder(new Color(UPDATE_CONTENT_PANE_BORDER_COLOR))); + + JPanel jarUpdateContentPane2 = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), updateVersionReminderPane, new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JAR_Version")), jarCurrentLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Latest_JAR")), loadingLabel), new UILabel()}, + new Component[]{new UILabel(), new UILabel(), new UILabel()} + }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); + jarUpdateContentPane2.setBackground(Color.WHITE); + jarUpdateContentPane.add(jarUpdateContentPane2); + jarVersionInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JarUpdate")), new UILabel(), jarRestoreLabel), new UILabel()}, + new Component[]{new UILabel(), jarUpdateContentPane, new UILabel()} + }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); + } + + private void initJarUpdateInfoPane() { + double[] rowUpdatePaneSize = {SEARCH_PANE_ROW_SIZE, TableLayout.FILL}; + double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + + double[] searchRow = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, SEARCH_PANE_COLUMN_GAP * 2}; + double[] searchColumn = {TableLayout.FILL, SEARCH_PANE_TEXT_COLUMN, TableLayout.PREFERRED}; + initUpdateInfoSearchPane(); + JPanel searchPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), new UILabel(), new UILabel()}, + new Component[]{new UILabel(), searchUpdateInfoKeyword, searchUpdateInfoBtn}, + new Component[]{new UILabel(), new UILabel(), new UILabel()} + }, searchRow, searchColumn, LayoutConstants.VGAP_LARGE); + + String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_SignHeader")}; + initUpdateInfoTable(columnNames); + + UIScrollPane uiScrollPane = new UIScrollPane(updateInfoTable); + jarUpdateInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ + new Component[]{new UILabel(), searchPane, new UILabel()}, + new Component[]{new UILabel(), uiScrollPane, new UILabel()} + }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); + } + + private void initUpdateInfoTable(String[] columnNames) { + int updateTimeColIndex = 0; + int updateTitleColIndex = 1; + int updateSignColIndex = 2; + + updateInfoTable = new UpdateInfoTable(columnNames); + + updateInfoTable.setShowGrid(false); + updateInfoTable.setCellSelectionEnabled(false); + TableRowSorter sorter = new TableRowSorter(updateInfoTable.getDataModel()); + sorter.setSortable(updateTimeColIndex, true); + sorter.setSortable(updateTitleColIndex, false); + sorter.setSortable(updateSignColIndex, false); + updateInfoTable.setRowSorter(sorter); + List sortKeys = new ArrayList(); + sortKeys.add(new RowSorter.SortKey(updateTimeColIndex, SortOrder.DESCENDING)); + sorter.setSortKeys(sortKeys); + + updateInfoTable.getTableHeader().setReorderingAllowed(false); + updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMaxWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMinWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); + updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); + updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); + updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date")).setCellRenderer(new UpdateInfoTableCellRender()); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content")).setCellRenderer(new UpdateInfoTextAreaCellRender()); + } + + private void initUpdateInfoSearchPane() { + searchUpdateInfoKeyword = new UITextField(); + searchUpdateInfoKeyword.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + } + + @Override + public void removeUpdate(DocumentEvent e) { + String keyword = searchUpdateInfoKeyword.getText(); + if (ComparatorUtils.equals(keyword, StringUtils.EMPTY) && getUpdateInfoSuccess) { + updateInfoList.clear(); + getUpdateInfo(keyword).execute(); + } + } + + @Override + public void changedUpdate(DocumentEvent e) { + } + }); + searchUpdateInfoBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Search")); + searchUpdateInfoBtn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (getUpdateInfoSuccess) { + updateInfoList.clear(); + getUpdateInfo(searchUpdateInfoKeyword.getText()).execute(); + } + } + }); + } + + private void initButtonAndLabel() { + loadingLabel = new LoadingLabel(); + loadingLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Checking_Jar_Update")); + updateButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Update")); + updateButton.setPreferredSize(UPDATE_BUTTON); + updateButton.setEnabled(false); + + double[] rowSize = {TableLayout.PREFERRED}; + + double[] colSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; + updateVersionReminderPane = initPaneContent( + Color.WHITE, rowSize, colSize, + new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Designer_Version")), + new UILabel(UpdateConstants.DEFAULT_APP_NAME + StringUtils.BLANK + ProductConstants.VERSION) + ); + + + jarCurrentLabel = new UILabel(StringUtils.isEmpty(GeneralUtils.readBuildNO()) ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Not_Install_Version") : GeneralUtils.readBuildNO(), SwingConstants.CENTER); + UILabel noJarPreviousRevision = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_No_Previous_Version")); + UpdateActionLabel jarRestorePreviousRevision = new UpdateActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore"), false); + jarRestorePreviousRevision.setForeground(new Color(RESTORE_LABEL_COLOR)); + jarRestorePreviousRevision.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + RestoreDialog dialog = new RestoreDialog(DesignerContext.getDesignerFrame(), true); + dialog.showDialog(); + } + }); + //choose RestoreLabel to show + boolean isNeedRestore = ArrayUtils.isNotEmpty(DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), getBackupDirectory())); + jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : noJarPreviousRevision; + } + + private void initComponents() { + JPanel contentPane = (JPanel) getContentPane(); + contentPane.setLayout(new BorderLayout()); + + + initButtonAndLabel(); + + initJarVersionInfoPane(); + initJarUpdateInfoPane(); + initUpdateActionPane(); + + add(jarVersionInfoPane, BorderLayout.NORTH); + + //海外版本不显示更新信息 + if (GeneralContext.getLocale().equals(Locale.CHINA) || GeneralContext.getLocale().equals(Locale.TAIWAN)){ + add(jarUpdateInfoPane, BorderLayout.CENTER); + add(updateActionPane, BorderLayout.SOUTH); + }else { + add(updateActionPane, BorderLayout.CENTER); + } + + addActionListenerForUpdateBtn(); + + new SwingWorker() { + @Override + protected JSONObject doInBackground() throws Exception { + HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("jar10.update")); + hc.setTimeout(UpdateConstants.CONNECTION_TIMEOUT); + return new JSONObject(hc.getResponseText()); + } + + @Override + protected void done() { + try { + downloadFileConfig = get(); + showDownLoadInfo(); + } catch (InterruptedException e) { + stopLoading(); + } catch (ExecutionException e) { + stopLoading(); + } finally { + getUpdateInfo(StringUtils.EMPTY).execute(); + } + } + }.execute(); + } + + private SwingWorker getUpdateInfo(final String keyword) { + updateInfoList = new ArrayList(); + lastUpdateCacheTime = UpdateConstants.CHANGELOG_X_START; + String cacheConfigPath = getUpdateCacheConfig(); + cacheProperty = new UpdateInfoCachePropertyManager(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres", cacheConfigPath)); + String recordUpdateTime = cacheProperty.readProperty("updateTime"); + if (StringUtils.isNotEmpty(recordUpdateTime)) { + lastUpdateCacheTime = recordUpdateTime; + } + String recordUpdateState = cacheProperty.readProperty("updateState"); + if (StringUtils.isNotEmpty(recordUpdateState)) { + lastUpdateCacheState = recordUpdateState; + } + return new SwingWorker() { + @Override + protected JSONArray doInBackground() { + try { + getUpdateInfoSuccess = false; + //step1:read from cache file + getCachedUpdateInfo(keyword); + //step2:read from website,start from cacheRecordTime + if (downloadFileConfig == null) { + throw new Exception("network error."); + } + HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("changelog10") + "&start=" + lastUpdateCacheTime + "&end=" + getLatestJARTimeStr()); + hc.asGet(); + hc.setTimeout(UpdateConstants.CONNECTION_TIMEOUT * 2); + String responseText = hc.getResponseText(); + JSONArray array = JSONArray.create(); + //假如返回"-1",说明socket出错了 + if (!ComparatorUtils.equals(responseText, "-1")) { + array = new JSONArray(responseText); + } + hc.release(); + return array; + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + return JSONArray.create(); + } + + @Override + protected void done() { + try { + JSONArray jsonArray = get(); + //step3:generateInfoTableList + updateInfoTable.getDataModel().populateBean(generateUpdateInfoList(jsonArray, keyword)); + + getUpdateInfoSuccess = true; + //step4:update cache file,start from cacheRecordTime,end latest server jartime + updateCachedInfoFile(jsonArray); + } catch (Exception e) { + getUpdateInfoSuccess = true; + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + }; + } + + //从文件中读取缓存的更新信息 + private void getCachedUpdateInfo(String keyword) throws Exception { + String cacheInfoPath = getUpdateCacheInfo(); + File cacheFile = new File(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres", cacheInfoPath)); + if (!ComparatorUtils.equals(lastUpdateCacheState, "success")) { + cacheFile.delete(); + return; + } + if (cacheFile.exists()) { + InputStreamReader streamReader = new InputStreamReader(new FileInputStream(cacheFile), "UTF-8"); + BufferedReader br = new BufferedReader(streamReader); + String readStr, updateTimeStr; + + while ((readStr = br.readLine()) != null) { + String[] updateInfo = readStr.split("\\t"); + if (updateInfo.length == 2) { + updateTimeStr = updateInfo[0]; + Date updateTime = CHANGELOG_FORMAT.parse(updateTimeStr); + //形如 Build#release-2018.07.31.03.03.52.80 + String currentNO = GeneralUtils.readBuildNO(); + Date curJarDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (!ComparatorUtils.equals(keyword, StringUtils.EMPTY)) { + if (!containsKeyword(UPDATE_INFO_TABLE_FORMAT.format(updateTime), keyword) && !containsKeyword(updateInfo[1], keyword)) { + continue; + } + } + if (isValidLogInfo(updateInfo[1])) { + updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateInfo[1], updateTime.after(curJarDate)}); + } + } + } + br.close(); + streamReader.close(); + } + } + + private void updateCachedInfoFile(JSONArray jsonArray) throws Exception { + String cacheDirPath = StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres"); + File cacheFileDir = new File(cacheDirPath); + if (!StableUtils.mkdirs(cacheFileDir)) { + FineLoggerFactory.getLogger().error("make dir error."); + return; + } + final File cacheFile = new File(StableUtils.pathJoin(cacheDirPath, getUpdateCacheInfo())); + if (!cacheFile.exists()) { + cacheFile.createNewFile(); + lastUpdateCacheTime = UpdateConstants.CHANGELOG_X_START; + lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; + } + if (downloadFileConfig == null) { + return; + } + String endTime = getLatestJARTimeStr(); + if (endTime.equals(lastUpdateCacheTime) || jsonArray.length() == 0 || ComparatorUtils.compare(endTime, lastUpdateCacheTime) <= 0) { + return; + } + OutputStreamWriter writerStream = new OutputStreamWriter(new FileOutputStream(cacheFile), "UTF-8"); + BufferedWriter bufferWriter = new BufferedWriter(writerStream); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jo = (JSONObject) jsonArray.get(i); + bufferWriter.write((String) jo.get("update") + '\t' + jo.get("title")); + bufferWriter.newLine(); + bufferWriter.flush(); + } + bufferWriter.close(); + writerStream.close(); + lastUpdateCacheState = UPDATE_CACHE_STATE_SUCCESS; + lastUpdateCacheTime = endTime; + cacheProperty.updateProperty("updateTime", lastUpdateCacheTime); + cacheProperty.updateProperty("updateState", lastUpdateCacheState); + } + + private ArrayList generateUpdateInfoList(JSONArray jsonArray, String keyword) throws Exception { + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jo = (JSONObject) jsonArray.get(i); + String updateTitle = (String) jo.get("title"); + String updateTimeStr = (String) jo.get("update"); + Date updateTime = CHANGELOG_FORMAT.parse(updateTimeStr); + //形如 Build#release-2018.07.31.03.03.52.80 + String currentNO = GeneralUtils.readBuildNO(); + Date curJarDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (!ComparatorUtils.equals(keyword, StringUtils.EMPTY)) { + if (!containsKeyword(UPDATE_INFO_TABLE_FORMAT.format(updateTime), keyword) && !containsKeyword(updateTitle, keyword)) { + continue; + } + } + if (isValidLogInfo(updateTitle)) { + updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateTitle, updateTime.after(curJarDate)}); + } + } + return new ArrayList(updateInfoList); + } + + private boolean containsKeyword(String str, String keyword) { + return str.toUpperCase().contains(keyword.toUpperCase()); + } + + private void stopLoading() { + loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Connect_VersionUpdateServer_Failed")); + } + + + private void showDownLoadInfo() { + //形如 Build#release-2018.07.31.03.03.52.80 + String buildNO = downloadFileConfig.optString("buildNO"); + Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); + String serverVersionNO = downloadFileConfig.optString("versionNO"); + String currentVersionNO = ProductConstants.RELEASE_VERSION; + String[] serverVersionSplitStr = serverVersionNO.split("\\."); + String[] currentVersionSplitStr = currentVersionNO.split("\\."); + int index = 0; + int compareResult; + int versionLength = Math.min(serverVersionSplitStr.length, currentVersionSplitStr.length); + + //形如 Build#release-2018.07.31.03.03.52.80 + String currentNO = GeneralUtils.readBuildNO(); + if (!".".equals(StableUtils.getInstallHome())) { + Date currentDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.DAY) > 0) { + updateButton.setEnabled(true); + updateLabel.setVisible(true); + loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); + } else { + loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Latest_Version")); + } + } else { + updateButton.setEnabled(true); + updateLabel.setVisible(true); + loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); + } + + while (index < versionLength) { + compareResult = serverVersionSplitStr[index].length() - currentVersionSplitStr[index].length(); + if (0 == compareResult) { + compareResult = serverVersionSplitStr[index].compareTo(currentVersionSplitStr[index]); + if (0 == compareResult) { + ++index; + continue; + } + break; + } + break; + } + + initMapWithInfo(downloadFileConfig); + } + + public void initMapWithInfo(JSONObject result) { + addJarNameToMap(result, "designer"); + addJarNameToMap(result, "server"); + } + + private void addJarNameToMap(JSONObject result, String category) { + JSONArray jsonArray = result.optJSONArray(category); + if (jsonArray != null) { + for (int i = 0, len = jsonArray.length(); i < len; i++) { + JSONObject jo = jsonArray.optJSONObject(i); + String downloadName = jo.optString("name"); + String downloadUrl = jo.optString("url"); + long downloadSize = jo.optLong("size"); + if (ComparatorUtils.equals(category, "server")) { + File currentJAR = new File(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), ProjectConstants.LIB_NAME, downloadName)); + if (currentJAR.exists() && ComparatorUtils.equals(currentJAR.length(), downloadSize)) { + //假如大小一样的jar包就不要下载了 + continue; + } + } + downloadItems.add(new DownloadItem(downloadName, downloadUrl, downloadSize)); + } + } + } + + /** + * jar包更新按钮监听器 + */ + private void addActionListenerForUpdateBtn() { + updateButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (updateSuccessful) { + RestartHelper.restart(); + } else { + deletePreviousPropertyFile(); + updateButton.setEnabled(false); + progressBar.setVisible(true); + updateLabel.setVisible(false); + + new FileDownloader( + downloadItems.toArray(new DownloadItem[downloadItems.size()]), + StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DOWNLOAD_DIR)) { + @Override + protected void process(java.util.List chunks) { + DownloadItem fileInfo = chunks.get(chunks.size() - 1); + progressBar.setString(fileInfo.getName() + " " + fileInfo.getProgressString()); + progressBar.setValue(fileInfo.getProgressValue()); + } + + @Override + public void onDownloadSuccess() { + updateButton.setEnabled(true); + progressBar.setVisible(false); + backup(); + putNewFiles(); + updateSuccessful = true; + updateButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); + } + + @Override + public void onDownloadFailed() { + progressBar.setVisible(false); + } + }.execute(); + } + } + }); + } + + /** + * 确保升级更新之前删除以前的配置文件 + */ + public static void deletePreviousPropertyFile() { + //在进行更新升级之前确保move和delete.properties删除 + File moveFile = new File(RestartHelper.MOVE_FILE); + File delFile = new File(RestartHelper.RECORD_FILE); + if ((moveFile.exists()) && (!moveFile.delete())) { + FineLoggerFactory.getLogger().error(RestartHelper.MOVE_FILE + "delete failed!"); + } + if ((delFile.exists()) && (!delFile.delete())) { + FineLoggerFactory.getLogger().error(RestartHelper.RECORD_FILE + "delete failed!"); + } + } + + /** + * JAR包更新的时候备份老的jar包,包括设计器相关的和服务器相关的几个 + */ + private void backup() { + String installHome = StableUtils.getInstallHome(); + //jar包备份文件的目录为"backup/"+jar包当前版本号 + String todayBackupDir = StableUtils.pathJoin(installHome, getBackupDirectory(), (GeneralUtils.readBuildNO())); + backupFilesFromInstallEnv(installHome, todayBackupDir, getJARList4Server()); + backupFilesFromInstallLib(installHome, todayBackupDir, getJARList4Designer()); + jarCurrentLabel.setText(downloadFileConfig.optString("buildNO")); + } + + private void backupFilesFromInstallEnv(String installHome, String todayBackupDir, List files) { + for (String file : files) { + try { + IOUtils.copy( + new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(todayBackupDir))); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + } + + private void backupFilesFromInstallLib(String installHome, String todayBackupDir, List files) { + for (String file : files) { + try { + IOUtils.copy( + new File(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(todayBackupDir))); + } catch (IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } + } + + private void putNewFiles() { + Map map = new HashMap(); + java.util.List list = new ArrayList(); + String installHome = StableUtils.getInstallHome(); + putNewFilesToInstallLib(installHome, getDownLoadJAR4Designer(), map, list); + putNewFilesToInstallEnv(installHome, getDownLoadJAR4Server(), map, list); + RestartHelper.saveFilesWhichToMove(map); + RestartHelper.saveFilesWhichToDelete(list.toArray(new String[list.size()])); + } + + private void putNewFilesToInstallLib(String installHome, String[] files, Map map, java.util.List list) { + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), + StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + } + } + + private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + } + } + + //获取备份目录 + private String getBackupDirectory() { + return UpdateConstants.DESIGNER_BACKUP_DIR; + } + + //获取服务器jar包列表 + private List getJARList4Server() { + return UpdateConstants.JARS_FOR_SERVER_X; + } + + //获取设计器jar包列表 + private List getJARList4Designer() { + return UpdateConstants.JARS_FOR_DESIGNER_X; + } + + //获取服务器jar包下载列表 + private String[] getDownLoadJAR4Server() { + ArrayList jarList = new ArrayList(); + List serverItems = getJARList4Server(); + for (DownloadItem downloadItem : downloadItems) { + String downloadItemName = downloadItem.getName(); + if (serverItems.contains(downloadItemName)) { + jarList.add(downloadItemName); + } + } + return jarList.toArray(new String[jarList.size()]); + } + + //获取设计器jar包下载列表 + private String[] getDownLoadJAR4Designer() { + ArrayList jarList = new ArrayList(); + List designerJarItems = getJARList4Designer(); + for (DownloadItem downloadItem : downloadItems) { + String downloadItemName = downloadItem.getName(); + if (designerJarItems.contains(downloadItemName)) { + jarList.add(downloadItemName); + } + } + return jarList.toArray(new String[jarList.size()]); + } + + //获取更新日志缓存配置文件名 + private String getUpdateCacheConfig() { + return UpdateConstants.UPDATE_CACHE_CONFIG_X; + } + + //获取更新日志缓存内容文件名 + private String getUpdateCacheInfo() { + return UpdateConstants.UPDATE_CACHE_INFO_X; + } + + //获取最新的jar包时间字符串 + private String getLatestJARTimeStr() { + if (downloadFileConfig == null) { + return StringUtils.EMPTY; + } + String buildNO = downloadFileConfig.optString("buildNO"); + Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + return df.format(jarDate); + } + + //判断是否是有效的日志内容 + private boolean isValidLogInfo(String logContent) { + String log = logContent.toUpperCase(); + List logType = UpdateConstants.LOG_TYPE; + for (String s : logType) { + if (log.startsWith(s)) { + return true; + } + } + return false; + } + + /** + * 显示窗口 + */ + public void showDialog() { + setSize(DEFAULT); + setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_UpdateAndUpgrade")); + GUICoreUtils.centerWindow(this); + setVisible(true); + } + + /** + * 检查有效性 + * + * @throws Exception + */ + @Override + public void checkValid() throws Exception { + + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/ui/Assistant.java b/designer-base/src/main/java/com/fr/design/ui/Assistant.java index 601f0ac36..7a51c188c 100644 --- a/designer-base/src/main/java/com/fr/design/ui/Assistant.java +++ b/designer-base/src/main/java/com/fr/design/ui/Assistant.java @@ -49,5 +49,6 @@ public class Assistant { ProtocolService protocolService = browserContext.getProtocolService(); // 支持读取jar包中文件的自定义协议————emb:/com/fr/design/images/bbs.png protocolService.setProtocolHandler("emb", handler); + //protocolService.setProtocolHandler("file", handler); } } diff --git a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java index 6636e2874..94456df97 100644 --- a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java +++ b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java @@ -1,7 +1,11 @@ package com.fr.design.ui; +import com.fr.base.TemplateUtils; import com.fr.general.IOUtils; import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.codec.net.URLCodec; +import com.fr.third.org.apache.commons.io.FileUtils; +import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.web.struct.AssembleComponent; import com.fr.web.struct.AtomBuilder; import com.fr.web.struct.PathGroup; @@ -11,7 +15,12 @@ import com.teamdev.jxbrowser.chromium.ProtocolHandler; import com.teamdev.jxbrowser.chromium.URLRequest; import com.teamdev.jxbrowser.chromium.URLResponse; +import java.io.File; +import java.io.FileInputStream; import java.io.InputStream; +import java.io.StringReader; +import java.net.URI; +import java.util.Map; /** * @author richie @@ -21,6 +30,7 @@ import java.io.InputStream; public class EmbProtocolHandler implements ProtocolHandler { private AssembleComponent component; + private Map map; public EmbProtocolHandler() { @@ -30,17 +40,35 @@ public class EmbProtocolHandler implements ProtocolHandler { this.component = component; } + public EmbProtocolHandler(AssembleComponent component, Map map) { + this.component = component; + this.map = map; + } + + public EmbProtocolHandler(Map map) { + this.map = map; + } @Override public URLResponse onRequest(URLRequest req) { try { String path = req.getURL(); - if (path.startsWith("emb:dynamic")) { + if (path.startsWith("file:")) { + String url = new URLCodec().decode(path); + String filePath = TemplateUtils.renderParameter4Tpl(url, map); + File file = new File(URI.create(filePath).getPath()); + InputStream inputStream = new FileInputStream(file); + if (path.endsWith(".svg")) { + System.out.println(path); + } + return Assistant.inputStream2Response(inputStream, "file:///" + file.getAbsolutePath()); + } + else if (path.startsWith("emb:dynamic")) { URLResponse response = new URLResponse(); response.setData(htmlText().getBytes()); response.getHeaders().setHeader("Content-Type", "text/html"); return response; - } else { + } else { int index = path.indexOf("="); if (index > 0) { path = path.substring(index + 1); @@ -51,7 +79,7 @@ public class EmbProtocolHandler implements ProtocolHandler { return Assistant.inputStream2Response(inputStream, path); } } catch (Exception ignore) { - + ignore.printStackTrace(); } return null; } diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index 81f9e051b..99a4fe97c 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -2,6 +2,10 @@ package com.fr.design.ui; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.gui.GUICoreUtils; import com.fr.web.struct.AssembleComponent; import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.BrowserPreferences; @@ -14,8 +18,11 @@ import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; import com.teamdev.jxbrowser.chromium.events.ScriptContextListener; import com.teamdev.jxbrowser.chromium.swing.BrowserView; -import javax.swing.JSplitPane; -import java.awt.BorderLayout; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Map; /** * @author richie @@ -39,17 +46,29 @@ public class ModernUIPane extends BasicPane { setLayout(new BorderLayout()); BrowserPreferences.setChromiumSwitches("--disable-google-traffic"); if (DesignerEnvManager.getEnvManager().isOpenDebug()) { - JSplitPane splitPane = new JSplitPane(); - add(splitPane, BorderLayout.CENTER); - splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); - splitPane.setDividerLocation(500); + UIToolbar toolbar = new UIToolbar(); + add(toolbar, BorderLayout.NORTH); + UIButton openDebugButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Open_Debug_Window")); + toolbar.add(openDebugButton); + UIButton reloadButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Reload")); + toolbar.add(reloadButton); + + openDebugButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + showDebuggerDialog(); + } + }); + + reloadButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + browser.reloadIgnoringCache(); + } + }); BrowserPreferences.setChromiumSwitches("--remote-debugging-port=9222"); initializeBrowser(); - splitPane.setLeftComponent(new BrowserView(browser)); - Browser debugger = new Browser(); - debugger.loadURL(browser.getRemoteDebuggingURL()); - BrowserView debuggerView = new BrowserView(debugger); - splitPane.setRightComponent(debuggerView); + add(new BrowserView(browser), BorderLayout.CENTER); } else { initializeBrowser(); add(new BrowserView(browser), BorderLayout.CENTER); @@ -57,6 +76,18 @@ public class ModernUIPane extends BasicPane { } } + private void showDebuggerDialog() { + JDialog dialog = new JDialog(SwingUtilities.getWindowAncestor(this)); + Browser debugger = new Browser(); + BrowserView debuggerView = new BrowserView(debugger); + dialog.add(debuggerView, BorderLayout.CENTER); + dialog.setSize(new Dimension(800, 400)); + GUICoreUtils.centerWindow(dialog); + dialog.setVisible(true); + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + debugger.loadURL(browser.getRemoteDebuggingURL()); + } + private void initializeBrowser() { browser = new Browser(); // 初始化的时候,就把命名空间对象初始化好,确保window.a.b.c("a.b.c"为命名空间)对象都是初始化过的 @@ -68,6 +99,14 @@ public class ModernUIPane extends BasicPane { }); } + /** + * 转向一个新的地址,相当于重新加载 + * @param url 新的地址 + */ + public void redirect(String url) { + browser.loadURL(url); + } + @Override protected String title4PopupWindow() { return "Modern"; @@ -126,6 +165,16 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载url指向的资源 + * @param url 文件的地址 + */ + public Builder withURL(final String url, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(map)); + pane.browser.loadURL(url); + return this; + } + /** * 加载Atom组件 * @param component Atom组件 @@ -136,6 +185,17 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载Atom组件 + * @param component Atom组件 + */ + public Builder withComponent(AssembleComponent component, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(component, map)); + pane.browser.loadURL("emb:dynamic"); + return this; + } + + /** * 加载html文本内容 * @param html 要加载html文本内容 diff --git a/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js b/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js index 0274d5fa5..03b2bb32a 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js +++ b/designer-base/src/main/resources/com/fr/design/ui/InitNameSpace.js @@ -1,6 +1,6 @@ -var arr ="%s".split(".").reverse(); -var create = function (obj, names) { - var name = names.pop(); +let arr ="%s".split(".").reverse(); +let create = function (obj, names) { + let name = names.pop(); if (!name) { return; } diff --git a/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java b/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java index c875716a5..c7dd4b682 100644 --- a/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java +++ b/designer-base/src/test/java/com/fr/design/ui/FineUIDemo.java @@ -2,10 +2,8 @@ package com.fr.design.ui; import com.fr.design.DesignerEnvManager; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.WindowConstants; -import java.awt.BorderLayout; +import javax.swing.*; +import java.awt.*; /** * @author richie diff --git a/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java b/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java index f5c8aaaa9..9676ee998 100644 --- a/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java +++ b/designer-base/src/test/java/com/fr/design/ui/ModernUIPaneTest.java @@ -2,13 +2,8 @@ package com.fr.design.ui; import com.fr.design.DesignerEnvManager; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.WindowConstants; -import java.awt.BorderLayout; -import java.awt.FlowLayout; +import javax.swing.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; diff --git a/designer-base/src/test/resources/com/fr/design/ui/demo.html b/designer-base/src/test/resources/com/fr/design/ui/demo.html index 2beae25a7..9e5211c89 100644 --- a/designer-base/src/test/resources/com/fr/design/ui/demo.html +++ b/designer-base/src/test/resources/com/fr/design/ui/demo.html @@ -10,6 +10,12 @@ return Pool.data; }; +
测试页面,请点击最下面的按钮
diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index 61f39b81d..8a3f4bb25 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -7,8 +7,7 @@ import com.fr.base.FRContext; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; -import com.fr.design.mainframe.messagecollect.impl.FocusPointMessageUploader; -import com.fr.design.mainframe.template.info.TemplateInfoCollector; +import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; @@ -16,13 +15,20 @@ import com.fr.general.DesUtils; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; import com.fr.general.http.HttpToolbox; +import com.fr.intelli.record.FocusPoint; +import com.fr.intelli.record.MetricRegistry; import com.fr.json.JSONArray; +import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.stable.query.QueryFactory; +import com.fr.stable.query.condition.QueryCondition; +import com.fr.stable.query.data.DataList; +import com.fr.stable.query.restriction.RestrictionFactory; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; @@ -47,6 +53,11 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + /** * @author neil * @@ -70,6 +81,24 @@ public class InformationCollector implements XMLReadable, XMLWriter { private static final String XML_KEY = "ActiveKey"; private static final String XML_OS = "OS"; + public static final String TABLE_NAME = "fr_functionrecord"; + public static final String FUNC_COLUMNNAME = "func"; + public static final String COLUMN_TIME = "time"; + public static final String TABLE_FUNCTION_RECORD = "function.record"; + private static final String ATTR_ID = "id"; + private static final String ATTR_TEXT = "text"; + private static final String ATTR_SOURCE = "source"; + private static final String ATTR_TIME = "time"; + private static final String ATTR_TIMES = "times"; + private static final String ATTR_TITLE = "title"; + private static final String ATTR_USER_NAME = "username"; + private static final String ATTR_UUID = "uuid"; + private static final String ATTR_ITEMS = "items"; + private static final String ATTR_FUNCTION_ARRAY = "functionArray"; + private static final int MAX_EACH_REQUEST_RECORD_COUNT = 200; + private static final int PAGE_SIZE = 200; + private long totalCount = -1; + private static InformationCollector collector; //启动时间与关闭时间列表 @@ -155,12 +184,6 @@ public class InformationCollector implements XMLReadable, XMLWriter { } private void sendUserInfo(){ - long currentTime = new Date().getTime(); - long lastTime = getLastTimeMillis(); - - if (currentTime - lastTime <= DELTA) { - return; - } JSONObject content = getJSONContentAsByte(); String url = CloudCenter.getInstance().acquireUrlByKind("user.info.v10"); boolean success = false; @@ -178,9 +201,135 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - /** - * 收集开始使用时间,发送信息 - */ + private void sendFunctionsInfo(long currentTime, long lastTime){ + FineLoggerFactory.getLogger().info("Start sent function records to the cloud center..."); + queryAndSendOnePageFunctionContent(currentTime, lastTime, 0); + long page = (totalCount/PAGE_SIZE) + 1; + for(int i=1; i focusPoints = MetricRegistry.getMetric().find(FocusPoint.class,condition); + //第一次查询获取总记录数 + if(page == 0){ + totalCount = focusPoints.getTotalCount(); + } + sendThisPageFunctionContent(focusPoints); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private void sendThisPageFunctionContent(DataList focusPoints) { + String url = CloudCenter.getInstance().acquireUrlByKind(TABLE_FUNCTION_RECORD); + try { + JSONObject jsonObject = dealWithSendFunctionContent(focusPoints); + sendFunctionRecord(url, jsonObject); + } catch (JSONException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private JSONObject dealWithSendFunctionContent(DataList focusPoints) throws JSONException { + JSONObject jsonObject = new JSONObject(); + Map map = new HashMap<>(); + if(!focusPoints.isEmpty()){ + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + String bbsUserName = MarketConfig.getInstance().getBbsUsername(); + String uuid = envManager.getUUID(); + jsonObject.put(ATTR_UUID, uuid); + jsonObject.put(ATTR_USER_NAME, bbsUserName); + for(FocusPoint focusPoint : focusPoints.getList()) { + FunctionRecord functionRecord = getOneRecord(focusPoint); + if (map.containsKey(focusPoint.getId())) { + int times = ((FunctionRecord)map.get(focusPoint.getId())).getTimes() + 1; + functionRecord.setTimes(times); + map.put(focusPoint.getId(), functionRecord); + } else { + map.put(focusPoint.getId(), functionRecord); + } + } + jsonObject.put(ATTR_ITEMS, mapToJSONArray(map)); + } + return jsonObject; + } + + private JSONArray mapToJSONArray(Map map) throws JSONException { + JSONArray jsonArray = new JSONArray(); + for(String keys : map.keySet()){ + FunctionRecord functionRecord = (FunctionRecord)map.get(keys); + JSONObject jo = new JSONObject(); + jo.put(ATTR_ID, functionRecord.getId()); + jo.put(ATTR_TEXT, functionRecord.getText()); + jo.put(ATTR_SOURCE, functionRecord.getSource()); + jo.put(ATTR_TIME, functionRecord.getTime()); + jo.put(ATTR_TITLE, functionRecord.getTitle()); + jo.put(ATTR_TIMES, functionRecord.getTimes()); + jsonArray.put(jo); + } + return jsonArray; + } + + private void sendFunctionRecord(String url, JSONObject record) { + boolean success = false; + try { + HashMap para = new HashMap<>(); + para.put("token", SiteCenterToken.generateToken()); + para.put("content", record); + String res = HttpToolbox.post(url, para); + success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); + if (success) { + this.lastTime = dateToString(); + } else { + FineLoggerFactory.getLogger().error("Error occured when sent function records to the cloud center."); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private FunctionRecord getOneRecord(FocusPoint focusPoint) { + FunctionRecord functionRecord = new FunctionRecord(); + functionRecord.setId(focusPoint.getId() == null?StringUtils.EMPTY : focusPoint.getId()); + functionRecord.setText(focusPoint.getText() == null?StringUtils.EMPTY : focusPoint.getText()); + functionRecord.setSource(focusPoint.getSource()); + functionRecord.setTime(focusPoint.getTime().getTime()); + functionRecord.setTitle(focusPoint.getTitle() == null?StringUtils.EMPTY : focusPoint.getTitle()); + functionRecord.setUsername(MarketConfig.getInstance().getBbsUsername() == null?StringUtils.EMPTY : MarketConfig.getInstance().getBbsUsername()); + functionRecord.setUuid(DesignerEnvManager.getEnvManager().getUUID() == null?StringUtils.EMPTY : DesignerEnvManager.getEnvManager().getUUID()); + return functionRecord; + } + + /** + * 收集开始使用时间,发送信息 + */ public void collectStartTime(){ this.current.setStartDate(dateToString()); @@ -192,23 +341,22 @@ public class InformationCollector implements XMLReadable, XMLWriter { return; } - Thread sendThread = new Thread(new Runnable() { - + ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); + service.schedule(new Runnable() { @Override public void run() { - try { - //读取XML的5分钟后开始发请求连接服务器. - Thread.sleep(SEND_DELAY); - } catch (InterruptedException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + long currentTime = new Date().getTime(); + long lastTime = getLastTimeMillis(); + if (currentTime - lastTime > DELTA) { + sendUserInfo(); + sendFunctionsInfo(currentTime, lastTime); } - sendUserInfo(); - FocusPointMessageUploader.getInstance().sendToCloudCenter(); + TemplateInfoCollector.getInstance().sendTemplateInfo(); ErrorInfoUploader.getInstance().sendErrorInfo(); } - }); - sendThread.start(); + }, SEND_DELAY, TimeUnit.SECONDS); + } /** @@ -376,4 +524,94 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } + + private class FunctionRecord implements Comparable{ + private String id; + private String text; + private int source; + private long time; + private int times = 1; + private String title; + private String username; + private String uuid; + + public FunctionRecord(){ + + } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getTimes() { + return times; + } + + public void setTimes(int times) { + this.times = times; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public int getSource() { + return source; + } + + public void setSource(int source) { + this.source = source; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + @Override + public int compareTo(Object o) { + FunctionRecord functionRecord = (FunctionRecord) o; + if(this.getId().equals((functionRecord.getId())) && this.getText().equals(functionRecord.getText()) + && this.getSource() == functionRecord.getSource() && this.getTime() == functionRecord.getTime() + && this.getTitle().equals(functionRecord.getTitle()) && this.getUsername().equals(functionRecord.getUsername()) + && this.getUuid().equals(functionRecord.getUuid())){ + return 0; + } + return 1; + } + } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index daf0046d7..bd872e41a 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -3,7 +3,6 @@ package com.fr.start; import com.fr.base.BaseUtils; import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; @@ -12,7 +11,6 @@ import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; import com.fr.design.constants.UIConstants; -import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.fun.MenuHandler; @@ -29,14 +27,12 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; -import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.module.DesignModuleFactory; -import com.fr.design.utils.DesignUtils; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; @@ -44,17 +40,12 @@ import com.fr.log.FineLoggerFactory; import com.fr.module.Module; import com.fr.module.ModuleContext; import com.fr.runtime.FineRuntime; -import com.fr.stable.BuildContext; -import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.LifecycleFatalError; import com.fr.stable.xml.XMLTools; -import com.fr.start.fx.SplashFx; -import com.fr.start.jni.SplashMac; import com.fr.start.module.StartupArgs; -import com.fr.start.preload.ImagePreLoader; import com.fr.start.server.ServerTray; import com.fr.workspace.WorkContext; @@ -70,8 +61,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; @@ -91,10 +80,6 @@ public class Designer extends BaseDesigner { private UIButton redo; private UIPreviewButton run; - public Designer(String[] args) { - super(args); - } - /** * 设计器启动的Main方法 * @@ -104,21 +89,6 @@ public class Designer extends BaseDesigner { //启动运行时 FineRuntime.start(); - BuildContext.setBuildFilePath("/com/fr/stable/build.properties"); - // 如果端口被占用了 说明程序已经运行了一次,也就是说,已经建立一个监听服务器,现在只要给服务器发送命令就好了 - if (DesignUtils.isStarted()) { - DesignUtils.clientSend(args); - FineLoggerFactory.getLogger().error("Designer port not available."); - System.exit(0); - return; - } - RestartHelper.deleteRecordFilesWhenStart(); - - preloadResource(); - - SplashContext.getInstance().registerSplash(createSplash()); - - SplashContext.getInstance().show(); Module designerRoot = ModuleContext.parseRoot("designer-startup.xml"); //传递启动参数 designerRoot.setSingleton(StartupArgs.class, new StartupArgs(args)); @@ -138,34 +108,10 @@ public class Designer extends BaseDesigner { } - private static void preloadResource() { - ExecutorService service = Executors.newCachedThreadPool(); - - service.submit(new Runnable() { - @Override - public void run() { - new ImagePreLoader(); - } - }); - - service.submit(new Runnable() { - @Override - public void run() { - TemplateInfoCollector.getInstance(); - } - }); - service.shutdown(); + public Designer(String[] args) { + super(args); } - private static SplashStrategy createSplash() { - // 这里可以开接口加载自定义启动画面 - if (OperatingSystem.isWindows()) { - return new SplashFx(); - } else if (OperatingSystem.isMacOS()) { - return new SplashMac(); - } - return new SplashFx(); - } /** * 创建新建文件的快捷方式数组。 @@ -269,7 +215,7 @@ public class Designer extends BaseDesigner { saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); @@ -278,7 +224,6 @@ public class Designer extends BaseDesigner { return saveButton; } - private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); From 1909d7e1465db40225ad323e26daa86a830b2718 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 26 Apr 2019 15:41:10 +0800 Subject: [PATCH 108/196] =?UTF-8?q?REPORT-16458=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E5=BC=B9=E6=A1=86=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= =?UTF-8?q?=3D>=E6=96=87=E5=AD=97=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/ui/update/push/pushUpdate.css | 14 ++++++++------ .../com/fr/design/ui/update/push/pushUpdate.js | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css index add1d3a3a..521c8cdbb 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css @@ -4,6 +4,8 @@ body { color: white; background-size: 100% 100% !important; -moz-background-size: 100% 100% !important; + + font-family: PingFangSC-Regular, Georgia, "Nimbus Roman No9 L", "Songti SC", "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif CN", STSong, "AR PL New Sung", "AR PL SungtiL GB", NSimSun, SimSun, "TW\-Sung", "WenQuanYi Bitmap Song", "AR PL UMing CN", "AR PL UMing HK", "AR PL UMing TW", "AR PL UMing TW MBE", PMingLiU, MingLiU, serif !important; } .close-btn { @@ -24,15 +26,17 @@ body { color: white !important; } +.font-bold { + font-weight: bold; +} + .title { - font-family: PingFangSC-Semibold; font-size: 24px; letter-spacing: 1.5px; line-height: 24px; } .version { - font-family: PingFangSC-Semibold; font-size: 12px; line-height: 14px; margin-top: 6px; @@ -40,9 +44,8 @@ body { .desc { margin-top: 40px; - font-family: PingFangSC-Regular; font-size: 13px; - width: 540px; + width: 82%; margin-left: 19px; text-indent: -19px; overflow: visible !important; @@ -54,7 +57,6 @@ body { .moreInfo { margin-top: 20px; - font-family: PingFangSC-Regular; font-size: 13px; text-decoration: underline; } @@ -65,7 +67,7 @@ body { } .buttonGroup .bi-button { - font-family: PingFangSC-Medium; + font-weight: 600; font-size: 11px; text-align: center; line-height: 12px; diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js index 1342cfb55..505a8effc 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js @@ -33,13 +33,13 @@ function getTitleArea() { { type: "bi.label", text: i18nText("Fine-Design_Find_New_Version"), - cls: "title", + cls: "title font-bold", textAlign: "left" }, { type: "bi.label", text: Pool.data.getVersion(), - cls: "version", + cls: "version font-bold", textAlign: "left" } ] From c37397fbfe09b0cd2a05e2e966ddbe5c8570926e Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 15:41:38 +0800 Subject: [PATCH 109/196] ct --- .../update/ui/dialog/RestoreResultDialog.java | 182 ------------------ 1 file changed, 182 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java deleted file mode 100644 index cc2290216..000000000 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.fr.design.update.ui.dialog; - -import com.fr.base.FRContext; -import com.fr.design.RestartHelper; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.update.domain.UpdateConstants; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.ComparatorUtils; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; -import com.fr.stable.project.ProjectConstants; - -import javax.swing.AbstractAction; -import javax.swing.BorderFactory; -import javax.swing.JDialog; -import javax.swing.JPanel; -import javax.swing.JTextArea; -import java.awt.BorderLayout; -import java.awt.Dialog; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by XINZAI on 2018/8/21. - */ -public class RestoreResultDialog extends JDialog { - private static final Dimension RESTORE = new Dimension(340, 100); - - private static final Dimension RESTORE_OLD_VERSION = new Dimension(340, 135); - - private String jarRestoreDir; - - public RestoreResultDialog(Dialog parent, boolean modal) { - super(parent, modal); - initCommonComponents(); - } - - public RestoreResultDialog(Frame parent, boolean modal, String jarDir) { - super(parent, modal); - this.jarRestoreDir = jarDir; - if (ComparatorUtils.equals(jarDir, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore_Old_Version"))) { - initOldVersionRestoreComps(); - } else { - initCommonComponents(); - } - } - - private void initCommonComponents() { - this.setResizable(false); - JPanel pane = new JPanel(); - pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); - pane.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setContentPane(pane); - - UIButton restartButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); - UIButton restartLaterButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Later")); - - restartButton.setFont(new Font("Default", Font.PLAIN, 12)); - restartButton.setEnabled(false); - restartButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - RestartHelper.restart(); - } - }); - restartLaterButton.setFont(new Font("Default", Font.PLAIN, 12)); - restartLaterButton.setEnabled(false); - restartLaterButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - JPanel buttonPane = new JPanel(); - buttonPane.add(restartLaterButton); - buttonPane.add(restartButton); - pane.add(buttonPane, BorderLayout.SOUTH); - - JPanel progressLabelPane = new JPanel(new BorderLayout()); - UILabel jarProgressLabel = new UILabel((com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore_To")) + " " + jarRestoreDir + " " + (com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_WorksAfterRestart"))); - jarProgressLabel.setFont(new Font("Default", Font.PLAIN, 12)); - jarProgressLabel.setVisible(true); - progressLabelPane.add(jarProgressLabel); - pane.add(progressLabelPane, BorderLayout.CENTER); - - UpdateMainDialog.deletePreviousPropertyFile(); - - putJarBackupFiles(); - restartButton.setEnabled(true); - restartLaterButton.setEnabled(true); - this.setSize(RESTORE); - this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Jar_Restore")); - } - - private void initOldVersionRestoreComps() { - this.setResizable(false); - JPanel pane = new JPanel(); - pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); - pane.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setContentPane(pane); - - UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Ok")); - okButton.setFont(new Font("Default", Font.PLAIN, 12)); - okButton.addActionListener(new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - - JPanel buttonPane = new JPanel(); - buttonPane.add(okButton); - pane.add(buttonPane, BorderLayout.SOUTH); - - JPanel infoPane = new JPanel(new BorderLayout()); - JTextArea jTextArea = new JTextArea( - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Backup_Old_Project") - + StringUtils.BLANK - + StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR) - + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Unzip_Replace_Restore") - ); - jTextArea.setLineWrap(true); - jTextArea.setEditable(false); - jTextArea.setBackground(null); - jTextArea.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); - jTextArea.setFont(new Font("Default", Font.PLAIN, 12)); - infoPane.add(jTextArea); - pane.add(infoPane, BorderLayout.CENTER); - - this.setSize(RESTORE_OLD_VERSION); - this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Updater_Restore_to_V8")); - } - - - /** - * 显示窗口 - */ - public void showDialog() { - GUICoreUtils.centerWindow(this); - this.setVisible(true); - } - - private void putJarBackupFiles() { - Map map = new HashMap(); - java.util.List list = new ArrayList(); - String installHome = StableUtils.getInstallHome(); - - putJarBackupFilesToInstallLib(installHome, map, list); - putJarBackupFilesToInstallEnv(installHome, map, list); - RestartHelper.saveFilesWhichToMove(map); - RestartHelper.saveFilesWhichToDelete(list.toArray(new String[list.size()])); - } - - private void putJarBackupFilesToInstallLib(String installHome, Map map, java.util.List list) { - List files = UpdateConstants.JARS_FOR_DESIGNER_X; - String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; - for (String file : files) { - map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), - StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); - } - } - - private void putJarBackupFilesToInstallEnv(String installHome, Map map, java.util.List list) { - List files = UpdateConstants.JARS_FOR_SERVER_X; - String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; - for (String file : files) { - map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - } - } -} \ No newline at end of file From 2d2da898b11dcc232ffd801fc20bea05e585673e Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 15:42:29 +0800 Subject: [PATCH 110/196] ct --- .../ui/dialog/UpdateMainDialog.java | 825 ------------------ 1 file changed, 825 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java deleted file mode 100644 index 9438df33b..000000000 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ /dev/null @@ -1,825 +0,0 @@ -package com.fr.design.onlineupdate.ui.dialog; - -import com.fr.design.RestartHelper; -import com.fr.design.constants.LayoutConstants; -import com.fr.design.dialog.UIDialog; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.onlineupdate.actions.FileDownloader; -import com.fr.design.onlineupdate.domain.DownloadItem; -import com.fr.design.onlineupdate.domain.UpdateConstants; -import com.fr.design.onlineupdate.domain.UpdateInfoCachePropertyManager; -import com.fr.design.onlineupdate.factory.DirectoryOperationFactory; -import com.fr.design.onlineupdate.ui.widget.LoadingLabel; -import com.fr.design.onlineupdate.ui.widget.UpdateActionLabel; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTable; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableCellRender; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableModel; -import com.fr.design.onlineupdate.ui.widget.UpdateInfoTextAreaCellRender; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.ComparatorUtils; -import com.fr.general.DateUtils; -import com.fr.general.GeneralContext; -import com.fr.general.GeneralUtils; -import com.fr.general.IOUtils; -import com.fr.general.SiteCenter; -import com.fr.general.http.HttpClient; -import com.fr.json.JSONArray; -import com.fr.json.JSONObject; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.ArrayUtils; -import com.fr.stable.ProductConstants; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; -import com.fr.stable.project.ProjectConstants; -import com.fr.workspace.WorkContext; -import com.sun.java.swing.plaf.motif.MotifProgressBarUI; - -import javax.swing.BorderFactory; -import javax.swing.JPanel; -import javax.swing.JProgressBar; -import javax.swing.RowSorter; -import javax.swing.SortOrder; -import javax.swing.SwingConstants; -import javax.swing.SwingWorker; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.table.TableRowSorter; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dialog; -import java.awt.Dimension; -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.*; -import java.text.ParsePosition; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ExecutionException; - -/** - * Created by XINZAI on 2018/8/21. - */ -public class UpdateMainDialog extends UIDialog { - public static final Dimension DEFAULT = new Dimension(660, 620); - - private static final Dimension PROGRESSBAR = new Dimension(120, 15); - private static final Dimension UPDATE_BUTTON = new Dimension(80, 24); - private static final int UPDATE_PANE_ROW_SIZE = 30; - private static final int UPDATE_CONTENT_PANE_ROW_SIZE = 10; - private static final int UPDATE_CONTENT_PANE_COLUMN_SIZE = 10; - private static final int UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE = 100; - private static final int SEARCH_PANE_ROW_SIZE = 50; - private static final int SEARCH_PANE_TEXT_COLUMN = 130; - private static final int SEARCH_PANE_COLUMN_GAP = 3; - private static final int UPDATE_INFO_TABLE_HEADER_TIME_WIDTH = 120; - private static final int UPDATE_CONTENT_PANE_BORDER_COLOR = 0xCCCCCC; - private static final int RESTORE_LABEL_COLOR = 0x3384F0; - - private static final String UPDATE_CACHE_STATE_FAIL = "fail"; - private static final String UPDATE_CACHE_STATE_SUCCESS = "success"; - - private static final SimpleDateFormat CHANGELOG_FORMAT = new SimpleDateFormat("M/d/y, h:m:s a", Locale.ENGLISH); - private static final SimpleDateFormat UPDATE_INFO_TABLE_FORMAT = new SimpleDateFormat("yyyy.MM.dd"); - - private Set downloadItems = new HashSet(); - private JSONObject downloadFileConfig; - //最新版本标签 - private LoadingLabel loadingLabel; - //更新按钮 - private UIButton updateButton; - //有新版本提示标签 - private UILabel updateLabel; - - //jar包版本信息面板,包括当前版本和最新版本 - private JPanel jarVersionInfoPane; - //jar包更新信息面板,包括每个版本更新的信息 - private JPanel jarUpdateInfoPane; - //jar包更新操作面板,包括更新重启按钮和进度条 - private JPanel updateActionPane; - //进度条 - private JProgressBar progressBar; - //更新版本提示面板 - private JPanel updateVersionReminderPane; - //jar包版本标签 - private UILabel jarCurrentLabel; - //jar包还原标签 - private UILabel jarRestoreLabel; - //更新信息搜索按钮 - private UIButton searchUpdateInfoBtn; - //搜索更新信息关键词文本框 - private UITextField searchUpdateInfoKeyword; - - private boolean updateSuccessful; - - private UpdateInfoTable updateInfoTable; - - private ArrayList updateInfoList; - - private boolean getUpdateInfoSuccess; - - private UpdateInfoCachePropertyManager cacheProperty; - private String lastUpdateCacheTime; - private String lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; - - public UpdateMainDialog(Dialog parent) { - super(parent); - initComponents(); - } - - public UpdateMainDialog(Frame parent) { - super(parent); - setModal(true); - initComponents(); - } - - private void initUpdateActionPane() { - double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; - double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; - double[] columnUpdateSubContentPaneProgressSize = {TableLayout.FILL, TableLayout.PREFERRED}; - double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.FILL, TableLayout.PREFERRED}; - JPanel progressBarPane = new JPanel(new BorderLayout()); - - progressBar = new JProgressBar(); - progressBar.setUI(new MotifProgressBarUI()); - progressBar.setForeground(UpdateConstants.BAR_COLOR); - progressBar.setVisible(false); - progressBar.setStringPainted(true); - progressBar.setPreferredSize(PROGRESSBAR); - - updateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_New_Version_Available")); - updateLabel.setHorizontalAlignment(SwingConstants.RIGHT); - updateLabel.setVisible(false); - - progressBarPane.add(GUICoreUtils.createBorderLayoutPane( - progressBar, BorderLayout.CENTER, - updateLabel, BorderLayout.EAST - ), BorderLayout.CENTER); - - updateActionPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ - new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateSubContentPaneProgressSize, progressBarPane, updateButton), new UILabel()}, - new Component[]{new UILabel(), new UILabel(), new UILabel()} - }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); - } - - private JPanel initPaneContent(Color color, double[] row, double[] column, Component... var) { - JPanel paneContent = TableLayoutHelper.createTableLayoutPane(new Component[][]{var}, row, column); - paneContent.setBackground(color); - return paneContent; - } - - private void initJarVersionInfoPane() { - double[] rowUpdatePaneSize = {UPDATE_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED}; - double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; - double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; - double[] columnUpdateContentPaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; - double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; - double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.FILL, TableLayout.PREFERRED}; - double[] columnUpdateSubContentPaneLabelSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; - - JPanel jarUpdateContentPane = new JPanel(); - jarUpdateContentPane.setLayout(new BorderLayout()); - jarUpdateContentPane.setBorder(BorderFactory.createLineBorder(new Color(UPDATE_CONTENT_PANE_BORDER_COLOR))); - - JPanel jarUpdateContentPane2 = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ - new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), updateVersionReminderPane, new UILabel()}, - new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JAR_Version")), jarCurrentLabel), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Latest_JAR")), loadingLabel), new UILabel()}, - new Component[]{new UILabel(), new UILabel(), new UILabel()} - }, rowUpdateSubContentPaneSize, columnUpdateSubContentPaneSize, LayoutConstants.VGAP_LARGE); - jarUpdateContentPane2.setBackground(Color.WHITE); - jarUpdateContentPane.add(jarUpdateContentPane2); - jarVersionInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ - new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JarUpdate")), new UILabel(), jarRestoreLabel), new UILabel()}, - new Component[]{new UILabel(), jarUpdateContentPane, new UILabel()} - }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); - } - - private void initJarUpdateInfoPane() { - double[] rowUpdatePaneSize = {SEARCH_PANE_ROW_SIZE, TableLayout.FILL}; - double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; - - double[] searchRow = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, SEARCH_PANE_COLUMN_GAP * 2}; - double[] searchColumn = {TableLayout.FILL, SEARCH_PANE_TEXT_COLUMN, TableLayout.PREFERRED}; - initUpdateInfoSearchPane(); - JPanel searchPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ - new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), searchUpdateInfoKeyword, searchUpdateInfoBtn}, - new Component[]{new UILabel(), new UILabel(), new UILabel()} - }, searchRow, searchColumn, LayoutConstants.VGAP_LARGE); - - String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_SignHeader")}; - initUpdateInfoTable(columnNames); - - UIScrollPane uiScrollPane = new UIScrollPane(updateInfoTable); - jarUpdateInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ - new Component[]{new UILabel(), searchPane, new UILabel()}, - new Component[]{new UILabel(), uiScrollPane, new UILabel()} - }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); - } - - private void initUpdateInfoTable(String[] columnNames) { - int updateTimeColIndex = 0; - int updateTitleColIndex = 1; - int updateSignColIndex = 2; - - updateInfoTable = new UpdateInfoTable(columnNames); - - updateInfoTable.setShowGrid(false); - updateInfoTable.setCellSelectionEnabled(false); - TableRowSorter sorter = new TableRowSorter(updateInfoTable.getDataModel()); - sorter.setSortable(updateTimeColIndex, true); - sorter.setSortable(updateTitleColIndex, false); - sorter.setSortable(updateSignColIndex, false); - updateInfoTable.setRowSorter(sorter); - List sortKeys = new ArrayList(); - sortKeys.add(new RowSorter.SortKey(updateTimeColIndex, SortOrder.DESCENDING)); - sorter.setSortKeys(sortKeys); - - updateInfoTable.getTableHeader().setReorderingAllowed(false); - updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMaxWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); - updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMinWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); - updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); - updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); - updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); - updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); - updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date")).setCellRenderer(new UpdateInfoTableCellRender()); - updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content")).setCellRenderer(new UpdateInfoTextAreaCellRender()); - } - - private void initUpdateInfoSearchPane() { - searchUpdateInfoKeyword = new UITextField(); - searchUpdateInfoKeyword.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - } - - @Override - public void removeUpdate(DocumentEvent e) { - String keyword = searchUpdateInfoKeyword.getText(); - if (ComparatorUtils.equals(keyword, StringUtils.EMPTY) && getUpdateInfoSuccess) { - updateInfoList.clear(); - getUpdateInfo(keyword).execute(); - } - } - - @Override - public void changedUpdate(DocumentEvent e) { - } - }); - searchUpdateInfoBtn = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Search")); - searchUpdateInfoBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (getUpdateInfoSuccess) { - updateInfoList.clear(); - getUpdateInfo(searchUpdateInfoKeyword.getText()).execute(); - } - } - }); - } - - private void initButtonAndLabel() { - loadingLabel = new LoadingLabel(); - loadingLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Checking_Jar_Update")); - updateButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Update")); - updateButton.setPreferredSize(UPDATE_BUTTON); - updateButton.setEnabled(false); - - double[] rowSize = {TableLayout.PREFERRED}; - - double[] colSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; - updateVersionReminderPane = initPaneContent( - Color.WHITE, rowSize, colSize, - new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Designer_Version")), - new UILabel(UpdateConstants.DEFAULT_APP_NAME + StringUtils.BLANK + ProductConstants.VERSION) - ); - - - jarCurrentLabel = new UILabel(StringUtils.isEmpty(GeneralUtils.readBuildNO()) ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Not_Install_Version") : GeneralUtils.readBuildNO(), SwingConstants.CENTER); - UILabel noJarPreviousRevision = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_No_Previous_Version")); - UpdateActionLabel jarRestorePreviousRevision = new UpdateActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore"), false); - jarRestorePreviousRevision.setForeground(new Color(RESTORE_LABEL_COLOR)); - jarRestorePreviousRevision.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - RestoreDialog dialog = new RestoreDialog(DesignerContext.getDesignerFrame(), true); - dialog.showDialog(); - } - }); - //choose RestoreLabel to show - boolean isNeedRestore = ArrayUtils.isNotEmpty(DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), getBackupDirectory())); - jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : noJarPreviousRevision; - } - - private void initComponents() { - JPanel contentPane = (JPanel) getContentPane(); - contentPane.setLayout(new BorderLayout()); - - - initButtonAndLabel(); - - initJarVersionInfoPane(); - initJarUpdateInfoPane(); - initUpdateActionPane(); - - add(jarVersionInfoPane, BorderLayout.NORTH); - - //海外版本不显示更新信息 - if (GeneralContext.getLocale().equals(Locale.CHINA) || GeneralContext.getLocale().equals(Locale.TAIWAN)){ - add(jarUpdateInfoPane, BorderLayout.CENTER); - add(updateActionPane, BorderLayout.SOUTH); - }else { - add(updateActionPane, BorderLayout.CENTER); - } - - addActionListenerForUpdateBtn(); - - new SwingWorker() { - @Override - protected JSONObject doInBackground() throws Exception { - HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("jar10.update")); - hc.setTimeout(UpdateConstants.CONNECTION_TIMEOUT); - return new JSONObject(hc.getResponseText()); - } - - @Override - protected void done() { - try { - downloadFileConfig = get(); - showDownLoadInfo(); - } catch (InterruptedException e) { - stopLoading(); - } catch (ExecutionException e) { - stopLoading(); - } finally { - getUpdateInfo(StringUtils.EMPTY).execute(); - } - } - }.execute(); - } - - private SwingWorker getUpdateInfo(final String keyword) { - updateInfoList = new ArrayList(); - lastUpdateCacheTime = UpdateConstants.CHANGELOG_X_START; - String cacheConfigPath = getUpdateCacheConfig(); - cacheProperty = new UpdateInfoCachePropertyManager(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres", cacheConfigPath)); - String recordUpdateTime = cacheProperty.readProperty("updateTime"); - if (StringUtils.isNotEmpty(recordUpdateTime)) { - lastUpdateCacheTime = recordUpdateTime; - } - String recordUpdateState = cacheProperty.readProperty("updateState"); - if (StringUtils.isNotEmpty(recordUpdateState)) { - lastUpdateCacheState = recordUpdateState; - } - return new SwingWorker() { - @Override - protected JSONArray doInBackground() { - try { - getUpdateInfoSuccess = false; - //step1:read from cache file - getCachedUpdateInfo(keyword); - //step2:read from website,start from cacheRecordTime - if (downloadFileConfig == null) { - throw new Exception("network error."); - } - HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("changelog10") + "&start=" + lastUpdateCacheTime + "&end=" + getLatestJARTimeStr()); - hc.asGet(); - hc.setTimeout(UpdateConstants.CONNECTION_TIMEOUT * 2); - String responseText = hc.getResponseText(); - JSONArray array = JSONArray.create(); - //假如返回"-1",说明socket出错了 - if (!ComparatorUtils.equals(responseText, "-1")) { - array = new JSONArray(responseText); - } - hc.release(); - return array; - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - return JSONArray.create(); - } - - @Override - protected void done() { - try { - JSONArray jsonArray = get(); - //step3:generateInfoTableList - updateInfoTable.getDataModel().populateBean(generateUpdateInfoList(jsonArray, keyword)); - - getUpdateInfoSuccess = true; - //step4:update cache file,start from cacheRecordTime,end latest server jartime - updateCachedInfoFile(jsonArray); - } catch (Exception e) { - getUpdateInfoSuccess = true; - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - }; - } - - //从文件中读取缓存的更新信息 - private void getCachedUpdateInfo(String keyword) throws Exception { - String cacheInfoPath = getUpdateCacheInfo(); - File cacheFile = new File(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres", cacheInfoPath)); - if (!ComparatorUtils.equals(lastUpdateCacheState, "success")) { - cacheFile.delete(); - return; - } - if (cacheFile.exists()) { - InputStreamReader streamReader = new InputStreamReader(new FileInputStream(cacheFile), "UTF-8"); - BufferedReader br = new BufferedReader(streamReader); - String readStr, updateTimeStr; - - while ((readStr = br.readLine()) != null) { - String[] updateInfo = readStr.split("\\t"); - if (updateInfo.length == 2) { - updateTimeStr = updateInfo[0]; - Date updateTime = CHANGELOG_FORMAT.parse(updateTimeStr); - //形如 Build#release-2018.07.31.03.03.52.80 - String currentNO = GeneralUtils.readBuildNO(); - Date curJarDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); - if (!ComparatorUtils.equals(keyword, StringUtils.EMPTY)) { - if (!containsKeyword(UPDATE_INFO_TABLE_FORMAT.format(updateTime), keyword) && !containsKeyword(updateInfo[1], keyword)) { - continue; - } - } - if (isValidLogInfo(updateInfo[1])) { - updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateInfo[1], updateTime.after(curJarDate)}); - } - } - } - br.close(); - streamReader.close(); - } - } - - private void updateCachedInfoFile(JSONArray jsonArray) throws Exception { - String cacheDirPath = StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres"); - File cacheFileDir = new File(cacheDirPath); - if (!StableUtils.mkdirs(cacheFileDir)) { - FineLoggerFactory.getLogger().error("make dir error."); - return; - } - final File cacheFile = new File(StableUtils.pathJoin(cacheDirPath, getUpdateCacheInfo())); - if (!cacheFile.exists()) { - cacheFile.createNewFile(); - lastUpdateCacheTime = UpdateConstants.CHANGELOG_X_START; - lastUpdateCacheState = UPDATE_CACHE_STATE_FAIL; - } - if (downloadFileConfig == null) { - return; - } - String endTime = getLatestJARTimeStr(); - if (endTime.equals(lastUpdateCacheTime) || jsonArray.length() == 0 || ComparatorUtils.compare(endTime, lastUpdateCacheTime) <= 0) { - return; - } - OutputStreamWriter writerStream = new OutputStreamWriter(new FileOutputStream(cacheFile), "UTF-8"); - BufferedWriter bufferWriter = new BufferedWriter(writerStream); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jo = (JSONObject) jsonArray.get(i); - bufferWriter.write((String) jo.get("update") + '\t' + jo.get("title")); - bufferWriter.newLine(); - bufferWriter.flush(); - } - bufferWriter.close(); - writerStream.close(); - lastUpdateCacheState = UPDATE_CACHE_STATE_SUCCESS; - lastUpdateCacheTime = endTime; - cacheProperty.updateProperty("updateTime", lastUpdateCacheTime); - cacheProperty.updateProperty("updateState", lastUpdateCacheState); - } - - private ArrayList generateUpdateInfoList(JSONArray jsonArray, String keyword) throws Exception { - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jo = (JSONObject) jsonArray.get(i); - String updateTitle = (String) jo.get("title"); - String updateTimeStr = (String) jo.get("update"); - Date updateTime = CHANGELOG_FORMAT.parse(updateTimeStr); - //形如 Build#release-2018.07.31.03.03.52.80 - String currentNO = GeneralUtils.readBuildNO(); - Date curJarDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); - if (!ComparatorUtils.equals(keyword, StringUtils.EMPTY)) { - if (!containsKeyword(UPDATE_INFO_TABLE_FORMAT.format(updateTime), keyword) && !containsKeyword(updateTitle, keyword)) { - continue; - } - } - if (isValidLogInfo(updateTitle)) { - updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateTitle, updateTime.after(curJarDate)}); - } - } - return new ArrayList(updateInfoList); - } - - private boolean containsKeyword(String str, String keyword) { - return str.toUpperCase().contains(keyword.toUpperCase()); - } - - private void stopLoading() { - loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Connect_VersionUpdateServer_Failed")); - } - - - private void showDownLoadInfo() { - //形如 Build#release-2018.07.31.03.03.52.80 - String buildNO = downloadFileConfig.optString("buildNO"); - Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); - String serverVersionNO = downloadFileConfig.optString("versionNO"); - String currentVersionNO = ProductConstants.RELEASE_VERSION; - String[] serverVersionSplitStr = serverVersionNO.split("\\."); - String[] currentVersionSplitStr = currentVersionNO.split("\\."); - int index = 0; - int compareResult; - int versionLength = Math.min(serverVersionSplitStr.length, currentVersionSplitStr.length); - - //形如 Build#release-2018.07.31.03.03.52.80 - String currentNO = GeneralUtils.readBuildNO(); - if (!".".equals(StableUtils.getInstallHome())) { - Date currentDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); - if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.DAY) > 0) { - updateButton.setEnabled(true); - updateLabel.setVisible(true); - loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); - } else { - loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Latest_Version")); - } - } else { - updateButton.setEnabled(true); - updateLabel.setVisible(true); - loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); - } - - while (index < versionLength) { - compareResult = serverVersionSplitStr[index].length() - currentVersionSplitStr[index].length(); - if (0 == compareResult) { - compareResult = serverVersionSplitStr[index].compareTo(currentVersionSplitStr[index]); - if (0 == compareResult) { - ++index; - continue; - } - break; - } - break; - } - - initMapWithInfo(downloadFileConfig); - } - - public void initMapWithInfo(JSONObject result) { - addJarNameToMap(result, "designer"); - addJarNameToMap(result, "server"); - } - - private void addJarNameToMap(JSONObject result, String category) { - JSONArray jsonArray = result.optJSONArray(category); - if (jsonArray != null) { - for (int i = 0, len = jsonArray.length(); i < len; i++) { - JSONObject jo = jsonArray.optJSONObject(i); - String downloadName = jo.optString("name"); - String downloadUrl = jo.optString("url"); - long downloadSize = jo.optLong("size"); - if (ComparatorUtils.equals(category, "server")) { - File currentJAR = new File(StableUtils.pathJoin(WorkContext.getCurrent().getPath(), ProjectConstants.LIB_NAME, downloadName)); - if (currentJAR.exists() && ComparatorUtils.equals(currentJAR.length(), downloadSize)) { - //假如大小一样的jar包就不要下载了 - continue; - } - } - downloadItems.add(new DownloadItem(downloadName, downloadUrl, downloadSize)); - } - } - } - - /** - * jar包更新按钮监听器 - */ - private void addActionListenerForUpdateBtn() { - updateButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (updateSuccessful) { - RestartHelper.restart(); - } else { - deletePreviousPropertyFile(); - updateButton.setEnabled(false); - progressBar.setVisible(true); - updateLabel.setVisible(false); - - new FileDownloader( - downloadItems.toArray(new DownloadItem[downloadItems.size()]), - StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DOWNLOAD_DIR)) { - @Override - protected void process(java.util.List chunks) { - DownloadItem fileInfo = chunks.get(chunks.size() - 1); - progressBar.setString(fileInfo.getName() + " " + fileInfo.getProgressString()); - progressBar.setValue(fileInfo.getProgressValue()); - } - - @Override - public void onDownloadSuccess() { - updateButton.setEnabled(true); - progressBar.setVisible(false); - backup(); - putNewFiles(); - updateSuccessful = true; - updateButton.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); - } - - @Override - public void onDownloadFailed() { - progressBar.setVisible(false); - } - }.execute(); - } - } - }); - } - - /** - * 确保升级更新之前删除以前的配置文件 - */ - public static void deletePreviousPropertyFile() { - //在进行更新升级之前确保move和delete.properties删除 - File moveFile = new File(RestartHelper.MOVE_FILE); - File delFile = new File(RestartHelper.RECORD_FILE); - if ((moveFile.exists()) && (!moveFile.delete())) { - FineLoggerFactory.getLogger().error(RestartHelper.MOVE_FILE + "delete failed!"); - } - if ((delFile.exists()) && (!delFile.delete())) { - FineLoggerFactory.getLogger().error(RestartHelper.RECORD_FILE + "delete failed!"); - } - } - - /** - * JAR包更新的时候备份老的jar包,包括设计器相关的和服务器相关的几个 - */ - private void backup() { - String installHome = StableUtils.getInstallHome(); - //jar包备份文件的目录为"backup/"+jar包当前版本号 - String todayBackupDir = StableUtils.pathJoin(installHome, getBackupDirectory(), (GeneralUtils.readBuildNO())); - backupFilesFromInstallEnv(installHome, todayBackupDir, getJARList4Server()); - backupFilesFromInstallLib(installHome, todayBackupDir, getJARList4Designer()); - jarCurrentLabel.setText(downloadFileConfig.optString("buildNO")); - } - - private void backupFilesFromInstallEnv(String installHome, String todayBackupDir, List files) { - for (String file : files) { - try { - IOUtils.copy( - new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), - new File(StableUtils.pathJoin(todayBackupDir))); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - } - - private void backupFilesFromInstallLib(String installHome, String todayBackupDir, List files) { - for (String file : files) { - try { - IOUtils.copy( - new File(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)), - new File(StableUtils.pathJoin(todayBackupDir))); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - } - - private void putNewFiles() { - Map map = new HashMap(); - java.util.List list = new ArrayList(); - String installHome = StableUtils.getInstallHome(); - putNewFilesToInstallLib(installHome, getDownLoadJAR4Designer(), map, list); - putNewFilesToInstallEnv(installHome, getDownLoadJAR4Server(), map, list); - RestartHelper.saveFilesWhichToMove(map); - RestartHelper.saveFilesWhichToDelete(list.toArray(new String[list.size()])); - } - - private void putNewFilesToInstallLib(String installHome, String[] files, Map map, java.util.List list) { - for (String file : files) { - map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), - StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); - } - } - - private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { - for (String file : files) { - map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - } - } - - //获取备份目录 - private String getBackupDirectory() { - return UpdateConstants.DESIGNER_BACKUP_DIR; - } - - //获取服务器jar包列表 - private List getJARList4Server() { - return UpdateConstants.JARS_FOR_SERVER_X; - } - - //获取设计器jar包列表 - private List getJARList4Designer() { - return UpdateConstants.JARS_FOR_DESIGNER_X; - } - - //获取服务器jar包下载列表 - private String[] getDownLoadJAR4Server() { - ArrayList jarList = new ArrayList(); - List serverItems = getJARList4Server(); - for (DownloadItem downloadItem : downloadItems) { - String downloadItemName = downloadItem.getName(); - if (serverItems.contains(downloadItemName)) { - jarList.add(downloadItemName); - } - } - return jarList.toArray(new String[jarList.size()]); - } - - //获取设计器jar包下载列表 - private String[] getDownLoadJAR4Designer() { - ArrayList jarList = new ArrayList(); - List designerJarItems = getJARList4Designer(); - for (DownloadItem downloadItem : downloadItems) { - String downloadItemName = downloadItem.getName(); - if (designerJarItems.contains(downloadItemName)) { - jarList.add(downloadItemName); - } - } - return jarList.toArray(new String[jarList.size()]); - } - - //获取更新日志缓存配置文件名 - private String getUpdateCacheConfig() { - return UpdateConstants.UPDATE_CACHE_CONFIG_X; - } - - //获取更新日志缓存内容文件名 - private String getUpdateCacheInfo() { - return UpdateConstants.UPDATE_CACHE_INFO_X; - } - - //获取最新的jar包时间字符串 - private String getLatestJARTimeStr() { - if (downloadFileConfig == null) { - return StringUtils.EMPTY; - } - String buildNO = downloadFileConfig.optString("buildNO"); - Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - return df.format(jarDate); - } - - //判断是否是有效的日志内容 - private boolean isValidLogInfo(String logContent) { - String log = logContent.toUpperCase(); - List logType = UpdateConstants.LOG_TYPE; - for (String s : logType) { - if (log.startsWith(s)) { - return true; - } - } - return false; - } - - /** - * 显示窗口 - */ - public void showDialog() { - setSize(DEFAULT); - setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_UpdateAndUpgrade")); - GUICoreUtils.centerWindow(this); - setVisible(true); - } - - /** - * 检查有效性 - * - * @throws Exception - */ - @Override - public void checkValid() throws Exception { - - } -} \ No newline at end of file From 0ef766f157c67e13ec1192eb9ba8ab6ebf33fdfe Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 15:43:37 +0800 Subject: [PATCH 111/196] REPORT-16550 REPORT-16547 --- .../java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- .../com/fr/design/mainframe/vcs/ui/FileVersionDialog.java | 5 +++-- .../com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 4fc99731a..d5c8c0165 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -119,7 +119,7 @@ public class VcsHelper { @Override public void run() { - String fileName = VcsHelper.getEditingFilename(); + String fileName = getEditingFilename(); VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); int latestFileVersion = 0; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index cb7234640..33076a07f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -36,7 +36,7 @@ public class FileVersionDialog extends UIDialog { private UITextField textField; - public FileVersionDialog(Frame frame) { + public FileVersionDialog(Frame frame, final String fileName) { super(frame); setUndecorated(true); setModal(true); @@ -63,7 +63,7 @@ public class FileVersionDialog extends UIDialog { public void actionPerformed(ActionEvent e) { FileVersionDialog.this.setVisible(false); Date date = dateEditor.getValue(); - List vcsEntities = WorkContext.getCurrent().get(VcsOperator.class).getFilterVersions(date, new Date(date.getTime() + DELAY), textField.getText()); + List vcsEntities = WorkContext.getCurrent().get(VcsOperator.class).getFilterVersions(fileName, date, new Date(date.getTime() + DELAY), textField.getText()); FileVersionTable.getInstance().updateModel(1, vcsEntities); } @@ -91,4 +91,5 @@ public class FileVersionDialog extends UIDialog { public void checkValid() throws Exception { } + } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index 2e68e0e33..7f9fc56fe 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.base.GraphHelper; import com.fr.design.base.mode.DesignModeContext; +import com.fr.design.base.mode.DesignerMode; import com.fr.design.dialog.BasicPane; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.MutilTempalteTabPane; @@ -100,7 +101,7 @@ public class FileVersionsPanel extends BasicPane { } private void showFilterPane() { - versionDialog = new FileVersionDialog(DesignerContext.getDesignerFrame()); + versionDialog = new FileVersionDialog(DesignerContext.getDesignerFrame(), templatePath); versionDialog.setVisible(true); } @@ -153,7 +154,7 @@ public class FileVersionsPanel extends BasicPane { WestRegionContainerPane.getInstance().replaceUpPane( isExit ? DesignerFrameFileDealerPane.getInstance() : this); - DesignModeContext.switchTo(isExit ? com.fr.design.base.mode.DesignerMode.NORMAL : com.fr.design.base.mode.DesignerMode.VCS); + DesignModeContext.switchTo(isExit ? DesignerMode.NORMAL : DesignerMode.VCS); // MutilTempalteTabPane & NewTemplatePane 是否可点 ToolBarNewTemplatePane.getInstance().setButtonGray(!isExit); From d240a14b0f730a86358b217dbc024ea07286e2dd Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 26 Apr 2019 15:43:43 +0800 Subject: [PATCH 112/196] =?UTF-8?q?REPORT-16458=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E5=BC=B9=E6=A1=86=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= =?UTF-8?q?=3D>=E6=98=BE=E7=A4=BA=E6=9B=B4=E5=A4=9A=E6=96=B0=E7=89=B9?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/com/fr/design/ui/update/push/pushUpdate.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js index 505a8effc..f42fb1ac7 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.js @@ -126,13 +126,7 @@ function getShowItems() { var buttonGroup = getButtonGroup(); - var showItems = [title, closeButton, descArea]; - if (descList.length > MAX_DESC_NUM) { - showItems.push(moreInfo); - } - showItems.push(buttonGroup); - - return showItems; + return [title, closeButton, descArea, moreInfo, buttonGroup]; } window.addEventListener("load", function (ev) { From 1d349e1db53d5e9bb5d9a0c0085db9202c6d20d7 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 15:44:44 +0800 Subject: [PATCH 113/196] ct --- .../ui/dialog/RestoreResultDialog.java | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java new file mode 100644 index 000000000..fb840d95c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -0,0 +1,182 @@ +package com.fr.design.onlineupdate.ui.dialog; + +import com.fr.design.RestartHelper; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.ComparatorUtils; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.project.ProjectConstants; + +import javax.swing.AbstractAction; +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by XINZAI on 2018/8/21. + */ +public class RestoreResultDialog extends JDialog { + private static final Dimension RESTORE = new Dimension(340, 100); + + private static final Dimension RESTORE_OLD_VERSION = new Dimension(340, 135); + + private String jarRestoreDir; + + public RestoreResultDialog(Dialog parent, boolean modal) { + super(parent, modal); + initCommonComponents(); + } + + public RestoreResultDialog(Frame parent, boolean modal, String jarDir) { + super(parent, modal); + this.jarRestoreDir = jarDir; + if (ComparatorUtils.equals(jarDir, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore_Old_Version"))) { + initOldVersionRestoreComps(); + } else { + initCommonComponents(); + } + } + + private void initCommonComponents() { + this.setResizable(false); + JPanel pane = new JPanel(); + pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); + pane.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setContentPane(pane); + + UIButton restartButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Designer")); + UIButton restartLaterButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restart_Later")); + + restartButton.setFont(new Font("Default", Font.PLAIN, 12)); + restartButton.setEnabled(false); + restartButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + RestartHelper.restart(); + } + }); + restartLaterButton.setFont(new Font("Default", Font.PLAIN, 12)); + restartLaterButton.setEnabled(false); + restartLaterButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + JPanel buttonPane = new JPanel(); + buttonPane.add(restartLaterButton); + buttonPane.add(restartButton); + pane.add(buttonPane, BorderLayout.SOUTH); + + JPanel progressLabelPane = new JPanel(new BorderLayout()); + UILabel jarProgressLabel = new UILabel((com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore_To")) + " " + jarRestoreDir + " " + (com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_WorksAfterRestart"))); + jarProgressLabel.setFont(new Font("Default", Font.PLAIN, 12)); + jarProgressLabel.setVisible(true); + progressLabelPane.add(jarProgressLabel); + pane.add(progressLabelPane, BorderLayout.CENTER); + + UpdateMainDialog.deletePreviousPropertyFile(); + + putJarBackupFiles(); + restartButton.setEnabled(true); + restartLaterButton.setEnabled(true); + this.setSize(RESTORE); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Jar_Restore")); + } + + private void initOldVersionRestoreComps() { + this.setResizable(false); + JPanel pane = new JPanel(); + pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10)); + pane.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setContentPane(pane); + + UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Ok")); + okButton.setFont(new Font("Default", Font.PLAIN, 12)); + okButton.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + JPanel buttonPane = new JPanel(); + buttonPane.add(okButton); + pane.add(buttonPane, BorderLayout.SOUTH); + + JPanel infoPane = new JPanel(new BorderLayout()); + JTextArea jTextArea = new JTextArea( + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Backup_Old_Project") + + StringUtils.BLANK + + StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR) + + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Unzip_Replace_Restore") + ); + jTextArea.setLineWrap(true); + jTextArea.setEditable(false); + jTextArea.setBackground(null); + jTextArea.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); + jTextArea.setFont(new Font("Default", Font.PLAIN, 12)); + infoPane.add(jTextArea); + pane.add(infoPane, BorderLayout.CENTER); + + this.setSize(RESTORE_OLD_VERSION); + this.setTitle(com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Updater_Restore_to_V8")); + } + + + /** + * 显示窗口 + */ + public void showDialog() { + GUICoreUtils.centerWindow(this); + this.setVisible(true); + } + + private void putJarBackupFiles() { + Map map = new HashMap(); + java.util.List list = new ArrayList(); + String installHome = StableUtils.getInstallHome(); + + putJarBackupFilesToInstallLib(installHome, map, list); + putJarBackupFilesToInstallEnv(installHome, map, list); + RestartHelper.saveFilesWhichToMove(map); + RestartHelper.saveFilesWhichToDelete(list.toArray(new String[list.size()])); + } + + private void putJarBackupFilesToInstallLib(String installHome, Map map, java.util.List list) { + List files = UpdateConstants.JARS_FOR_DESIGNER_X; + String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), + StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, ProjectConstants.LIB_NAME, file)); + } + } + + private void putJarBackupFilesToInstallEnv(String installHome, Map map, java.util.List list) { + List files = UpdateConstants.JARS_FOR_SERVER_X; + String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; + for (String file : files) { + map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + } + } +} \ No newline at end of file From 97b9d2c9dd5a8832238d3284e873e23102e0436c Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 17:10:43 +0800 Subject: [PATCH 114/196] ct --- .../src/main/java/com/fr/start/Designer.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index bd872e41a..1d207d330 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -11,6 +11,7 @@ import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; import com.fr.design.constants.UIConstants; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.fun.MenuHandler; @@ -80,6 +81,10 @@ public class Designer extends BaseDesigner { private UIButton redo; private UIPreviewButton run; + public Designer(String[] args) { + super(args); + } + /** * 设计器启动的Main方法 * @@ -108,11 +113,6 @@ public class Designer extends BaseDesigner { } - public Designer(String[] args) { - super(args); - } - - /** * 创建新建文件的快捷方式数组。 * @@ -215,7 +215,7 @@ public class Designer extends BaseDesigner { saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); @@ -224,6 +224,7 @@ public class Designer extends BaseDesigner { return saveButton; } + private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); From 80f7d2ed741b3bb7fa819bc321f2d0013e5ed50a Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 17:11:10 +0800 Subject: [PATCH 115/196] ct --- .../com/fr/design/DesignerEnvManager.java | 51 +++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 66a516554..dcc588fa3 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -14,6 +14,8 @@ import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.vcs.VcsConfigManager; +import com.fr.design.update.push.DesignerPushUpdateConfigManager; import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.utils.DesignUtils; import com.fr.file.FILEFactory; @@ -146,6 +148,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { */ private AlphaFineConfigManager alphaFineConfigManager = new AlphaFineConfigManager(); + private DesignerPushUpdateConfigManager designerPushUpdateConfigManager = DesignerPushUpdateConfigManager.getInstance(); + + private VcsConfigManager vcsConfigManager = VcsConfigManager.getInstance(); public static final String CAS_CERTIFICATE_PATH = "certificatePath"; @@ -693,6 +698,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.joinProductImprove = joinProductImprove; } + public boolean isAutoPushUpdateEnabled() { + return designerPushUpdateConfigManager.isAutoPushUpdateEnabled(); + } + + public void setAutoPushUpdateEnabled(boolean autoPushUpdateEnabled) { + designerPushUpdateConfigManager.setAutoPushUpdateEnabled(autoPushUpdateEnabled); + } + /** * 是否磁盘空间参数 * @@ -1333,6 +1346,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } + private void readJettyPort(XMLableReader reader) { String tmpVal; if ((tmpVal = reader.getElementValue()) != null) { @@ -1477,14 +1491,18 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { readUUID(reader); } else if ("status".equals(name)) { readActiveStatus(reader); - } else if (CAS_PARAS.equals(name)) { + } else if (ComparatorUtils.equals(CAS_PARAS, name)) { readHttpsParas(reader); - } else if ("AlphaFineConfigManager".equals(name)) { + } else if (name.equals("AlphaFineConfigManager")) { readAlphaFineAttr(reader); - } else if ("RecentColors".equals(name)) { + } else if (name.equals("RecentColors")) { readRecentColor(reader); } else if ("OpenDebug".equals(name)) { readOpenDebug(reader); + } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) { + readDesignerPushUpdateAttr(reader); + } else if (name.equals(vcsConfigManager.XML_TAG)) { + readVcsAttr(reader); } else { readLayout(reader, name); } @@ -1667,6 +1685,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { checkRecentOpenedFileNum(); } + private void readDesignerPushUpdateAttr(XMLableReader reader) { + reader.readXMLObject(designerPushUpdateConfigManager); + } + + private void readVcsAttr(XMLableReader reader) { + reader.readXMLObject(vcsConfigManager); + } + /** * Write XML.
* The method will be invoked when save data to XML file.
@@ -1690,6 +1716,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { writeAlphaFineAttr(writer); writeRecentColor(writer); writeOpenDebug(writer); + writeDesignerPushUpdateAttr(writer); + writeVcsAttr(writer); writer.end(); } @@ -1713,7 +1741,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } - //写入uuid private void writeUUID(XMLPrintWriter writer) { writer.startTAG("uuid"); @@ -1929,4 +1956,20 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .end(); } + private void writeDesignerPushUpdateAttr(XMLPrintWriter writer) { + this.designerPushUpdateConfigManager.writeXML(writer); + } + + private void writeVcsAttr(XMLPrintWriter writer) { + this.vcsConfigManager.writeXML(writer); + } + + + public VcsConfigManager getVcsConfigManager() { + return vcsConfigManager; + } + + public void setVcsConfigManager(VcsConfigManager vcsConfigManager) { + this.vcsConfigManager = vcsConfigManager; + } } From 932ad08b7773ff89a30992d9793b83f8e4850525 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 17:12:02 +0800 Subject: [PATCH 116/196] c --- .../mainframe/InformationCollector.java | 267 +----------------- 1 file changed, 13 insertions(+), 254 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index 8a3f4bb25..775f402d8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -7,7 +7,8 @@ import com.fr.base.FRContext; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import com.fr.design.mainframe.messagecollect.impl.FocusPointMessageUploader; +import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; @@ -15,20 +16,13 @@ import com.fr.general.DesUtils; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; import com.fr.general.http.HttpToolbox; -import com.fr.intelli.record.FocusPoint; -import com.fr.intelli.record.MetricRegistry; import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.query.QueryFactory; -import com.fr.stable.query.condition.QueryCondition; -import com.fr.stable.query.data.DataList; -import com.fr.stable.query.restriction.RestrictionFactory; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; @@ -53,7 +47,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -81,24 +74,6 @@ public class InformationCollector implements XMLReadable, XMLWriter { private static final String XML_KEY = "ActiveKey"; private static final String XML_OS = "OS"; - public static final String TABLE_NAME = "fr_functionrecord"; - public static final String FUNC_COLUMNNAME = "func"; - public static final String COLUMN_TIME = "time"; - public static final String TABLE_FUNCTION_RECORD = "function.record"; - private static final String ATTR_ID = "id"; - private static final String ATTR_TEXT = "text"; - private static final String ATTR_SOURCE = "source"; - private static final String ATTR_TIME = "time"; - private static final String ATTR_TIMES = "times"; - private static final String ATTR_TITLE = "title"; - private static final String ATTR_USER_NAME = "username"; - private static final String ATTR_UUID = "uuid"; - private static final String ATTR_ITEMS = "items"; - private static final String ATTR_FUNCTION_ARRAY = "functionArray"; - private static final int MAX_EACH_REQUEST_RECORD_COUNT = 200; - private static final int PAGE_SIZE = 200; - private long totalCount = -1; - private static InformationCollector collector; //启动时间与关闭时间列表 @@ -184,6 +159,12 @@ public class InformationCollector implements XMLReadable, XMLWriter { } private void sendUserInfo(){ + long currentTime = new Date().getTime(); + long lastTime = getLastTimeMillis(); + + if (currentTime - lastTime <= DELTA) { + return; + } JSONObject content = getJSONContentAsByte(); String url = CloudCenter.getInstance().acquireUrlByKind("user.info.v10"); boolean success = false; @@ -201,135 +182,9 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - private void sendFunctionsInfo(long currentTime, long lastTime){ - FineLoggerFactory.getLogger().info("Start sent function records to the cloud center..."); - queryAndSendOnePageFunctionContent(currentTime, lastTime, 0); - long page = (totalCount/PAGE_SIZE) + 1; - for(int i=1; i focusPoints = MetricRegistry.getMetric().find(FocusPoint.class,condition); - //第一次查询获取总记录数 - if(page == 0){ - totalCount = focusPoints.getTotalCount(); - } - sendThisPageFunctionContent(focusPoints); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private void sendThisPageFunctionContent(DataList focusPoints) { - String url = CloudCenter.getInstance().acquireUrlByKind(TABLE_FUNCTION_RECORD); - try { - JSONObject jsonObject = dealWithSendFunctionContent(focusPoints); - sendFunctionRecord(url, jsonObject); - } catch (JSONException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private JSONObject dealWithSendFunctionContent(DataList focusPoints) throws JSONException { - JSONObject jsonObject = new JSONObject(); - Map map = new HashMap<>(); - if(!focusPoints.isEmpty()){ - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - String bbsUserName = MarketConfig.getInstance().getBbsUsername(); - String uuid = envManager.getUUID(); - jsonObject.put(ATTR_UUID, uuid); - jsonObject.put(ATTR_USER_NAME, bbsUserName); - for(FocusPoint focusPoint : focusPoints.getList()) { - FunctionRecord functionRecord = getOneRecord(focusPoint); - if (map.containsKey(focusPoint.getId())) { - int times = ((FunctionRecord)map.get(focusPoint.getId())).getTimes() + 1; - functionRecord.setTimes(times); - map.put(focusPoint.getId(), functionRecord); - } else { - map.put(focusPoint.getId(), functionRecord); - } - } - jsonObject.put(ATTR_ITEMS, mapToJSONArray(map)); - } - return jsonObject; - } - - private JSONArray mapToJSONArray(Map map) throws JSONException { - JSONArray jsonArray = new JSONArray(); - for(String keys : map.keySet()){ - FunctionRecord functionRecord = (FunctionRecord)map.get(keys); - JSONObject jo = new JSONObject(); - jo.put(ATTR_ID, functionRecord.getId()); - jo.put(ATTR_TEXT, functionRecord.getText()); - jo.put(ATTR_SOURCE, functionRecord.getSource()); - jo.put(ATTR_TIME, functionRecord.getTime()); - jo.put(ATTR_TITLE, functionRecord.getTitle()); - jo.put(ATTR_TIMES, functionRecord.getTimes()); - jsonArray.put(jo); - } - return jsonArray; - } - - private void sendFunctionRecord(String url, JSONObject record) { - boolean success = false; - try { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", record); - String res = HttpToolbox.post(url, para); - success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - if (success) { - this.lastTime = dateToString(); - } else { - FineLoggerFactory.getLogger().error("Error occured when sent function records to the cloud center."); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private FunctionRecord getOneRecord(FocusPoint focusPoint) { - FunctionRecord functionRecord = new FunctionRecord(); - functionRecord.setId(focusPoint.getId() == null?StringUtils.EMPTY : focusPoint.getId()); - functionRecord.setText(focusPoint.getText() == null?StringUtils.EMPTY : focusPoint.getText()); - functionRecord.setSource(focusPoint.getSource()); - functionRecord.setTime(focusPoint.getTime().getTime()); - functionRecord.setTitle(focusPoint.getTitle() == null?StringUtils.EMPTY : focusPoint.getTitle()); - functionRecord.setUsername(MarketConfig.getInstance().getBbsUsername() == null?StringUtils.EMPTY : MarketConfig.getInstance().getBbsUsername()); - functionRecord.setUuid(DesignerEnvManager.getEnvManager().getUUID() == null?StringUtils.EMPTY : DesignerEnvManager.getEnvManager().getUUID()); - return functionRecord; - } - - /** - * 收集开始使用时间,发送信息 - */ + /** + * 收集开始使用时间,发送信息 + */ public void collectStartTime(){ this.current.setStartDate(dateToString()); @@ -345,18 +200,12 @@ public class InformationCollector implements XMLReadable, XMLWriter { service.schedule(new Runnable() { @Override public void run() { - long currentTime = new Date().getTime(); - long lastTime = getLastTimeMillis(); - if (currentTime - lastTime > DELTA) { - sendUserInfo(); - sendFunctionsInfo(currentTime, lastTime); - } - + sendUserInfo(); + FocusPointMessageUploader.getInstance().sendToCloudCenter(); TemplateInfoCollector.getInstance().sendTemplateInfo(); ErrorInfoUploader.getInstance().sendErrorInfo(); } }, SEND_DELAY, TimeUnit.SECONDS); - } /** @@ -524,94 +373,4 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - - private class FunctionRecord implements Comparable{ - private String id; - private String text; - private int source; - private long time; - private int times = 1; - private String title; - private String username; - private String uuid; - - public FunctionRecord(){ - - } - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public int getTimes() { - return times; - } - - public void setTimes(int times) { - this.times = times; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - @Override - public int compareTo(Object o) { - FunctionRecord functionRecord = (FunctionRecord) o; - if(this.getId().equals((functionRecord.getId())) && this.getText().equals(functionRecord.getText()) - && this.getSource() == functionRecord.getSource() && this.getTime() == functionRecord.getTime() - && this.getTitle().equals(functionRecord.getTitle()) && this.getUsername().equals(functionRecord.getUsername()) - && this.getUuid().equals(functionRecord.getUuid())){ - return 0; - } - return 1; - } - } } \ No newline at end of file From 720f0516a2c9cd1c34879c4701a236a05eaead4a Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 26 Apr 2019 17:13:06 +0800 Subject: [PATCH 117/196] ct --- .../design/actions/file/PreferencePane.java | 102 ++++++++++++++++-- 1 file changed, 93 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index ae6ba4c25..9775de2f5 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -24,6 +24,9 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.vcs.VcsConfigManager; +import com.fr.design.mainframe.vcs.common.VcsHelper; +import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; @@ -41,6 +44,8 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; @@ -118,7 +123,6 @@ public class PreferencePane extends BasicPane { private KeyStroke shortCutKeyStore = null; private UIColorButton gridLineColorTBButton; - private UIColorButton paginationLineColorTBButton; private UICheckBox supportCellEditorDefCheckBox; @@ -134,7 +138,16 @@ public class PreferencePane extends BasicPane { private UISpinner cachingTemplateSpinner; private UICheckBox openDebugComboBox; private UICheckBox useOptimizedUPMCheckbox; - private UICheckBox joinProductImprove; + private UICheckBox joinProductImproveCheckBox; + private UICheckBox autoPushUpdateCheckBox; + + private UICheckBox vcsEnableCheckBox; + private UICheckBox saveCommitCheckBox; + private UICheckBox useIntervalCheckBox; + private IntegerEditor saveIntervalEditor; + private UILabel remindVcsLabel; + + public PreferencePane() { this.initComponents(); @@ -152,11 +165,11 @@ public class PreferencePane extends BasicPane { jtabPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Advanced"), advancePane); contentPane.add(jtabPane, BorderLayout.NORTH); - createFunctionPane(generalPane); createEditPane(generalPane); createGuiOfGridPane(generalPane); createColorSettingPane(generalPane); + createVcsSettingPane(generalPane); // ConfPane JPanel confLocationPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane(); @@ -184,10 +197,14 @@ public class PreferencePane extends BasicPane { upmSelectorPane.add(useOptimizedUPMCheckbox); advancePane.add(upmSelectorPane); + JPanel improvePane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); + joinProductImproveCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); + improvePane.add(joinProductImproveCheckBox); - JPanel improvePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); - joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); - improvePane.add(joinProductImprove); + if (DesignerPushUpdateManager.getInstance().isAutoPushUpdateSupported()) { + autoPushUpdateCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update")); + improvePane.add(autoPushUpdateCheckBox); + } JPanel spaceUpPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); spaceUpPane.add(oraclePane, BorderLayout.NORTH); @@ -196,6 +213,45 @@ public class PreferencePane extends BasicPane { advancePane.add(spaceUpPane); } + private void createVcsSettingPane(JPanel generalPane) { + JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); + generalPane.add(vcsPane); + remindVcsLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Remind")); + remindVcsLabel.setVisible(!VcsHelper.needInit()); + vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); + saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); + saveIntervalEditor = new IntegerEditor(60); + useIntervalCheckBox = new UICheckBox(); + JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); + enableVcsPanel.add(vcsEnableCheckBox); + enableVcsPanel.add(remindVcsLabel); + JPanel intervalPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); + UILabel everyLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Every")); + UILabel delayLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Delay")); + intervalPanel.add(useIntervalCheckBox); + intervalPanel.add(everyLabel); + intervalPanel.add(saveIntervalEditor); + intervalPanel.add(delayLabel); + vcsEnableCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + boolean selected = vcsEnableCheckBox.isSelected(); + if (selected) { + saveCommitCheckBox.setEnabled(true); + saveIntervalEditor.setEnabled(true); + useIntervalCheckBox.setEnabled(true); + } else { + saveCommitCheckBox.setEnabled(false); + saveIntervalEditor.setEnabled(false); + useIntervalCheckBox.setEnabled(false); + } + } + }); + vcsPane.add(enableVcsPanel); + vcsPane.add(intervalPanel); + vcsPane.add(saveCommitCheckBox); + } + private void createFunctionPane(JPanel generalPane) { JPanel functionPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Function")); generalPane.add(functionPane); @@ -545,6 +601,22 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setEnabled(false); defaultStringToFormulaBox.setSelected(false); } + VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); + if (VcsHelper.needInit()) { + vcsEnableCheckBox.setSelected(vcsConfigManager.isVcsEnable()); + } else { + vcsEnableCheckBox.setEnabled(false); + vcsEnableCheckBox.setSelected(false); + } + if (!vcsEnableCheckBox.isSelected()) { + saveCommitCheckBox.setEnabled(false); + saveIntervalEditor.setEnabled(false); + useIntervalCheckBox.setEnabled(false); + } + + saveIntervalEditor.setValue(vcsConfigManager.getSaveInterval()); + saveCommitCheckBox.setSelected(vcsConfigManager.isSaveCommit()); + useIntervalCheckBox.setSelected(vcsConfigManager.isUseInterval()); supportCellEditorDefCheckBox.setSelected(designerEnvManager.isSupportCellEditorDef()); @@ -565,12 +637,15 @@ public class PreferencePane extends BasicPane { this.portEditor.setValue(new Integer(designerEnvManager.getEmbedServerPort())); openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); - useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM()); this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); - this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); + this.joinProductImproveCheckBox.setSelected(designerEnvManager.isJoinProductImprove()); + + if (this.autoPushUpdateCheckBox != null) { + this.autoPushUpdateCheckBox.setSelected(designerEnvManager.isAutoPushUpdateEnabled()); + } } private int chooseCase(int sign) { @@ -631,7 +706,15 @@ public class PreferencePane extends BasicPane { designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); - designerEnvManager.setJoinProductImprove(this.joinProductImprove.isSelected()); + designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected()); + VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); + vcsConfigManager.setSaveInterval(this.saveIntervalEditor.getValue()); + vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); + vcsConfigManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); + vcsConfigManager.setUseInterval(this.useIntervalCheckBox.isSelected()); + if (this.autoPushUpdateCheckBox != null) { + designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected()); + } designerEnvManager.setUndoLimit(maxUndoLimit.getSelectedIndex() * SELECTED_INDEX_5); if (maxUndoLimit.getSelectedIndex() == SELECTED_INDEX_5) { @@ -649,6 +732,7 @@ public class PreferencePane extends BasicPane { return new Class[]{Log4jConfig.class}; } }); + Configurations.update(new Worker() { @Override public void run() { From cdd0cea75b33bd54232fb367ac1d962032e10c4a Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 26 Apr 2019 17:27:13 +0800 Subject: [PATCH 118/196] bug fix --- .../fr/design/mainframe/vcs/ui/FileVersionCellEditor.java | 5 +++-- designer-realize/src/main/java/com/fr/start/Designer.java | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index bdb4bc1ee..a7f7f5ef0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -35,15 +35,16 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { String fileOfVersion; + VcsOperator vcsOperator = WorkContext.getCurrent().get(VcsOperator.class); Component editor = row == 0 ? firstRowPanel : renderAndEditor; if (isSelected) { return editor; } else if (row == 0) { String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfCurrent(path.replaceFirst("/", "")); + fileOfVersion = vcsOperator.getFileOfCurrent(path.replaceFirst("/", "")); } else { renderAndEditor.update((VcsEntity) value); - fileOfVersion = WorkContext.getCurrent().get(VcsOperator.class).getFileOfFileVersion(((VcsEntity) value).getFilename(), ((VcsEntity) value).getVersion()); + fileOfVersion = vcsOperator.getFileOfFileVersion(((VcsEntity) value).getFilename(), ((VcsEntity) value).getVersion()); } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index daf0046d7..5c81ee258 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -11,6 +11,7 @@ import com.fr.design.actions.file.newReport.NewWorkBookAction; import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; +import com.fr.design.base.mode.DesignModeContext; import com.fr.design.constants.UIConstants; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; @@ -363,12 +364,12 @@ public class Designer extends BaseDesigner { @Override protected void refreshLargeToolbarState() { - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (jt == null) { return; } - saveButton.setEnabled(!jt.isSaved() && !DesignerMode.isVcsMode()); - MutilTempalteTabPane.getInstance().refreshOpenedTemplate(HistoryTemplateListPane.getInstance().getHistoryList()); + saveButton.setEnabled(!jt.isSaved() && !DesignModeContext.isVcsMode()); + MutilTempalteTabPane.getInstance().refreshOpenedTemplate(HistoryTemplateListCache.getInstance().getHistoryList()); MutilTempalteTabPane.getInstance().repaint(); if (DesignerEnvManager.getEnvManager().isSupportUndo()) { undo.setEnabled(jt.canUndo()); From f7c9083c3779515750073f45e361afff16f95bef Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 26 Apr 2019 17:34:16 +0800 Subject: [PATCH 119/196] =?UTF-8?q?REPORT-15314=20103=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=94=B6=E9=9B=86=3D>=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8A=A5=E9=94=99&=E4=BF=AE=E6=AD=A3=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E5=88=B6=E4=BD=9C=E5=AE=8C=E6=88=90=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/template/info/DesignerOpenHistory.java | 12 ++++++++++++ .../design/mainframe/template/info/TemplateInfo.java | 2 +- .../template/info/TemplateInfoCollector.java | 11 +++++++++-- .../template/info/DesignerOpenHistoryTest.java | 12 ++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java index 096b6d16a..560431f1b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/DesignerOpenHistory.java @@ -48,6 +48,18 @@ class DesignerOpenHistory implements XMLReadable, XMLWriter { history[0] = today; } + /** + * 设计器在 dayCount 时间内启动超过 X 次(目前定的 X = 3) + */ + boolean isOpenEnoughTimesInPeriod(int dayCount) { + boolean enoughTimes = StringUtils.isNotEmpty(history[LENGTH - 1]); + if (!enoughTimes) { + return false; + } + return getHistorySpanDayCount() < dayCount; + } + + /** * 获取历史记录中囊括的日子数。即最早的历史记录 history[LENGTH - 1],到最晚的记录 history[0] 之间的时间跨度 */ diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index ffd9aaf3b..900210bd0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -211,7 +211,7 @@ class TemplateInfo implements XMLReadable, XMLWriter { // 条件 2. 设计器在这段未编辑的时间内启动超过 X 次(目前定的 X = 3)。即"设计器最近 X 次启动的时间跨度" < "未编辑时间"; return idleDayCount > COMPLETE_DAY_COUNT - && DesignerOpenHistory.getInstance().getHistorySpanDayCount() < idleDayCount; + && DesignerOpenHistory.getInstance().isOpenEnoughTimesInPeriod(idleDayCount); } String getConsumingMapJsonString() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index e7fc95594..0996c260c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -20,6 +20,7 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -101,16 +102,22 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { removeTestTemplates(); + List removeLaterList = new ArrayList<>(); + for (String key : templateInfoMap.keySet()) { TemplateInfo templateInfo = templateInfoMap.get(key); if (templateInfo.isReadyForSend()) { if (SendHelper.sendTemplateInfo(templateInfo)) { - // 清空记录 - removeFromTemplateInfoList(templateInfo.getTemplateID()); + removeLaterList.add(key); } } } + // 清空记录 + for (String key : removeLaterList) { + removeFromTemplateInfoList(key); + } + saveInfo(); } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java index e3f63ddc3..3e95cfec7 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/DesignerOpenHistoryTest.java @@ -87,6 +87,18 @@ public class DesignerOpenHistoryTest { } } + @Test + public void testOpenEnoughTimesInPeriod() { + assertTrue(openHistory.isOpenEnoughTimesInPeriod(15)); + assertFalse(openHistory.isOpenEnoughTimesInPeriod(3)); + + Reflect.on(openHistory).set("history", new String[] {"2019-05-03", "2019-05-02", ""}); + assertFalse(openHistory.isOpenEnoughTimesInPeriod(15)); + + Reflect.on(openHistory).set("history", new String[] {"2019-05-03", "", ""}); + assertFalse(openHistory.isOpenEnoughTimesInPeriod(15)); + } + @Test public void testHasOpenedToday() { assertFalse(openHistory.hasOpenedToday()); From 662f95bb59a2a2d439853c916b3a157ef8c48d04 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 09:25:50 +0800 Subject: [PATCH 120/196] REPORT-16547 --- .../src/main/java/com/fr/design/mainframe/DesktopCardPane.java | 2 +- .../src/main/java/com/fr/design/mainframe/JTemplate.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java index 58cd014e0..94a1427b0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java @@ -30,7 +30,7 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener // 判断是否切换设计器状态到禁止拷贝剪切 if (jt.getTarget().getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) { DesignModeContext.switchTo(DesignerMode.BAN_COPY_AND_CUT); - } else { + } else if (!DesignModeContext.isVcsMode()){ DesignModeContext.switchTo(DesignerMode.NORMAL); } DesignerFrameFileDealerPane.getInstance().setCurrentEditingTemplate(jt); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 87d0f9d35..e8f1b0093 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -112,7 +112,7 @@ public abstract class JTemplate> // 判断是否切换设计器状态到禁止拷贝剪切 if (t.getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) { DesignModeContext.switchTo(com.fr.design.base.mode.DesignerMode.BAN_COPY_AND_CUT); - } else { + } else if (!DesignModeContext.isVcsMode()) { DesignModeContext.switchTo(com.fr.design.base.mode.DesignerMode.NORMAL); } this.template = t; From c662ed60d83c09f439ad33a994e8afb40dbf28e6 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 11:17:36 +0800 Subject: [PATCH 121/196] REPORT-16547 bug fix --- .../src/main/java/com/fr/design/mainframe/JTemplate.java | 3 --- designer-realize/src/main/java/com/fr/start/Designer.java | 7 +++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index e8f1b0093..6fd7ee007 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -543,9 +543,6 @@ public abstract class JTemplate> return false; } collectInfo(); - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { - VcsHelper.dealWithVcs(this); - } return this.saveFile(); } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 5c81ee258..6026ebad8 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -32,6 +32,7 @@ import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -274,6 +275,9 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); + if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { + VcsHelper.dealWithVcs(jt); + } } }); return saveButton; @@ -332,6 +336,9 @@ public class Designer extends BaseDesigner { return; } WebPreviewUtils.preview(jt); + if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { + VcsHelper.dealWithVcs(jt); + } } @Override From 1486834f7311f41be970e18a786962650b9716ac Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 11:23:13 +0800 Subject: [PATCH 122/196] REPORT-16547 --- .../com/fr/design/mainframe/vcs/common/VcsHelper.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index d5c8c0165..7e54c370e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -99,10 +99,14 @@ public class VcsHelper { } public static boolean needDeleteVersion(VcsEntity entity) { - if (entity == null || !DesignerEnvManager.getEnvManager().getVcsConfigManager().isUseInterval()) { + VcsConfigManager configManager = DesignerEnvManager.getEnvManager().getVcsConfigManager(); + if (entity == null || !configManager.isUseInterval()) { return false; } - return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getVcsConfigManager().getSaveInterval() * MINUTE && StringUtils.isBlank(entity.getCommitMsg()); + if (configManager.isSaveCommit() && StringUtils.isNotBlank(entity.getCommitMsg())) { + return false; + } + return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getVcsConfigManager().getSaveInterval() * MINUTE; } public static boolean needInit() { From ac21c53a5daceb1067f63dfaeb34967bec89177a Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 11:53:24 +0800 Subject: [PATCH 123/196] REPORT-16559 --- .../fr/design/mainframe/vcs/common/VcsHelper.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 7e54c370e..968d03fbd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -35,11 +35,6 @@ public class VcsHelper { private static final int MINUTE = 60 * 1000; private final static String VCS_PLUGIN_ID = "com.fr.plugin.vcs.v10"; - - public final static String CURRENT_USERNAME = WorkContext.getCurrent().isLocal() - ? Toolkit.i18nText("Fine-Design_Vcs_Local_User") - : WorkContext.getCurrent().getConnection().getUserName(); - public final static Color TABLE_SELECT_BACKGROUND = new Color(0xD8F2FD); public final static Color COPY_VERSION_BTN_COLOR = new Color(0x419BF9); @@ -71,6 +66,12 @@ public class VcsHelper { return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; } + public static String getCurrentUsername() { + return WorkContext.getCurrent().isLocal() + ? Toolkit.i18nText("Fine-Design_Vcs_Local_User") + : WorkContext.getCurrent().getConnection().getUserName(); + } + private static int selectedTemplateCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); if (fileTree.getSelectionPaths() == null) { @@ -131,11 +132,11 @@ public class VcsHelper { latestFileVersion = entity.getVersion(); } if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - operator.saveVersionFromCache(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + operator.saveVersionFromCache(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1); String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", ""))); } else { - operator.saveVersion(VcsHelper.CURRENT_USERNAME, fileName, StringUtils.EMPTY, latestFileVersion + 1); + operator.saveVersion(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1); } VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndex(fileName, 1); if (VcsHelper.needDeleteVersion(oldEntity)) { From 41b05c629d5298725292e39bdf2d6f55d8e315ee Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Sat, 27 Apr 2019 13:21:08 +0800 Subject: [PATCH 124/196] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8Cbuild=20failed,=20=E9=94=99=E8=AF=AF=E7=9A=84import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java index fb840d95c..c724f39a5 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -4,7 +4,8 @@ import com.fr.design.RestartHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.onlineupdate.domain.UpdateConstants; +import com.fr.design.update.domain.UpdateConstants; +import com.fr.design.update.ui.dialog.UpdateMainDialog; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.stable.ProductConstants; From c8320d237cac7371282c84d137b5da7593fad7f6 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Sat, 27 Apr 2019 13:26:29 +0800 Subject: [PATCH 125/196] =?UTF-8?q?=E7=A7=BB=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/dialog/RestoreResultDialog.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) rename designer-base/src/main/java/com/fr/design/{onlineupdate => update}/ui/dialog/RestoreResultDialog.java (98%) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java rename to designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java index c724f39a5..df1626193 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreResultDialog.java @@ -1,11 +1,10 @@ -package com.fr.design.onlineupdate.ui.dialog; +package com.fr.design.update.ui.dialog; import com.fr.design.RestartHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.update.domain.UpdateConstants; -import com.fr.design.update.ui.dialog.UpdateMainDialog; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.stable.ProductConstants; From 05daa121949de9a275a4758b9078a0691a3f24fb Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Sat, 27 Apr 2019 13:28:01 +0800 Subject: [PATCH 126/196] import --- .../src/main/java/com/fr/start/module/PreStartActivator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index 3c255c936..72d3217be 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -3,7 +3,7 @@ package com.fr.start.module; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.fun.OemProcessor; -import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; +import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignerPort; import com.fr.general.CloudCenter; From 6fd40efe1649d627eef9ffb2b2a068a73f0ac36f Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 14:23:26 +0800 Subject: [PATCH 127/196] REPORT-16559 --- .../java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- .../fr/design/mainframe/vcs/ui/EditFileVersionDialog.java | 7 +++---- .../fr/design/mainframe/vcs/ui/FileVersionRowPanel.java | 5 +++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 968d03fbd..05ff041d6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -40,7 +40,7 @@ public class VcsHelper { public final static EmptyBorder EMPTY_BORDER = new EmptyBorder(10, 10, 0, 10); - + public final static EmptyBorder EMPTY_BORDER_MEDIUM = new EmptyBorder(5, 10, 0, 10); public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java index f6533de4d..76bededaa 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -8,16 +8,15 @@ import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.locale.InterProviderFactory; -import com.fr.report.ReportContext; import com.fr.report.entity.VcsEntity; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Frame; -import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -80,7 +79,7 @@ public class EditFileVersionDialog extends UIDialog { @Override public void actionPerformed(ActionEvent e) { entity.setCommitMsg(msgTestArea.getText()); - ReportContext.getInstance().getVcsController().saveOrUpdateFileVersion(entity); + WorkContext.getCurrent().get(VcsOperator.class).updateVersion(entity); setVisible(false); } }); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index 657e990cc..c81e45c38 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -16,6 +16,7 @@ import javax.swing.Box; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; +import javax.swing.border.EmptyBorder; import javax.swing.text.BadLocationException; import javax.swing.text.Style; import javax.swing.text.StyleConstants; @@ -43,13 +44,13 @@ public class FileVersionRowPanel extends JPanel { // version + username Box upPane = Box.createHorizontalBox(); - upPane.setBorder(VcsHelper.EMPTY_BORDER); + upPane.setBorder(VcsHelper.EMPTY_BORDER_MEDIUM); upPane.add(versionLabel); upPane.add(Box.createHorizontalGlue()); // msg - msgLabel.setBorder(VcsHelper.EMPTY_BORDER); + msgLabel.setBorder(VcsHelper.EMPTY_BORDER_MEDIUM); msgLabel.setOpaque(false); msgLabel.setBackground(new Color(0, 0, 0, 0)); msgLabel.setEditable(false); From 1a6853f2abe048472faa96c6a7710053ac6c2dd5 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 14:24:36 +0800 Subject: [PATCH 128/196] rt --- .../java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index c81e45c38..e814a9b94 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -16,7 +16,6 @@ import javax.swing.Box; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; -import javax.swing.border.EmptyBorder; import javax.swing.text.BadLocationException; import javax.swing.text.Style; import javax.swing.text.StyleConstants; From babcaf299d55e82495fb1f3947d41fe463b1d5f5 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 14:35:09 +0800 Subject: [PATCH 129/196] REPORT-16559 --- .../design/mainframe/vcs/common/VcsHelper.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 05ff041d6..05e18e691 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -30,20 +30,11 @@ import static com.fr.stable.StableUtils.pathJoin; */ public class VcsHelper { - private final static String VCS_DIR = "vcs"; - public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); - private static final int MINUTE = 60 * 1000; - private final static String VCS_PLUGIN_ID = "com.fr.plugin.vcs.v10"; - public final static Color TABLE_SELECT_BACKGROUND = new Color(0xD8F2FD); public final static Color COPY_VERSION_BTN_COLOR = new Color(0x419BF9); - - public final static EmptyBorder EMPTY_BORDER = new EmptyBorder(10, 10, 0, 10); public final static EmptyBorder EMPTY_BORDER_MEDIUM = new EmptyBorder(5, 10, 0, 10); public final static EmptyBorder EMPTY_BORDER_BOTTOM = new EmptyBorder(10, 10, 10, 10); - - public final static Icon VCS_LIST_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/vcs_list.png"); public final static Icon VCS_BACK_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/vcs_back.png"); public final static Icon VCS_FILTER_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_filter@1x.png"); @@ -51,6 +42,10 @@ public class VcsHelper { public final static Icon VCS_DELETE_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_delete.png"); public final static Icon VCS_USER_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_user@1x.png"); public final static Icon VCS_REVERT = IOUtils.readIcon("/com/fr/design/images/vcs/icon_revert.png"); + private final static String VCS_DIR = "vcs"; + public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); + private static final int MINUTE = 60 * 1000; + private final static String VCS_PLUGIN_ID = "com.fr.plugin.vcs.v10"; private static int containsFolderCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); @@ -67,7 +62,7 @@ public class VcsHelper { } public static String getCurrentUsername() { - return WorkContext.getCurrent().isLocal() + return WorkContext.getCurrent().isLocal() ? Toolkit.i18nText("Fine-Design_Vcs_Local_User") : WorkContext.getCurrent().getConnection().getUserName(); } @@ -117,6 +112,7 @@ public class VcsHelper { /** * 版本控制 + * * @param jt */ public static void dealWithVcs(final JTemplate jt) { From 52d74fd0ecd1df91609ce3e73e1b9eab65fc8e44 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 17:54:22 +0800 Subject: [PATCH 130/196] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE=E9=A1=B9=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/vcs/VcsConfigManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java index bbb6e9d9b..f61bba67a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java @@ -11,10 +11,10 @@ import com.fr.stable.xml.XMLableReader; public class VcsConfigManager implements XMLReadable, XMLWriter { public static final String XML_TAG = "VcsConfigManager"; private static volatile VcsConfigManager instance = new VcsConfigManager(); - private boolean vcsEnable; - private boolean saveCommit; - private boolean useInterval; - private int saveInterval; + private boolean vcsEnable = true; + private boolean saveCommit = true; + private boolean useInterval = true; + private int saveInterval = 60; public static VcsConfigManager getInstance() { return instance; From 630c6f369cd65f957914fcecf65bb56fd480ec51 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sat, 27 Apr 2019 18:18:11 +0800 Subject: [PATCH 131/196] =?UTF-8?q?REPORT-16556=20@xiaoxia=20=E5=A4=A7?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E8=BF=9B=E5=85=A5=E6=A8=A1=E7=89=88=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=AF=94=E8=BE=83=E6=85=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/DesignerFrameFileDealerPane.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 265e7dfe6..f2f53fead 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -299,11 +299,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt boolean isCurrentEditing = isCurrentEditing(path); - // 如果模板正在编辑,保存后再打开版本管理 - if (isCurrentEditing) { - saveCurrentEditingTemplate(); - } - // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) closeOpenedTemplate(path, isCurrentEditing); FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); From 3e6443251c04fc4c9f78b2e368c9d91b78c282c1 Mon Sep 17 00:00:00 2001 From: rinoux Date: Sun, 28 Apr 2019 10:06:41 +0800 Subject: [PATCH 132/196] =?UTF-8?q?DEC-7537=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0url=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/start/server/FineEmbedServerActivator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java index 2d08b286d..0d9e278e9 100644 --- a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java +++ b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java @@ -6,6 +6,7 @@ import com.fr.log.FineLoggerFactory; import com.fr.module.Activator; import com.fr.module.ModuleRole; import com.fr.stable.EncodeConstants; +import com.fr.stable.ProductConstants; import com.fr.startup.FineWebApplicationInitializer; import com.fr.third.springframework.web.SpringServletContainerInitializer; import com.fr.third.springframework.web.context.support.AnnotationConfigWebApplicationContext; @@ -62,6 +63,8 @@ public class FineEmbedServerActivator extends Activator { // 设置解码uri使用的字符编码 tomcat.getConnector().setURIEncoding(EncodeConstants.ENCODING_UTF_8); String docBase = new File(WorkContext.getCurrent().getPath()).getParent(); + //内置的上下文是自己定的,这里把WEB_APP_NAME一并设置了,否则下面appName是/null + ProductConstants.WEB_APP_NAME = ProductConstants.getAppFolderName(); String appName = "/" + FRContext.getCommonOperator().getAppName(); Context context = tomcat.addContext(appName, docBase); Tomcat.initWebappDefaults(context); From 288d0f8138d02ab6203ac6a2fde18ac73d9414c3 Mon Sep 17 00:00:00 2001 From: rinoux Date: Sun, 28 Apr 2019 10:19:30 +0800 Subject: [PATCH 133/196] get&set --- .../main/java/com/fr/start/server/FineEmbedServerActivator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java index 0d9e278e9..0955c16e5 100644 --- a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java +++ b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java @@ -64,7 +64,7 @@ public class FineEmbedServerActivator extends Activator { tomcat.getConnector().setURIEncoding(EncodeConstants.ENCODING_UTF_8); String docBase = new File(WorkContext.getCurrent().getPath()).getParent(); //内置的上下文是自己定的,这里把WEB_APP_NAME一并设置了,否则下面appName是/null - ProductConstants.WEB_APP_NAME = ProductConstants.getAppFolderName(); + ProductConstants.setWebAppName(ProductConstants.getAppFolderName()); String appName = "/" + FRContext.getCommonOperator().getAppName(); Context context = tomcat.addContext(appName, docBase); Tomcat.initWebappDefaults(context); From cac5653a86b7efa41bceda980d17ae634c614bbe Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 28 Apr 2019 12:55:30 +0800 Subject: [PATCH 134/196] =?UTF-8?q?REPORT-16568=20@xiaoxia=20=E5=A4=9A?= =?UTF-8?q?=E4=BA=BA=E8=BF=9C=E7=A8=8B=E8=AE=BE=E8=AE=A1=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E4=B8=AA=E7=94=A8=E6=88=B7=E6=9C=AA=E6=89=93?= =?UTF-8?q?=E5=BC=80=E6=A8=A1=E6=9D=BF=EF=BC=8C=E7=9B=B4=E6=8E=A5=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6,=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E4=B8=8D=E4=BC=9A=E4=B8=8A=E9=94=81=E4=B8=94=E8=83=BD?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E8=BF=9B=E5=85=A5=E7=89=88=E6=9C=AC=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/DesignerFrameFileDealerPane.java | 7 ------- .../mainframe/vcs/common/VcsCacheFileNodeFile.java | 12 ++++++++---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index bac6c15c3..264d14fc2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -321,13 +321,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } - private void saveCurrentEditingTemplate() { - JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - jt.stopEditing(); - jt.saveTemplate(); - jt.requestFocus(); - } - private boolean isCurrentEditing(String path) { JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); String editing = jt.getEditingFILE().getPath(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java index 9933fc0e7..40edc01f0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCacheFileNodeFile.java @@ -6,9 +6,10 @@ import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.stable.StableUtils; import com.fr.workspace.WorkContext; -import com.fr.workspace.resource.WorkResource; import com.fr.workspace.resource.WorkResourceOutputStream; +import com.fr.workspace.server.lock.TplOperator; +import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.OutputStream; @@ -29,7 +30,7 @@ public class VcsCacheFileNodeFile extends FileNodeFILE { * @throws Exception */ @Override - public InputStream asInputStream() { + public InputStream asInputStream() throws Exception { if (node == null) { return null; } @@ -40,8 +41,11 @@ public class VcsCacheFileNodeFile extends FileNodeFILE { return null; } - InputStream in = WorkContext.getCurrent().get(WorkResource.class) - .openStream(StableUtils.pathJoin(VcsHelper.VCS_CACHE_DIR, envPath.substring(VcsHelper.VCS_CACHE_DIR.length() + 1))); + InputStream in = new ByteArrayInputStream( + WorkContext.getCurrent().get(TplOperator.class).readAndLockFile( + StableUtils.pathJoin(VcsHelper.VCS_CACHE_DIR, envPath.substring(VcsHelper.VCS_CACHE_DIR.length() + 1)) + ) + ); return envPath.endsWith(".cpt") || envPath.endsWith(".frm") ? XMLEncryptUtils.decodeInputStream(in) : in; From 6d9cf9dd062e9e35e4bc863d40dbaf8fcad3d22e Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 28 Apr 2019 14:23:03 +0800 Subject: [PATCH 135/196] =?UTF-8?q?REPORT-16520=20@xiaoxia=20=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E5=86=85=E6=89=93=E5=BC=80=E5=A4=9A=E6=A8=A1?= =?UTF-8?q?=E7=89=88=EF=BC=8C=E8=BF=9B=E5=85=A5=E6=A8=A1=E7=89=88=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BC=9A=E2=80=9C=E5=8D=A1=E4=BD=8F?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/file/MutilTempalteTabPane.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java b/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java index 65989dfcc..968f72a59 100644 --- a/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java @@ -751,8 +751,11 @@ public class MutilTempalteTabPane extends JComponent { JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); selectedIndex = HistoryTemplateListCache.getInstance().contains(template); } - //如果是已后台关闭的模板,则重新打开文件 - openedTemplate.get(selectedIndex).activeOldJTemplate(); + if (selectedIndex < openedTemplate.size()) { + //如果是已后台关闭的模板,则重新打开文件 + openedTemplate.get(selectedIndex).activeOldJTemplate(); + } + } } From 8eb39091c67a7d7457425b077b7be9dc55ac2769 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 28 Apr 2019 15:48:02 +0800 Subject: [PATCH 136/196] =?UTF-8?q?REPORT-16550=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index 7f9fc56fe..4d9b6e35e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -19,7 +19,6 @@ import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.ToolBarDef; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; -import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; @@ -101,7 +100,8 @@ public class FileVersionsPanel extends BasicPane { } private void showFilterPane() { - versionDialog = new FileVersionDialog(DesignerContext.getDesignerFrame(), templatePath); + String savePath = templatePath.startsWith("/") ? templatePath.substring(1) : templatePath; + versionDialog = new FileVersionDialog(DesignerContext.getDesignerFrame(), savePath); versionDialog.setVisible(true); } From e6f7bc739fc0e624d055177c4bc6978bdfe16dc6 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 28 Apr 2019 16:34:47 +0800 Subject: [PATCH 137/196] =?UTF-8?q?REPORT-16527=20@xiaoxia=20=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=9B=B4=E6=8E=A5=E9=A2=84=E8=A7=88=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E7=89=88=E4=BF=9D=E5=AD=98=EF=BC=8C=E8=AF=A5?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E4=B8=8D=E4=BC=9A=E4=BF=9D=E5=AD=98=E6=96=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-realize/src/main/java/com/fr/start/Designer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 165ecfed7..142b1bdfa 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -277,19 +277,19 @@ public class Designer extends BaseDesigner { ) { @Override protected void upButtonClickEvent() { - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (jt == null) { return; } - WebPreviewUtils.preview(jt); - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { + if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && saveButton.isEnabled()) { VcsHelper.dealWithVcs(jt); } + WebPreviewUtils.preview(jt); } @Override protected void downButtonClickEvent() { - final JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + final JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (jt == null) { return; } From 695d04fb9d0a9a52ddcca3c5205e2c1cf30d9702 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Mon, 29 Apr 2019 14:26:16 +0800 Subject: [PATCH 138/196] =?UTF-8?q?REPORT-16559=20@xiaoxia=20=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E8=AE=BE=E8=AE=A1=EF=BC=8C=E5=BC=80=E5=90=AF=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E7=89=88=E6=9C=AC=E4=BF=9D=E5=AD=98=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=A8=A1=E7=89=88=E4=BF=9D=E5=AD=98=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E4=BA=A7=E7=94=9F=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index e814a9b94..a37a5cea6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -63,6 +63,7 @@ public class FileVersionRowPanel extends JPanel { public void actionPerformed(ActionEvent evt) { if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Confirm"), Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Title"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + vcsEntity.setUsername(VcsHelper.getCurrentUsername()); WorkContext.getCurrent().get(VcsOperator.class).rollbackTo(vcsEntity); FileVersionsPanel.getInstance().exitVcs(vcsEntity.getFilename()); } From 7186d89bb2c9f5eeb26c9057eb36787f8535d163 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Mon, 29 Apr 2019 17:38:27 +0800 Subject: [PATCH 139/196] =?UTF-8?q?REPORT-16527=20@xiaoxia=20=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=9B=B4=E6=8E=A5=E9=A2=84=E8=A7=88=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E7=89=88=E4=BF=9D=E5=AD=98=EF=BC=8C=E8=AF=A5?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E4=B8=8D=E4=BC=9A=E4=BF=9D=E5=AD=98=E6=96=B0?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/JTemplate.java | 3 +++ designer-realize/src/main/java/com/fr/start/Designer.java | 7 ------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index d256da8ae..a8ec61abc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -687,7 +687,10 @@ public abstract class JTemplate> this.saved = true; this.authoritySaved = true; DesignerContext.getDesignerFrame().setTitle(); + if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { + VcsHelper.dealWithVcs(this); + } this.fireJTemplateSaved(); return true; } diff --git a/designer-realize/src/main/java/com/fr/start/Designer.java b/designer-realize/src/main/java/com/fr/start/Designer.java index 142b1bdfa..2c8e030e3 100644 --- a/designer-realize/src/main/java/com/fr/start/Designer.java +++ b/designer-realize/src/main/java/com/fr/start/Designer.java @@ -30,7 +30,6 @@ import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -221,9 +220,6 @@ public class Designer extends BaseDesigner { jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { - VcsHelper.dealWithVcs(jt); - } } }); return saveButton; @@ -281,9 +277,6 @@ public class Designer extends BaseDesigner { if (jt == null) { return; } - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && saveButton.isEnabled()) { - VcsHelper.dealWithVcs(jt); - } WebPreviewUtils.preview(jt); } From d1c3ccc12c9b9447d11cb9db2ad17a9195c182b8 Mon Sep 17 00:00:00 2001 From: Hades Date: Mon, 6 May 2019 11:40:05 +0800 Subject: [PATCH 140/196] =?UTF-8?q?REPORT-16689=20=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E4=B8=8E=E5=86=BB=E7=BB=93=E8=AE=BE=E7=BD=AE=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=80=BC=E5=A4=A7=E4=BA=8E=E5=B0=BE=E5=80=BC=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E9=BB=98=E8=AE=A4=E5=88=9D=E5=A7=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/report/freeze/RepeatColPane.java | 6 ++++-- .../java/com/fr/design/report/freeze/RepeatRowPane.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatColPane.java b/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatColPane.java index 100b306d8..b4ff4f9ef 100644 --- a/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatColPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatColPane.java @@ -21,8 +21,10 @@ public class RepeatColPane extends FreezeAndRepeatPane { @Override public void populateBean(FT ob) { - ((ColSpinner)start).setValue((ob.getFrom() + 1)); - ((ColSpinner)end).setValue((ob.getTo() + 1)); + if (ob.getFrom() <= ob.getTo()) { + ((ColSpinner)start).setValue((ob.getFrom() + 1)); + ((ColSpinner)end).setValue((ob.getTo() + 1)); + } } @Override diff --git a/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatRowPane.java b/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatRowPane.java index e46a59a6e..5ae39ec25 100644 --- a/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatRowPane.java @@ -21,8 +21,10 @@ public class RepeatRowPane extends FreezeAndRepeatPane { @Override public void populateBean(FT ob) { - ((RowSpinner)start).setValue((ob.getFrom() + 1)); - ((RowSpinner)end).setValue((ob.getTo() + 1)); + if (ob.getFrom() <= ob.getTo()) { + ((RowSpinner)start).setValue((ob.getFrom() + 1)); + ((RowSpinner)end).setValue((ob.getTo() + 1)); + } } @Override From 0013ba1625d367df7bdf94ca901b48286f2f7106 Mon Sep 17 00:00:00 2001 From: "Wim.Zhai" Date: Tue, 7 May 2019 16:48:34 +0800 Subject: [PATCH 141/196] =?UTF-8?q?CHART-9105=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E5=9D=90=E6=A0=87=E8=BD=B4=E4=B8=8E=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=9D=90=E6=A0=87=E8=BD=B4'=E5=80=BC=E5=AE=9A?= =?UTF-8?q?=E4=B9=89'=E7=9A=84=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/chart/axis/MinMaxValuePane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/chart/axis/MinMaxValuePane.java b/designer-chart/src/main/java/com/fr/design/chart/axis/MinMaxValuePane.java index a84cfd693..79323d73d 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/axis/MinMaxValuePane.java @@ -35,9 +35,9 @@ public class MinMaxValuePane extends JPanel { minValueField = new UITextField(6); maxCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Max_Value")); maxValueField = new UITextField(6); - isCustomMainUnitBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Main_Graduation_Unit")); + isCustomMainUnitBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Main_Type")); mainUnitField = new UITextField(6); - isCustomSecUnitBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Second_Graduation_Unit")); + isCustomSecUnitBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Second_Type")); secUnitField = new UITextField(6); double p = TableLayout.PREFERRED; From 9ec51c388946986d897264457c61029177401176 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 8 May 2019 09:59:08 +0800 Subject: [PATCH 142/196] =?UTF-8?q?REPORT-16800=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E2=80=9C=E7=A4=BE=E5=8C=BA=E2=80=9D=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=A0=8F=E4=B8=8B=E7=9A=84=E5=86=85=E5=AE=B9=E9=83=BD?= =?UTF-8?q?=E6=89=93=E4=B8=8D=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/help/TutorialAction.java | 37 ++----------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java index 58221a03a..d6decd8b5 100644 --- a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java @@ -1,7 +1,6 @@ package com.fr.design.actions.help; import com.fr.base.BaseUtils; -import com.fr.base.Utils; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.CloudCenter; @@ -10,9 +9,7 @@ import com.fr.general.http.HttpToolbox; import com.fr.log.FineLoggerFactory; import com.fr.stable.CommonUtils; import com.fr.stable.ProductConstants; -import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.os.OperatingSystem; import com.fr.third.org.apache.http.HttpStatus; import com.fr.third.org.apache.http.StatusLine; import com.fr.third.org.apache.http.client.methods.HttpGet; @@ -21,12 +18,10 @@ import javax.swing.KeyStroke; import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; -import java.io.File; -import java.io.IOException; import java.net.URI; public class TutorialAction extends UpdateAction { - + public TutorialAction() { this.setMenuKeySet(HELP_TUTORIAL); this.setName(getMenuKeySet().getMenuName()); @@ -35,27 +30,6 @@ public class TutorialAction extends UpdateAction { this.setAccelerator(getMenuKeySet().getKeyStroke()); } - private void nativeExcuteMacInstallHomePrograms(String appName) { - String installHome = StableUtils.getInstallHome(); - if(installHome == null) { - FineLoggerFactory.getLogger().error("Can not find the install home, please check it."); - } else { - String appPath = StableUtils.pathJoin(new String[]{installHome, "bin", appName}); - if(!(new File(appPath)).exists()) { - FineLoggerFactory.getLogger().error(appPath + " can not be found."); - } - - String cmd = "open " + appPath; - Runtime runtime = Runtime.getRuntime(); - - try { - runtime.exec(cmd); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - - } - } /** * 动作 * @param evt 事件 @@ -69,12 +43,7 @@ public class TutorialAction extends UpdateAction { } catch (Exception e) { } } - - if (OperatingSystem.isUnix()) { - nativeExcuteMacInstallHomePrograms("helptutorial.app"); - } else { - Utils.nativeExcuteInstallHomePrograms("helptutorial.exe"); - } + FineLoggerFactory.getLogger().warn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Offline_Helptutorial_Msg")); } // 生成帮助文档 sitecenter key, help.zh_CN.10 @@ -116,4 +85,4 @@ public class TutorialAction extends UpdateAction { } }; -} \ No newline at end of file +} From e1743ff66e4389a03f477089b51a60116dd62471 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 8 May 2019 10:12:34 +0800 Subject: [PATCH 143/196] sonar --- .../src/main/java/com/fr/design/actions/help/TutorialAction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java index d6decd8b5..f5dc26f10 100644 --- a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java @@ -41,6 +41,7 @@ public class TutorialAction extends UpdateAction { Desktop.getDesktop().browse(new URI(helpURL)); return; } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } FineLoggerFactory.getLogger().warn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Offline_Helptutorial_Msg")); From 2f759e1770dc037e5e3b74d3e8837af1984300da Mon Sep 17 00:00:00 2001 From: Hades Date: Wed, 8 May 2019 10:25:03 +0800 Subject: [PATCH 144/196] =?UTF-8?q?REPORT-16817=20=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E8=B6=85=E7=BA=A7=E9=93=BE=E6=8E=A5-?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E6=8A=A5=E8=A1=A8-=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E6=8B=A9png=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/gui/itree/filetree/TemplateFileTree.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java index 51af636aa..ebbb78470 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -228,6 +228,16 @@ public class TemplateFileTree extends EnvFileTree { if (fileNodes == null) { fileNodes = new FileNode[0]; } + // FileNodeFilter过滤 + if (filter != null) { + List list = new ArrayList(); + for (FileNode fileNode : fileNodes) { + if (filter.accept(fileNode)) { + list.add(fileNode); + } + } + fileNodes = list.toArray(new FileNode[list.size()]); + } Arrays.sort(fileNodes, new FileNodeComparator(FRContext.getFileNodes().getSupportedTypes())); return fileNodes; From 104a3018fb2c442e8424a4921c0e72b8f8ae3437 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 8 May 2019 15:22:49 +0800 Subject: [PATCH 145/196] =?UTF-8?q?REPORT-14835=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4=20?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E9=9B=86=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 4 +- .../fr/design/mainframe/DesignerFrame.java | 2 + .../DesignerFrameFileDealerPane.java | 5 +- .../com/fr/design/mainframe/JTemplate.java | 6 +-- .../mainframe/vcs/common/VcsHelper.java | 50 +++++++++++++++---- .../mainframe/vcs/ui/FileVersionRowPanel.java | 2 +- 6 files changed, 48 insertions(+), 21 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 9775de2f5..4aee1941b 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -217,7 +217,7 @@ public class PreferencePane extends BasicPane { JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title")); generalPane.add(vcsPane); remindVcsLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Remind")); - remindVcsLabel.setVisible(!VcsHelper.needInit()); + remindVcsLabel.setVisible(!VcsHelper.getInstance().needInit()); vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto")); saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete")); saveIntervalEditor = new IntegerEditor(60); @@ -602,7 +602,7 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setSelected(false); } VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); - if (VcsHelper.needInit()) { + if (VcsHelper.getInstance().needInit()) { vcsEnableCheckBox.setSelected(vcsConfigManager.isVcsEnable()); } else { vcsEnableCheckBox.setEnabled(false); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 04dab52b5..e8b291426 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -37,6 +37,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.loghandler.LogMessageBar; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.MenuManager; import com.fr.design.menu.ShortCut; import com.fr.design.utils.gui.GUICoreUtils; @@ -924,6 +925,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } jt.addJTemplateActionListener(this); jt.addTargetModifiedListener(this); + jt.addJTemplateActionListener(new VcsHelper()); centerTemplateCardPane.showJTemplate(jt); setTitle(); layeredPane.repaint(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 264d14fc2..e95619885 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.vcs.DesignerMode; +import com.fr.cluster.engine.base.FineClusterConfig; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -202,7 +203,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt for (ShortCut shortCut : extraShortCuts) { toolbarDef.addShortCut(shortCut); } - if (VcsHelper.needInit()) { + if (VcsHelper.getInstance().needInit()) { toolbarDef.addShortCut(vcsAction); } toolbarDef.updateToolBar(toolBar); @@ -453,7 +454,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } private void handleVcsAction() { - if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.isUnSelectedTemplate()) { + if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.getInstance().isUnSelectedTemplate()) { vcsAction.setEnabled(false); return; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index a8ec61abc..6aeb19afb 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -687,10 +687,6 @@ public abstract class JTemplate> this.saved = true; this.authoritySaved = true; DesignerContext.getDesignerFrame().setTitle(); - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable()) { - VcsHelper.dealWithVcs(this); - - } this.fireJTemplateSaved(); return true; } @@ -831,7 +827,7 @@ public abstract class JTemplate> // Process the listeners last to first, notifying // those that are interested in this event - for (int i = listeners.length - 2; i >= 0; i -= 2) { + for (int i = listeners.length - 1; i >= 0; i -= 1) { if (listeners[i] == JTemplateActionListener.class) { ((JTemplateActionListener) listeners[i + 1]).templateSaved(this); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 05e18e691..e685a7a16 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.vcs.common; +import com.fr.cluster.engine.base.FineClusterConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.TemplateTreePane; @@ -7,6 +8,7 @@ import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.JTemplateActionListener; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.general.IOUtils; @@ -28,7 +30,7 @@ import static com.fr.stable.StableUtils.pathJoin; /** * Created by XiaXiang on 2019/4/17. */ -public class VcsHelper { +public class VcsHelper implements JTemplateActionListener { public final static Color TABLE_SELECT_BACKGROUND = new Color(0xD8F2FD); public final static Color COPY_VERSION_BTN_COLOR = new Color(0x419BF9); @@ -46,8 +48,13 @@ public class VcsHelper { public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); private static final int MINUTE = 60 * 1000; private final static String VCS_PLUGIN_ID = "com.fr.plugin.vcs.v10"; + private static final VcsHelper instance = new VcsHelper(); - private static int containsFolderCounts() { + public static VcsHelper getInstance() { + return instance; + } + + private int containsFolderCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); if (fileTree.getSelectionPaths() == null) { return 0; @@ -61,13 +68,13 @@ public class VcsHelper { return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; } - public static String getCurrentUsername() { + public String getCurrentUsername() { return WorkContext.getCurrent().isLocal() ? Toolkit.i18nText("Fine-Design_Vcs_Local_User") : WorkContext.getCurrent().getConnection().getUserName(); } - private static int selectedTemplateCounts() { + private int selectedTemplateCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); if (fileTree.getSelectionPaths() == null) { return 0; @@ -76,11 +83,11 @@ public class VcsHelper { return fileTree.getSelectedTemplatePaths().length; } - public static boolean isUnSelectedTemplate() { - return VcsHelper.containsFolderCounts() + VcsHelper.selectedTemplateCounts() != 1; + public boolean isUnSelectedTemplate() { + return containsFolderCounts() + selectedTemplateCounts() != 1; } - public static String getEditingFilename() { + private String getEditingFilename() { JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); String editingFilePath = jt.getEditingFILE().getPath(); if (editingFilePath.startsWith(ProjectConstants.REPORTLETS_NAME)) { @@ -94,7 +101,7 @@ public class VcsHelper { return editingFilePath; } - public static boolean needDeleteVersion(VcsEntity entity) { + private boolean needDeleteVersion(VcsEntity entity) { VcsConfigManager configManager = DesignerEnvManager.getEnvManager().getVcsConfigManager(); if (entity == null || !configManager.isUseInterval()) { return false; @@ -105,7 +112,7 @@ public class VcsHelper { return new Date().getTime() - entity.getTime().getTime() < DesignerEnvManager.getEnvManager().getVcsConfigManager().getSaveInterval() * MINUTE; } - public static boolean needInit() { + public boolean needInit() { PluginContext context = PluginManager.getContext(VCS_PLUGIN_ID); return context == null || !context.isActive(); } @@ -115,7 +122,7 @@ public class VcsHelper { * * @param jt */ - public static void dealWithVcs(final JTemplate jt) { + public void dealWithVcs(final JTemplate jt) { new Thread(new Runnable() { @Override public void run() { @@ -135,7 +142,7 @@ public class VcsHelper { operator.saveVersion(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1); } VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndex(fileName, 1); - if (VcsHelper.needDeleteVersion(oldEntity)) { + if (needDeleteVersion(oldEntity)) { operator.deleteVersion(oldEntity.getFilename(), oldEntity.getVersion()); } @@ -145,4 +152,25 @@ public class VcsHelper { } + @Override + public void templateOpened(JTemplate jt) { + + } + + /** + * 模板保存时 处理. + * + * @param jt 模板 + */ + @Override + public void templateSaved(JTemplate jt) { + if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && !FineClusterConfig.getInstance().isCluster()) { + dealWithVcs(jt); + } + } + + @Override + public void templateClosed(JTemplate jt) { + + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java index a37a5cea6..cd01d409c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionRowPanel.java @@ -63,7 +63,7 @@ public class FileVersionRowPanel extends JPanel { public void actionPerformed(ActionEvent evt) { if (JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Confirm"), Toolkit.i18nText("Fine-Design_Vcs_Version_Revert_Title"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - vcsEntity.setUsername(VcsHelper.getCurrentUsername()); + vcsEntity.setUsername(VcsHelper.getInstance().getCurrentUsername()); WorkContext.getCurrent().get(VcsOperator.class).rollbackTo(vcsEntity); FileVersionsPanel.getInstance().exitVcs(vcsEntity.getFilename()); } From 62c3d84b4d3f372309c9f752ec5ac4ae598d95e7 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 8 May 2019 16:03:25 +0800 Subject: [PATCH 146/196] =?UTF-8?q?REPORT-14835=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4=20?= =?UTF-8?q?=E5=B1=8F=E8=94=BD=E9=9B=86=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrame.java | 2 +- .../DesignerFrameFileDealerPane.java | 58 +++++++++++-------- .../com/fr/design/mainframe/JTemplate.java | 1 - 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index e8b291426..e10de8ab4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -925,7 +925,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } jt.addJTemplateActionListener(this); jt.addTargetModifiedListener(this); - jt.addJTemplateActionListener(new VcsHelper()); + jt.addJTemplateActionListener(VcsHelper.getInstance()); centerTemplateCardPane.showJTemplate(jt); setTitle(); layeredPane.repaint(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index e95619885..361b5702e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -304,6 +304,37 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt closeOpenedTemplate(path, isCurrentEditing); FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); fileVersionTablePanel.showFileVersionsPane(); + stateChange(); + + } + + /** + * 版本管理可用状态的监控 + */ + private void fireVcsActionChange() { + if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.getInstance().isUnSelectedTemplate() || FineClusterConfig.getInstance().isCluster()) { + vcsAction.setEnabled(false); + return; + } + + if (WorkContext.getCurrent() != null) { + if (!WorkContext.getCurrent().isLocal()) { + //当前环境为远程环境时 + FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); + if (selectedOperation.getFilePath() != null) { + if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { + vcsAction.setEnabled(false); + } else { + vcsAction.setEnabled(true); + } + } else { + vcsAction.setEnabled(false); + } + } else { + //当前环境为本地环境时 + vcsAction.setEnabled(selectedOperation.getFilePath() != null); + } + } } private void closeOpenedTemplate(String path, boolean isCurrentEditing) { @@ -447,37 +478,14 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt delFileAction.setEnabled(selected); // 刷新操作始终可用 refreshTreeAction.setEnabled(true); - handleVcsAction(); + //触发vcsAction变化 + vcsAction.fireVcsActionChange(); // 其他状态 otherStateChange(); } - private void handleVcsAction() { - if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.getInstance().isUnSelectedTemplate()) { - vcsAction.setEnabled(false); - return; - } - if (WorkContext.getCurrent() != null) { - if (!WorkContext.getCurrent().isLocal()) { - //当前环境为远程环境时 - FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); - if (selectedOperation.getFilePath() != null) { - if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { - vcsAction.setEnabled(false); - } else { - vcsAction.setEnabled(true); - } - } else { - vcsAction.setEnabled(false); - } - } else { - //当前环境为本地环境时 - vcsAction.setEnabled(selectedOperation.getFilePath() != null); - } - } - } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 6aeb19afb..5df52ad96 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -39,7 +39,6 @@ import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.template.info.TimeConsumeTimer; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.VcsScene; -import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.MenuDef; import com.fr.design.menu.NameSeparator; import com.fr.design.menu.ShortCut; From 411c9cd424f64509a5625430f6c8eb9c8008cc47 Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Wed, 8 May 2019 16:16:10 +0800 Subject: [PATCH 147/196] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=9B=9E?= =?UTF-8?q?=E4=BC=A0zip=E5=88=B0=E4=BA=91=E4=B8=AD=E5=BF=83=EF=BC=8C?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=9B=9E=E8=B0=83=E6=B6=88=E6=81=AF=E5=88=B0?= =?UTF-8?q?kafka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/FileEntityBuilder.java | 88 ++++++++----------- .../impl/FocusPointMessageUploader.java | 8 +- 2 files changed, 37 insertions(+), 59 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index 2555a2632..99ba2c5f7 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -1,24 +1,20 @@ package com.fr.design.mainframe.messagecollect.entity; +import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.general.CloudCenter; +import com.fr.general.CloudClient; import com.fr.general.IOUtils; import com.fr.general.http.HttpToolbox; import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.CommonUtils; +import com.fr.stable.CoreConstants; import com.fr.stable.EncodeConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.third.jodd.datetime.JDateTime; -import com.fr.third.org.apache.http.HttpEntity; -import com.fr.third.org.apache.http.HttpResponse; -import com.fr.third.org.apache.http.client.HttpClient; -import com.fr.third.org.apache.http.client.methods.HttpPut; -import com.fr.third.org.apache.http.entity.FileEntity; -import com.fr.third.org.apache.http.impl.client.DefaultHttpClient; -import com.fr.third.org.apache.http.util.EntityUtils; import java.io.ByteArrayInputStream; import java.io.File; @@ -26,22 +22,20 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; -import java.util.Map; import java.util.UUID; -import static com.fr.third.org.apache.http.HttpStatus.SC_OK; - /** * @author alex sung * @date 2019/4/8 */ public class FileEntityBuilder { - private static final String INTELLI_OPERATION_URL = "intelli.operation.url"; - private static final String OPERATION_URL = "https://cloud.fanruan.com/config/protect/operation"; - private static final String ATTR_SIGNATURE = "signature"; - private static final String ATTR_KEY = "key"; private static final String FOCUS_POINT_FILE_ROOT_PATH = "FocusPoint"; + private static final String FOCUS_POINT_FILE_UPLOAD_TOPIC = "__fine_intelli_treasure_upload__"; + private static final String FILE_FROM = "design"; + private static final String FOCUS_POINT_FILE_UPLOAD_TYPE = "FocusPoint"; + private static final String FOCUS_POINT_FILE_UPLOAD_URL = CloudCenter.getInstance().acquireUrlByKind("design.feedback"); + private static final String FOCUS_POINT_URL_KEY = "focuspoint"; /** * 文件夹路径 @@ -61,6 +55,9 @@ public class FileEntityBuilder { } public File generateZipFile(String pathName) { + if (pathName == null) { + return null; + } File zipFile = null; try { zipFile = new File(pathName + ".zip"); @@ -100,53 +97,40 @@ public class FileEntityBuilder { /** * 上传文件到云中心 - * @param file 待上传文件 + * + * @param file 待上传文件 * @param keyFileName 目标文件 * @throws IOException */ public static void uploadFile(File file, String keyFileName) throws IOException { + CloudClient client = CloudClient.getInstance(); String today = new JDateTime().toString("YYYY-MM-DD"); - HttpClient httpclient = new DefaultHttpClient(); - try { - String signedUrl = generateSignedUploadUrl(FOCUS_POINT_FILE_ROOT_PATH + File.separator + today + File.separator +keyFileName); - if(StringUtils.isEmpty(signedUrl)){ - FineLoggerFactory.getLogger().error("signedUrl is null."); - return; - } - HttpPut httpPost = new HttpPut(signedUrl); - httpPost.addHeader("Content-Type","application/octet-stream"); - FileEntity fileEntity = new FileEntity(file); - httpPost.setEntity(fileEntity); - HttpResponse response = httpclient.execute(httpPost); + String filePath = FOCUS_POINT_FILE_ROOT_PATH + CoreConstants.SEPARATOR + today + CoreConstants.SEPARATOR + keyFileName; + String bbsUserName = MarketConfig.getInstance().getBbsUsername(); + String uuid = DesignerEnvManager.getEnvManager().getUUID(); + String name = bbsUserName == null ? uuid : bbsUserName; - int statusCode = response.getStatusLine().getStatusCode(); - if (statusCode == SC_OK) { - HttpEntity resEntity = response.getEntity(); - EntityUtils.consume(resEntity); - } else { - HttpEntity entity = response.getEntity(); - String result = EntityUtils.toString(entity, "utf-8"); - FineLoggerFactory.getLogger().info("upload file result:" + result); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + client.uploadFile(file, filePath, name, FILE_FROM); + addMessageQueue(filePath, bbsUserName, uuid); } - private static String generateSignedUploadUrl(String fileKeyName) throws IOException { - String url = CloudCenter.getInstance().acquireUrlByKind(INTELLI_OPERATION_URL, OPERATION_URL); - Map parameters = new HashMap(); - parameters.put(ATTR_KEY, fileKeyName); - parameters.put(ATTR_SIGNATURE, String.valueOf(CommonUtils.signature())); - String responseText = HttpToolbox.get(url, parameters); + private static void addMessageQueue(String filePath, String userName, String uuid) { + JSONObject uploadInfo = new JSONObject(FOCUS_POINT_FILE_UPLOAD_URL); + String focusPointUrl = uploadInfo.optString(FOCUS_POINT_URL_KEY); try { - JSONObject data = new JSONObject(responseText); - if ("success".equals(data.optString("status"))) { - return data.optString("url"); + HashMap params = new HashMap<>(); + params.put("topic", FOCUS_POINT_FILE_UPLOAD_TOPIC); + params.put("username", userName); + params.put("uuid", uuid); + params.put("filepath", filePath); + params.put("timestamp", String.valueOf(System.currentTimeMillis())); + params.put("signature", String.valueOf(CommonUtils.signature())); + params.put("type", FOCUS_POINT_FILE_UPLOAD_TYPE); + if(StringUtils.isNotEmpty(focusPointUrl)){ + HttpToolbox.post(focusPointUrl, params); } - } catch (JSONException e) { - FineLoggerFactory.getLogger().error("Illegal response text."+e, e.getMessage()); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); } - return null; } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java index 33adf8e2d..1175c7c6e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -1,7 +1,5 @@ package com.fr.design.mainframe.messagecollect.impl; -import com.fr.config.MarketConfig; -import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.messagecollect.entity.FileEntityBuilder; import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; import com.fr.intelli.record.FocusPoint; @@ -91,15 +89,11 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { } private void generatePath() { - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - String bbsUserName = MarketConfig.getInstance().getBbsUsername(); - String uuid = envManager.getUUID(); - //文件夹名称的格式是: "FocusPoint" + 大版本号 + 小版本号 + uuid + bbsUserName + randomUuid,均以下划线分隔 + //文件夹名称的格式是: "FocusPoint" + 大版本号 + 小版本号 + randomUuid,均以下划线分隔 StringBuilder sb = new StringBuilder(); sb.append(FOCUS_POINT).append(SEPARATOR). append(ProductConstants.MAIN_VERSION).append(SEPARATOR). append(ProductConstants.MINOR_VERSION).append(SEPARATOR). - append(uuid).append(SEPARATOR).append(bbsUserName).append(SEPARATOR). append(UUID.randomUUID()); String folderName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString()); setFileEntityBuilder(new FileEntityBuilder(folderName)); From 8e4c20af88edc73ce3a703405d3348e3ec2b80cd Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Wed, 8 May 2019 16:45:21 +0800 Subject: [PATCH 148/196] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E6=94=B9=E6=88=90uuid.zip=EF=BC=8C=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=B7=B2=E7=BB=8F=E5=9C=A8edition=E4=B8=AD?= =?UTF-8?q?=E4=BD=93=E7=8E=B0=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messagecollect/impl/FocusPointMessageUploader.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java index 1175c7c6e..7b025f7cb 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -89,13 +89,8 @@ public class FocusPointMessageUploader extends AbstractSendDataToCloud { } private void generatePath() { - //文件夹名称的格式是: "FocusPoint" + 大版本号 + 小版本号 + randomUuid,均以下划线分隔 - StringBuilder sb = new StringBuilder(); - sb.append(FOCUS_POINT).append(SEPARATOR). - append(ProductConstants.MAIN_VERSION).append(SEPARATOR). - append(ProductConstants.MINOR_VERSION).append(SEPARATOR). - append(UUID.randomUUID()); - String folderName = StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString()); + //文件夹名称是uuid.zip,版本信息已经在edition中体现了 + String folderName = StableUtils.pathJoin(ProductConstants.getEnvHome(), String.valueOf(UUID.randomUUID())); setFileEntityBuilder(new FileEntityBuilder(folderName)); } } From d74aadb9e24f74861cfdee58f8b7d9d5a0f6729a Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 8 May 2019 16:46:02 +0800 Subject: [PATCH 149/196] rt --- .../java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index e685a7a16..94aa66dfc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -122,7 +122,7 @@ public class VcsHelper implements JTemplateActionListener { * * @param jt */ - public void dealWithVcs(final JTemplate jt) { + public void fireVcs(final JTemplate jt) { new Thread(new Runnable() { @Override public void run() { @@ -165,7 +165,7 @@ public class VcsHelper implements JTemplateActionListener { @Override public void templateSaved(JTemplate jt) { if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && !FineClusterConfig.getInstance().isCluster()) { - dealWithVcs(jt); + fireVcs(jt); } } From 0134b8c73c16bda900952a6f4510fd70d3b4193e Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Wed, 8 May 2019 16:46:04 +0800 Subject: [PATCH 150/196] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messagecollect/impl/FocusPointMessageUploader.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java index 7b025f7cb..214806c2e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -22,8 +22,6 @@ import java.util.UUID; public class FocusPointMessageUploader extends AbstractSendDataToCloud { private static final String TAG = "FocusPointMessageTag"; - private static final String SEPARATOR = "_"; - private static final String FOCUS_POINT = "FocusPoint"; private static final long DELTA = 24 * 3600 * 1000L; private static volatile FocusPointMessageUploader instance; From 4bf5c3b39e04640240933c018f7286ff052dbe46 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 8 May 2019 16:56:17 +0800 Subject: [PATCH 151/196] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 132 +++++++++--------- 1 file changed, 64 insertions(+), 68 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 361b5702e..e86365306 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -27,6 +27,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.mainframe.vcs.ui.FileVersionsPanel; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.ShortCut; @@ -50,7 +51,6 @@ import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; -import com.fr.design.mainframe.vcs.common.VcsHelper; import javax.swing.BorderFactory; import javax.swing.JDialog; @@ -80,6 +80,9 @@ import static javax.swing.JOptionPane.WARNING_MESSAGE; public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarStateChangeListener, ResponseDataSourceChange { + private static final String FILE = "file"; + private static volatile DesignerFrameFileDealerPane THIS; + static { GeneralContext.listenPluginRunningChanged(new PluginEventListener() { @@ -96,10 +99,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt }); } - private static final String FILE = "file"; - - private static volatile DesignerFrameFileDealerPane THIS; - private List otherToolbarStateChangeListeners = new ArrayList<>(); private FileOperations selectedOperation; @@ -119,25 +118,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private VcsAction vcsAction = new VcsAction(); - /** - * 刷新 - */ - public void refresh() { - selectedOperation.refresh(); - } - - public static DesignerFrameFileDealerPane getInstance() { - - if (THIS == null) { - synchronized (DesignerFrameFileDealerPane.class) { - if (THIS == null) { - THIS = new DesignerFrameFileDealerPane(); - } - } - } - return THIS; - } - private DesignerFrameFileDealerPane() { setLayout(new BorderLayout()); @@ -165,6 +145,24 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt stateChange(); } + public static DesignerFrameFileDealerPane getInstance() { + + if (THIS == null) { + synchronized (DesignerFrameFileDealerPane.class) { + if (THIS == null) { + THIS = new DesignerFrameFileDealerPane(); + } + } + } + return THIS; + } + + /** + * 刷新 + */ + public void refresh() { + selectedOperation.refresh(); + } public final void setCurrentEditingTemplate(JTemplate jt) { @@ -256,6 +254,41 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } } + private boolean isCurrentEditing(String path) { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + String editing = jt.getEditingFILE().getPath(); + return ComparatorUtils.equals(editing, path); + } + + /** + * 按钮状态改变 + */ + @Override + public void stateChange() { + + int selectedPathNum = TemplateTreePane.getInstance().countSelectedPath(); + + // 新建文件夹,重命名操作,在explorer中打开三个操作在选中单个文件夹或者文件时可用,其他情况不可用 + boolean singleSelected = selectedPathNum == 1; + newFolderAction.setEnabled(singleSelected); + renameAction.setEnabled(singleSelected); + showInExplorerAction.setEnabled(singleSelected); + // 删除操作在至少选中一个时可用 + boolean selected = selectedPathNum > 0; + delFileAction.setEnabled(selected); + // 刷新操作始终可用 + refreshTreeAction.setEnabled(true); + //触发vcsAction变化 + vcsAction.fireVcsActionChange(); + + // 其他状态 + otherStateChange(); + } + + public FileOperations getSelectedOperation() { + return selectedOperation; + } + /* * 新建文件夹 */ @@ -288,6 +321,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt * 版本管理 */ private class VcsAction extends UpdateAction { + public VcsAction() { this.setName(Toolkit.i18nText("Fine-Design_Vcs_Title")); this.setSmallIcon(VcsHelper.VCS_LIST_PNG); @@ -313,26 +347,27 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt */ private void fireVcsActionChange() { if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.getInstance().isUnSelectedTemplate() || FineClusterConfig.getInstance().isCluster()) { - vcsAction.setEnabled(false); + setEnabled(false); return; } + if (WorkContext.getCurrent() != null) { if (!WorkContext.getCurrent().isLocal()) { //当前环境为远程环境时 FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); if (selectedOperation.getFilePath() != null) { if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { - vcsAction.setEnabled(false); + setEnabled(false); } else { - vcsAction.setEnabled(true); + setEnabled(true); } } else { - vcsAction.setEnabled(false); + setEnabled(false); } } else { //当前环境为本地环境时 - vcsAction.setEnabled(selectedOperation.getFilePath() != null); + setEnabled(selectedOperation.getFilePath() != null); } } } @@ -353,12 +388,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } - private boolean isCurrentEditing(String path) { - JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - String editing = jt.getEditingFILE().getPath(); - return ComparatorUtils.equals(editing, path); - } - /** * 在系统资源管理器中打开 */ @@ -460,39 +489,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } } - /** - * 按钮状态改变 - */ - @Override - public void stateChange() { - - int selectedPathNum = TemplateTreePane.getInstance().countSelectedPath(); - - // 新建文件夹,重命名操作,在explorer中打开三个操作在选中单个文件夹或者文件时可用,其他情况不可用 - boolean singleSelected = selectedPathNum == 1; - newFolderAction.setEnabled(singleSelected); - renameAction.setEnabled(singleSelected); - showInExplorerAction.setEnabled(singleSelected); - // 删除操作在至少选中一个时可用 - boolean selected = selectedPathNum > 0; - delFileAction.setEnabled(selected); - // 刷新操作始终可用 - refreshTreeAction.setEnabled(true); - //触发vcsAction变化 - vcsAction.fireVcsActionChange(); - - // 其他状态 - otherStateChange(); - } - - - - - - public FileOperations getSelectedOperation() { - return selectedOperation; - } - /** * 重命名对话框 * 支持快捷键Enter,ESC From 392c1918041618d656a60fa8ad9831859b6700c7 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 8 May 2019 17:28:26 +0800 Subject: [PATCH 152/196] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 94aa66dfc..bc6c4d372 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -141,7 +141,7 @@ public class VcsHelper implements JTemplateActionListener { } else { operator.saveVersion(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1); } - VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndex(fileName, 1); + VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndexAndUsername(fileName, getCurrentUsername(), 1); if (needDeleteVersion(oldEntity)) { operator.deleteVersion(oldEntity.getFilename(), oldEntity.getVersion()); } From 4d4fae61c99bfb866d93043bb3415ae5df414ebe Mon Sep 17 00:00:00 2001 From: Hades Date: Wed, 8 May 2019 17:36:40 +0800 Subject: [PATCH 153/196] =?UTF-8?q?REPORT-16789=20=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E6=9D=83=E9=99=90=E7=BC=96=E8=BE=91=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/file/HistoryTemplateListCache.java | 14 +++++++------- .../com/fr/design/mainframe/DesktopCardPane.java | 5 +++-- .../java/com/fr/design/mainframe/JTemplate.java | 3 ++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java index f790eca94..528f6a56c 100644 --- a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java +++ b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java @@ -41,17 +41,17 @@ public class HistoryTemplateListCache implements CallbackEvent { private List> historyList; private JTemplate editingTemplate; - private static volatile HistoryTemplateListCache THIS; + private static volatile HistoryTemplateListCache instacne; public static HistoryTemplateListCache getInstance() { - if (THIS == null) { + if (instacne == null) { synchronized (HistoryTemplateListCache.class) { - if (THIS == null) { - THIS = new HistoryTemplateListCache(); + if (instacne == null) { + instacne = new HistoryTemplateListCache(); } } } - return THIS; + return instacne; } private HistoryTemplateListCache() { @@ -66,8 +66,8 @@ public class HistoryTemplateListCache implements CallbackEvent { public void closeSelectedReport(JTemplate selected) { DesignModuleFactory.clearChartPropertyPane(); DesignTableDataManager.closeTemplate(selected); - //直接关闭模板的时候退出权限编辑 - if (DesignModeContext.isAuthorityEditing()) { + //直接关闭模板的时候(当且仅当设计器tab上只剩一个模板)退出权限编辑 + if (DesignModeContext.isAuthorityEditing() && historyList.size() <= 1) { DesignerContext.getDesignerFrame().closeAuthorityEditing(); } if (contains(selected) == -1) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java index 94a1427b0..8b32d1427 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesktopCardPane.java @@ -30,7 +30,7 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener // 判断是否切换设计器状态到禁止拷贝剪切 if (jt.getTarget().getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) { DesignModeContext.switchTo(DesignerMode.BAN_COPY_AND_CUT); - } else if (!DesignModeContext.isVcsMode()){ + } else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing()){ DesignModeContext.switchTo(DesignerMode.NORMAL); } DesignerFrameFileDealerPane.getInstance().setCurrentEditingTemplate(jt); @@ -38,7 +38,8 @@ public class DesktopCardPane extends BasicPane implements TargetModifiedListener component.onLostFocus(); remove(component); } - add(component = jt, BorderLayout.CENTER); + component = jt; + add(component, BorderLayout.CENTER); validate(); repaint(); revalidate(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index a8ec61abc..f2d051af2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -12,6 +12,7 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.TableDataSourceAction; import com.fr.design.actions.edit.RedoAction; import com.fr.design.actions.edit.UndoAction; @@ -112,7 +113,7 @@ public abstract class JTemplate> // 判断是否切换设计器状态到禁止拷贝剪切 if (t.getAttrMark(DesignBanCopyAttrMark.XML_TAG) != null) { DesignModeContext.switchTo(com.fr.design.base.mode.DesignerMode.BAN_COPY_AND_CUT); - } else if (!DesignModeContext.isVcsMode()) { + } else if (!DesignModeContext.isVcsMode() && !DesignModeContext.isAuthorityEditing()) { DesignModeContext.switchTo(com.fr.design.base.mode.DesignerMode.NORMAL); } this.template = t; From a6beba0424cf80e980adedb53a554790ae106c4c Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 8 May 2019 20:02:43 +0800 Subject: [PATCH 154/196] =?UTF-8?q?REPORT-14835=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index e86365306..b48433c5c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -201,15 +201,31 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt for (ShortCut shortCut : extraShortCuts) { toolbarDef.addShortCut(shortCut); } - if (VcsHelper.getInstance().needInit()) { - toolbarDef.addShortCut(vcsAction); - } + addVcsAction(toolbarDef); toolbarDef.updateToolBar(toolBar); resetActionStatus(); refresh(); } + /** + * 添加VcsAction + * @param toolbarDef + */ + private void addVcsAction(ToolBarDef toolbarDef) { + if (VcsHelper.getInstance().needInit()) { + vcsAction = new VcsAction(); + if (FineClusterConfig.getInstance().isCluster()) { + vcsAction.setName(Toolkit.i18nText("Fine-Design_Vcs_NotSupportRemote")); + } else { + vcsAction.setName(Toolkit.i18nText("Fine-Design_Vcs_Title")); + } + toolbarDef.addShortCut(vcsAction); + + } + } + + private void resetActionStatus() { newFolderAction.setEnabled(false); @@ -323,7 +339,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private class VcsAction extends UpdateAction { public VcsAction() { - this.setName(Toolkit.i18nText("Fine-Design_Vcs_Title")); this.setSmallIcon(VcsHelper.VCS_LIST_PNG); } @@ -352,6 +367,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } + + if (WorkContext.getCurrent() != null) { if (!WorkContext.getCurrent().isLocal()) { //当前环境为远程环境时 From f2288dfd02892518f2f73e2ac6aff068dc6e576a Mon Sep 17 00:00:00 2001 From: Hades Date: Thu, 9 May 2019 09:14:17 +0800 Subject: [PATCH 155/196] =?UTF-8?q?=E3=80=9010.0.3=E5=9B=9E=E5=BD=92?= =?UTF-8?q?=E3=80=91=E8=81=9A=E5=90=88=E6=8A=A5=E8=A1=A8=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E6=9C=80=E5=8F=B3=E8=BE=B9=E7=9A=84=E5=88=97?= =?UTF-8?q?=E6=8B=96=E5=85=A5=E6=95=B0=E6=8D=AE=E5=90=8E=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=B6=85=E5=87=BA=E5=8F=B3=E8=BE=B9=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/grid/GridUtils.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/grid/GridUtils.java b/designer-realize/src/main/java/com/fr/grid/GridUtils.java index dfe7a5f2d..11e907fc6 100644 --- a/designer-realize/src/main/java/com/fr/grid/GridUtils.java +++ b/designer-realize/src/main/java/com/fr/grid/GridUtils.java @@ -12,6 +12,7 @@ import com.fr.general.ComparatorUtils; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; import com.fr.grid.selection.Selection; +import com.fr.poly.creator.ECBlockPane; import com.fr.report.ReportHelper; import com.fr.report.cell.CellElement; import com.fr.report.cell.FloatElement; @@ -48,8 +49,7 @@ public class GridUtils { //peter:下面这几个量是在Drag列的时候用. public final static int DRAG_CELL_SIZE = 1; //peter:drag的时候改变格子的宽度. - public final static int DRAG_SELECT_UNITS = 2; //peter:drag的时候,选中单元格. -// public static int resolution = (int) (ScreenResolution.getScreenResolution()* JSliderPane.getInstance().resolutionTimes); + public final static int DRAG_SELECT_UNITS = 2; //peter:drag的时候,选中单元格.// public static int resolution = (int) (ScreenResolution.getScreenResolution()* JSliderPane.getInstance().resolutionTimes); /** * Is above float element.(the return may be null).
@@ -125,7 +125,6 @@ public class GridUtils { */ public static double[] caculateFloatElementLocations(FloatElement floatElement, DynamicUnitList columnWidthList, DynamicUnitList rowHeightList, int verticalValue, int horizentalValue) { -// int resolution = ScreenResolution.getScreenResolution(); int resolution = (int) (ScreenResolution.getScreenResolution() * JSliderPane.getInstance().resolutionTimes); double floatX = columnWidthList.getRangeValue(horizentalValue, 0).toPixD(resolution) + floatElement.getLeftDistance().toPixD(resolution); @@ -180,7 +179,6 @@ public class GridUtils { private static int cc_selected_column_or_row(double mouseEvtPosition, int beginValue, int value, DynamicUnitList sizeList) { double tmpIntIndex = 0; int selectedCellIndex = 0; -// int resolution = ScreenResolution.getScreenResolution(); int resolution = (int) (ScreenResolution.getScreenResolution() * JSliderPane.getInstance().resolutionTimes); if (mouseEvtPosition < 0) { selectedCellIndex = value; @@ -239,7 +237,6 @@ public class GridUtils { private static int cc_selected_column_or_row_withresolution(double mouseEvtPosition, int beginValue, int value, DynamicUnitList sizeList, int resolution) { double tmpIntIndex = 0; int selectedCellIndex = 0; -// int resolution = ScreenResolution.getScreenResolution(); if (mouseEvtPosition < 0) { selectedCellIndex = value; for (; true; selectedCellIndex--) { @@ -311,6 +308,7 @@ public class GridUtils { public static boolean canMove(ElementCasePane reportPane, int cellColumn, int cellRow) { if (reportPane.mustInVisibleRange()) { Grid grid = reportPane.getGrid(); + checkGridCount(reportPane); int verticalEndValue = grid.getVerticalValue() + grid.getVerticalExtent() - 1; int horizontalEndValue = grid.getHorizontalValue() + grid.getHorizontalExtent() - 1; if (cellColumn > horizontalEndValue) { @@ -323,6 +321,16 @@ public class GridUtils { return true; } + /** + *聚合报表的报表块增加单元格的数量时 当单元格拉动一半会自动扩展成完整的单元格 + * 该单元格不被记录 check下重新计算下单元格数量 + */ + private static void checkGridCount(Object obj) { + if (obj instanceof ECBlockPane) { + ((ECBlockPane) obj).getTarget().firePropertyChange(); + } + } + /** * 选择一个Cell, 支持Merge. */ From 503c506aead0a4cc2135c3458e7eed36f80b5bcf Mon Sep 17 00:00:00 2001 From: Hades Date: Thu, 9 May 2019 10:57:04 +0800 Subject: [PATCH 156/196] =?UTF-8?q?REPORT-16833=20=E4=BF=AE=E6=94=B9body?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=EF=BC=8C=E6=8F=90=E7=A4=BA=E6=9C=89=E9=87=8D?= =?UTF-8?q?=E5=90=8D=E7=BB=84=E4=BB=B6=EF=BC=8C=E4=BF=9D=E5=AD=98=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/widget/ui/FormWidgetCardPane.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java index 65e2f6659..7401c91f8 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java @@ -28,6 +28,7 @@ import com.fr.design.widget.Operator; import com.fr.design.widget.ui.designer.component.WidgetAbsoluteBoundPane; import com.fr.design.widget.ui.designer.component.WidgetBoundPane; import com.fr.design.widget.ui.designer.component.WidgetCardTagBoundPane; +import com.fr.form.ui.FormWidgetHelper; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; import com.fr.form.ui.container.WTitleLayout; @@ -102,6 +103,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { /** * 后台初始化所有事件. */ + @Override public void initAllListeners() { } @@ -113,7 +115,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { initListener(this); } - + @Override protected void initContentPane() { } @@ -214,7 +216,9 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { Widget widget = currentEditorDefinePane.updateBean(); if (ComparatorUtils.equals(getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Basic")) && widgetPropertyPane != null) { UITextField widgetNameField = widgetPropertyPane.getWidgetNameField(); - if (designer.getTarget().isNameExist(widgetNameField.getText()) && !ComparatorUtils.equals(widgetNameField.getText(), widget.getWidgetName())) { + Widget existWidget = FormWidgetHelper.findWidgetByName(widget, widgetNameField.getText()); + boolean exist = ComparatorUtils.equals(designer.getTarget().getContainer().getWidgetName(), widgetNameField.getText()) || (existWidget != null && !ComparatorUtils.equals(widget.getWidgetName(), widgetNameField.getText())); + if (exist) { widgetNameField.setText(widget.getWidgetName()); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Rename_Failure"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Joption_News"), JOptionPane.ERROR_MESSAGE, BaseUtils.readIcon("com/fr/design/form/images/joption_failure.png")); return; From c997a9c3329e25a4f01dd923cb7ab965b5831d91 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Thu, 9 May 2019 11:41:30 +0800 Subject: [PATCH 157/196] =?UTF-8?q?REPORT-16894=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=8A=A5=E9=94=99=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 4 +- .../main/java/com/fr/env/RemoteEnvPane.java | 26 +------ .../java/com/fr/env/TestConnectionResult.java | 74 +++++++++++++++---- 3 files changed, 64 insertions(+), 40 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index 110b97563..93f282454 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -22,9 +22,9 @@ import com.fr.start.server.ServerTray; import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContextCallback; import com.fr.workspace.Workspace; -import com.fr.workspace.connect.AuthException; import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; +import com.fr.workspace.engine.exception.WorkspaceAuthException; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @@ -120,7 +120,7 @@ public class EnvChangeEntrance { } }); - } catch (AuthException | RegistEditionException e) { + } catch (WorkspaceAuthException | RegistEditionException e) { // String title = Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed"); // String title = Toolkit.i18nText("Fine-Design_Basic_Lic_Does_Not_Support_Remote"); strategy.showTip(new PopTip() { diff --git a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java index b0f3e9dd4..0d4839d6d 100644 --- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java @@ -19,8 +19,8 @@ import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.third.guava.base.Strings; import com.fr.workspace.WorkContext; -import com.fr.workspace.connect.AuthException; import com.fr.workspace.connect.WorkspaceConnectionInfo; +import com.fr.workspace.engine.exception.WorkspaceAuthException; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -523,7 +523,7 @@ public class RemoteEnvPane extends BasicBeanPane { DesignerEnvManager.getEnvManager().setCertificatePass(connection.getCertSecretKey()); try { return WorkContext.getConnector().testConnection(connection); - } catch (AuthException ignored) { + } catch (WorkspaceAuthException ignored) { return null; } } @@ -532,27 +532,9 @@ public class RemoteEnvPane extends BasicBeanPane { protected void done() { okButton.setEnabled(true); try { - TestConnectionResult result = TestConnectionResult.parse(get(), connection); - if (result == TestConnectionResult.Fully_Success) { - message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Successful")); - uiLabel.setIcon(UIManager.getIcon("OptionPane.informationIcon")); - } - - if (result == TestConnectionResult.Partly_Sucess) { - message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Version_Inconsistence_Test")); - uiLabel.setIcon(UIManager.getIcon("OptionPane.warningIcon")); - } - - if (result == TestConnectionResult.Fully_Failed) { - message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Failed")); - uiLabel.setIcon(UIManager.getIcon("OptionPane.errorIcon")); - } - - if (result == TestConnectionResult.Auth_Failed) { - message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed")); - uiLabel.setIcon(UIManager.getIcon("OptionPane.errorIcon")); - } + message.setText(result.getText()); + uiLabel.setIcon(result.getIcon()); } catch (InterruptedException | ExecutionException e) { FineLoggerFactory.getLogger().error(e, e.getMessage()); message.setText(Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Failed")); diff --git a/designer-base/src/main/java/com/fr/env/TestConnectionResult.java b/designer-base/src/main/java/com/fr/env/TestConnectionResult.java index 357d4f38c..5362dbbd8 100644 --- a/designer-base/src/main/java/com/fr/env/TestConnectionResult.java +++ b/designer-base/src/main/java/com/fr/env/TestConnectionResult.java @@ -1,62 +1,104 @@ package com.fr.env; +import com.fr.design.i18n.Toolkit; import com.fr.log.FineLoggerFactory; import com.fr.stable.AssistUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; +import javax.swing.Icon; +import javax.swing.UIManager; + /** * 测试连接的结果。 * 不改变原有逻辑的情况下,加入一层转化。 * 根据这里的转化结果,判断需要提示哪些内容。 - * + *

* created by Harrison on 2018/12/20 **/ public enum TestConnectionResult { /** * 完全成功, 版本匹配,测试连接成功。 */ - Fully_Success, + FULLY_SUCCESS { + @Override + public Icon getIcon() { + return UIManager.getIcon("OptionPane.informationIcon"); + } + + @Override + public String getText() { + return Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Successful"); + } + }, /** * 不完全成功,版本不匹配,但测试连接成功。 */ - Partly_Sucess, + PARTLY_SUCCESS { + @Override + public Icon getIcon() { + return UIManager.getIcon("OptionPane.warningIcon"); + } + + @Override + public String getText() { + return Toolkit.i18nText("Fine-Design_Basic_Remote_Design_Version_Inconsistence_Test"); + } + }, /** * 完全失败,直接没连上 */ - Fully_Failed, + FULLY_FAILED { + @Override + public Icon getIcon() { + return UIManager.getIcon("OptionPane.errorIcon"); + } + + @Override + public String getText() { + return Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Failed"); + } + }, /** * 验证 Token 失败 */ - Auth_Failed; + AUTH_FAILED { + @Override + public Icon getIcon() { + return UIManager.getIcon("OptionPane.errorIcon"); + } + + @Override + public String getText() { + return Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed"); + } + }; + + public abstract Icon getIcon(); + + public abstract String getText(); public static TestConnectionResult parse(Boolean value, WorkspaceConnectionInfo info) { if (value == null) { - return Auth_Failed; + return AUTH_FAILED; } - if (!value) { - return Fully_Failed; + return FULLY_FAILED; } try { - String serverVersion = new FunctionalHttpRequest(info).getServerVersion(); if (AssistUtils.equals(serverVersion, WorkContext.getVersion())) { - return Fully_Success; + return FULLY_SUCCESS; } - - return Partly_Sucess; + return PARTLY_SUCCESS; } catch (Exception e) { - // 发生异常,说明没连接上。返回完全失败。 FineLoggerFactory.getLogger().error(e.getMessage()); - return Fully_Failed; + return FULLY_FAILED; } - - } } From b0e562dc50df446d75310a1b2f87485d91864529 Mon Sep 17 00:00:00 2001 From: Hades Date: Thu, 9 May 2019 11:58:40 +0800 Subject: [PATCH 158/196] update --- .../mainframe/widget/ui/FormWidgetCardPane.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java index 7401c91f8..68ceb8688 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java @@ -216,15 +216,23 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { Widget widget = currentEditorDefinePane.updateBean(); if (ComparatorUtils.equals(getGlobalName(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Basic")) && widgetPropertyPane != null) { UITextField widgetNameField = widgetPropertyPane.getWidgetNameField(); + String toSetWidgetName = widgetNameField.getText(); + String currentWidgetName = widget.getWidgetName(); + // 设置的组件名和当前组件名相同 直接返回 + if (ComparatorUtils.equals(toSetWidgetName, currentWidgetName)) { + return; + } + String containerName = designer.getTarget().getContainer().getWidgetName(); Widget existWidget = FormWidgetHelper.findWidgetByName(widget, widgetNameField.getText()); - boolean exist = ComparatorUtils.equals(designer.getTarget().getContainer().getWidgetName(), widgetNameField.getText()) || (existWidget != null && !ComparatorUtils.equals(widget.getWidgetName(), widgetNameField.getText())); + // 判断设置的组件名是否和容器同名以及组件是否在容器在存在 满足任何之一 抛出提示 + boolean exist = ComparatorUtils.equals(containerName, toSetWidgetName) || existWidget != null; if (exist) { - widgetNameField.setText(widget.getWidgetName()); + widgetNameField.setText(currentWidgetName); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Rename_Failure"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Joption_News"), JOptionPane.ERROR_MESSAGE, BaseUtils.readIcon("com/fr/design/form/images/joption_failure.png")); return; } widgetPropertyPane.update(widget); - xCreator.resetCreatorName(widget.getWidgetName()); + xCreator.resetCreatorName(toSetWidgetName); xCreator.resetVisible(widget.isVisible()); designer.getEditListenerTable().fireCreatorModified(xCreator, DesignerEvent.CREATOR_RENAMED); return; From d7dc7e096c36e623b8941d0e8c5c44183b5546da Mon Sep 17 00:00:00 2001 From: Hades Date: Thu, 9 May 2019 12:29:02 +0800 Subject: [PATCH 159/196] update --- .../com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java index 68ceb8688..3e70f7d0f 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormWidgetCardPane.java @@ -224,7 +224,7 @@ public class FormWidgetCardPane extends AbstractAttrNoScrollPane { } String containerName = designer.getTarget().getContainer().getWidgetName(); Widget existWidget = FormWidgetHelper.findWidgetByName(widget, widgetNameField.getText()); - // 判断设置的组件名是否和容器同名以及组件是否在容器在存在 满足任何之一 抛出提示 + // 判断设置的组件名是否和容器同名以及组件是否在容器在存在 满足任何其一 抛出提示 boolean exist = ComparatorUtils.equals(containerName, toSetWidgetName) || existWidget != null; if (exist) { widgetNameField.setText(currentWidgetName); From e027fd7e4cb417d8cb8f0219883dbe5ba2ffbc54 Mon Sep 17 00:00:00 2001 From: Hades Date: Thu, 9 May 2019 13:52:37 +0800 Subject: [PATCH 160/196] =?UTF-8?q?REPORT-16871=20=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E4=B8=BA=E6=97=A5=E8=AF=AD=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E8=BE=B9=E6=A1=86=E7=BA=BF=E9=94=99?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/icon/BorderIcon.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/icon/BorderIcon.java b/designer-base/src/main/java/com/fr/design/icon/BorderIcon.java index 3a52f4c50..9d5e71305 100644 --- a/designer-base/src/main/java/com/fr/design/icon/BorderIcon.java +++ b/designer-base/src/main/java/com/fr/design/icon/BorderIcon.java @@ -22,16 +22,18 @@ public class BorderIcon implements Icon { this.cellBorderStyle = cellBorderStyle; } + @Override public int getIconHeight() { return height; } + @Override public int getIconWidth() { return width; } - public static void drawLine(Graphics g, double x1, double y1, double x2, + private void drawLine(Graphics g, double x1, double y1, double x2, double y2, int lineStyle, Color color) { g.setColor(color); x1--; @@ -63,6 +65,7 @@ public class BorderIcon implements Icon { } } + @Override public void paintIcon(Component c, Graphics g, int x, int y) { int defaultWidth = c.getWidth(); int defaultHeight = c.getHeight(); @@ -81,9 +84,9 @@ public class BorderIcon implements Icon { cellBorderStyle.getBottomColor()); drawLine(gr, x1, y1, x1, y2, cellBorderStyle.getLeftStyle(), cellBorderStyle.getLeftColor()); - drawLine(gr, defaultWidth / 2, x1, defaultWidth / 2, x2, + drawLine(gr, defaultWidth / 2, y1, defaultWidth / 2, y2, cellBorderStyle.getVerticalStyle(), cellBorderStyle.getVerticalColor()); - drawLine(gr, y1, defaultHeight / 2, y2, defaultHeight / 2, + drawLine(gr, x1, defaultHeight / 2, x2, defaultHeight / 2, cellBorderStyle.getHorizontalStyle(), cellBorderStyle.getHorizontalColor()); } From a3952bbc3b202849fe3b2abe7ef81cc109627261 Mon Sep 17 00:00:00 2001 From: Hades Date: Thu, 9 May 2019 16:11:45 +0800 Subject: [PATCH 161/196] =?UTF-8?q?REPORT-16858=20=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=AE=BD=E5=BA=A6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=88=B0=E5=B1=8F=E5=B9=95=E4=B8=80=E5=8D=8A?= =?UTF-8?q?=E5=90=8E=E8=BF=9E=E7=BB=AD=E6=B7=BB=E5=8A=A010=E4=B8=AAsheet?= =?UTF-8?q?=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=9C=80=E5=A4=A7=E5=8C=96?= =?UTF-8?q?=E5=90=8E=E6=9C=AA=E6=98=BE=E7=A4=BA=E6=89=80=E6=9C=89=E7=9A=84?= =?UTF-8?q?sheet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/SheetNameTabPane.java | 105 ++++++++++-------- 1 file changed, 57 insertions(+), 48 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java index 09f1ff9e1..5df1f5686 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java @@ -3,6 +3,8 @@ package com.fr.design.mainframe; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; @@ -24,6 +26,7 @@ import com.fr.base.GraphHelper; import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.UpdateAction; import com.fr.design.constants.UIConstants; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButtonUI; @@ -35,12 +38,14 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; import com.fr.main.impl.WorkBook; import com.fr.poly.PolyDesigner; import com.fr.report.poly.PolyWorkSheet; import com.fr.report.report.TemplateReport; import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ProductConstants; +import org.apache.tools.ant.taskdefs.Sleep; /** * NameTabPane of sheets @@ -52,15 +57,15 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse private static final Color LINE_COLOR = new Color(0xababab); - private static final Icon ADD_WORK_SHEET = BaseUtils.readIcon("com/fr/base/images/oem/addworksheet.png"); - protected static final Icon ADD_POLY_SHEET = BaseUtils.readIcon("com/fr/design/images/sheet/addpolysheet.png"); - private static final Icon WORK_SHEET_ICON = BaseUtils.readIcon("com/fr/base/images/oem/worksheet.png"); - private static final Icon POLY_SHEET_ICON = BaseUtils.readIcon("com/fr/design/images/sheet/polysheet.png"); - private static final Image DESIGN_IMAGE = BaseUtils.readImage("com/fr/design/images/sheet/left_right_btn.png"); - private static final Icon LEFT_ICON = BaseUtils.readIcon("com/fr/design/images/sheet/left_normal@1x.png"); - private static final Icon RIGHT_ICON = BaseUtils.readIcon("com/fr/design/images/sheet/right_normal@1x.png"); - private static final Icon DISABLED_LEFT_ICON = BaseUtils.readIcon("com/fr/design/images/sheet/left_hover@1x.png"); - private static final Icon DISABLED_RIGHT_ICON = BaseUtils.readIcon("com/fr/design/images/sheet/right_hover@1x.png"); + private static final Icon ADD_WORK_SHEET = IOUtils.readIcon("com/fr/base/images/oem/addworksheet.png"); + protected static final Icon ADD_POLY_SHEET = IOUtils.readIcon("com/fr/design/images/sheet/addpolysheet.png"); + private static final Icon WORK_SHEET_ICON = IOUtils.readIcon("com/fr/base/images/oem/worksheet.png"); + private static final Icon POLY_SHEET_ICON = IOUtils.readIcon("com/fr/design/images/sheet/polysheet.png"); + private static final Icon LEFT_ICON = IOUtils.readIcon("com/fr/design/images/sheet/left_normal@1x.png"); + private static final Icon RIGHT_ICON = IOUtils.readIcon("com/fr/design/images/sheet/right_normal@1x.png"); + private static final Icon DISABLED_LEFT_ICON = IOUtils.readIcon("com/fr/design/images/sheet/left_hover@1x.png"); + private static final Icon DISABLED_RIGHT_ICON = IOUtils.readIcon("com/fr/design/images/sheet/right_hover@1x.png"); + private static final int NUM = 10; private static final int ICON_SEP_DISTANCE = 8; private static final int TOOLBAR_HEIGHT = 16; @@ -144,6 +149,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse this.setBorder(null); this.setForeground(new Color(99, 99, 99)); leftButton = new UIButton(LEFT_ICON) { + @Override public Dimension getPreferredSize() { return new Dimension(super.getPreferredSize().width, TOOLBAR_HEIGHT); } @@ -163,6 +169,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse leftButton.set4ToolbarButton(); leftButton.setDisabledIcon(DISABLED_LEFT_ICON); rightButton = new UIButton(RIGHT_ICON) { + @Override public Dimension getPreferredSize() { return new Dimension(super.getPreferredSize().width, TOOLBAR_HEIGHT); } @@ -197,7 +204,14 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse } } }); - + + DesignerContext.getDesignerFrame().addComponentListener(new ComponentAdapter(){ + @Override public void componentResized(ComponentEvent e) { + for (int i = 0; i < lastOneIndex * NUM; i++) { + moveLeft(); + } + } + }); } private ActionListener createLeftButtonActionListener() { @@ -205,27 +219,31 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse @Override public void actionPerformed(ActionEvent e) { - int s = scrollIndex; - if (s == lastOneIndex && s != 0) { - scrollIndex--; - lastOneIndex--; - repaint(); - } else { - while (s > lastOneIndex && showCount != 0) { - scrollIndex++; - lastOneIndex++; - repaint(); - } - while (s < lastOneIndex && scrollIndex > 0) { - scrollIndex--; - lastOneIndex--; - repaint(); - } - } + moveLeft(); } }; } + private void moveLeft() { + int s = scrollIndex; + if (s == lastOneIndex && s != 0) { + scrollIndex--; + lastOneIndex--; + repaint(); + } else { + while (s > lastOneIndex && showCount != 0) { + scrollIndex++; + lastOneIndex++; + repaint(); + } + while (s < lastOneIndex && scrollIndex > 0) { + scrollIndex--; + lastOneIndex--; + repaint(); + } + } + } + /** * 设置选择index * @@ -282,6 +300,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param e 鼠标事件 */ + @Override public void mouseDragged(MouseEvent e) { if (isAuthorityEditing) { return; @@ -295,6 +314,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param e 鼠标事件 */ + @Override public void mouseMoved(MouseEvent e) { } @@ -423,15 +443,6 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse } generalPath.closePath(); g2d.fill(generalPath); -// g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); -// g2d.setPaint(UIConstants.LINE_COLOR); -// if (selectedIndex == scrollIndex) { -// g2d.draw(new Line2D.Double(x[0], y[0], x[1], y[1])); -// } -// g2d.draw(new Line2D.Double(x[1], y[1], x[2], y[2])); -// g2d.draw(new Line2D.Double(x[2], y[2], x[3], y[3])); -// g2d.draw(new Line2D.Double(x[3], y[3], x[4], y[4])); -// g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); sheeticon.paintIcon(this, g2d, (int) textX + charWidth, 2); // peter:画字符 g2d.setPaint(getForeground()); @@ -470,13 +481,6 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse g2d.fill(generalPath); g2d.setPaint(LINE_COLOR); -// if (i == scrollIndex) { -// g2d.draw(new Line2D.Double(x[0], y[0], x[1], y[1])); -// } -// g2d.draw(new Line2D.Double(x[1], y[1], x[2], y[2])); -// g2d.draw(new Line2D.Double(x[2], y[2], x[3], y[3])); -// g2d.draw(new Line2D.Double(x[3], y[3], x[4], y[4])); -// g2d.draw(new Line2D.Double(x[4], y[4], x[5], y[5])); double startX = textX > 0 ? textX - 1 : textX; g2d.drawRect((int)startX, 0, width, (int)textHeight); @@ -560,6 +564,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param e 鼠标事件 */ + @Override public void mouseClicked(MouseEvent e) { } @@ -568,6 +573,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param evt 鼠标事件 */ + @Override public void mousePressed(MouseEvent evt) { isReleased = false; int reportcount = reportComposite.getEditingWorkBook().getReportCount(); @@ -586,7 +592,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse boolean needRefreshPropertiesPane = getSelectedIndex() != i; setSelectedIndex(i); if (needRefreshPropertiesPane) { - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); + HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); } isBlank = false; @@ -629,11 +635,11 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse } } - + protected void addInsertGridShortCut(MenuDef def){ def.addShortCut(new GridReportInsertAction()); } - + protected void firstInsertActionPerformed(){ new GridReportInsertAction().actionPerformed(null); } @@ -644,6 +650,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param e 鼠标事件 */ + @Override public void mouseReleased(MouseEvent e) { this.isReleased = true; this.setReleasedXY(e.getX(), e.getY()); @@ -737,6 +744,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param e 鼠标事件 */ + @Override public void mouseEntered(MouseEvent e) { } @@ -745,6 +753,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse * * @param e 鼠标事件 */ + @Override public void mouseExited(MouseEvent e) { } @@ -772,7 +781,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse protected abstract class SheetInsertAction extends UpdateAction { SheetInsertAction() { this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Insert") + getTemplateReportType()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/add.png")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/base/images/cell/control/add.png")); } @Override @@ -945,7 +954,7 @@ public class SheetNameTabPane extends JComponent implements MouseListener, Mouse private class CopySheetAction extends UpdateAction { CopySheetAction() { this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Copy")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); } @Override From bb29d0a370cdab10541e46ad8a0e8620823c367c Mon Sep 17 00:00:00 2001 From: zack Date: Thu, 9 May 2019 20:12:25 +0800 Subject: [PATCH 162/196] =?UTF-8?q?REPORT-14831=20=E6=96=B0=E5=A4=9A?= =?UTF-8?q?=E9=80=89=E4=B8=8B=E6=8B=89=E6=A0=91=E6=8F=92=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E9=AB=98=E7=BA=A7=E5=B1=9E=E6=80=A7=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/designer/creator/XTreeEditor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java index c5672b389..bde83a176 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java @@ -73,7 +73,7 @@ public class XTreeEditor extends XWidgetCreator { crp = (CRPropertyDescriptor[]) ArrayUtils.add(crp, new CRPropertyDescriptor("ajax", this.data.getClass()).setI18NName( com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Load_By_Async")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, - "Advanced")); + "Fine-Design_Basic_Advanced")); crp = this.addAllowEdit(crp); crp = this.addCustomData(crp); From 6f1747409bbf134703936018c9020b9c0dac3201 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 May 2019 10:58:13 +0800 Subject: [PATCH 163/196] =?UTF-8?q?REPORT-16986=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=88=B6=E4=BD=9C=E5=9F=8B=E7=82=B9=E7=9A=84tpl.info=E9=87=8C?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E5=A6=82=E6=9E=9C=E6=98=AF=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E5=90=8D=E4=BC=9A=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/info/TemplateInfoCollector.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 0996c260c..342213e0f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -12,12 +12,14 @@ import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLableReader; import com.fr.third.javax.xml.stream.XMLStreamException; -import com.fr.workspace.WorkContext; +import com.fr.third.org.apache.commons.io.FileUtils; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -133,7 +135,8 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { return; } try { - XMLableReader xmlReader = XMLableReader.createXMLableReader(new FileReader(getInfoFile())); + InputStreamReader isReader = new InputStreamReader(new FileInputStream(getInfoFile()), StandardCharsets.UTF_8); + XMLableReader xmlReader = XMLableReader.createXMLableReader(isReader); xmlReader.readXMLObject(this); } catch (XMLStreamException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); @@ -160,8 +163,12 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { */ private void saveInfo() { try { - FileOutputStream out = new FileOutputStream(getInfoFile()); + ByteArrayOutputStream out = new ByteArrayOutputStream(); XMLTools.writeOutputStreamXML(this, out); + out.flush(); + out.close(); + String fileContent = new String(out.toByteArray(), StandardCharsets.UTF_8); + FileUtils.writeStringToFile(getInfoFile(), fileContent, StandardCharsets.UTF_8); } catch (Exception ex) { FineLoggerFactory.getLogger().error(ex.getMessage()); } From 97040ebdc92b62d61f1ee781f12b1e9fac940347 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 10 May 2019 11:07:43 +0800 Subject: [PATCH 164/196] report-16674 --- .../mainframe/vcs/ui/FileVersionCellEditor.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index a7f7f5ef0..1e5b27e54 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -8,6 +8,7 @@ import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.mainframe.vcs.common.VcsCacheFileNodeFile; import com.fr.file.filetree.FileNode; +import com.fr.general.ComparatorUtils; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; @@ -53,9 +54,13 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe //先关闭当前打开的模板版本 JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); - MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); - MutilTempalteTabPane.getInstance().closeFormat(jt); - MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jt); + //只有模板一样是关闭当前模板 + if (ComparatorUtils.equals(fileOfVersion, jt.getPath())) { + MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); + MutilTempalteTabPane.getInstance().closeFormat(jt); + MutilTempalteTabPane.getInstance().closeSpecifiedTemplate(jt); + } + //再打开cache中的模板 DesignerContext.getDesignerFrame().openTemplate(new VcsCacheFileNodeFile(new FileNode(fileOfVersion, false))); From 15bcbf85fbe2ccae63adb06dc2be18ddc8d3e8fd Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 10 May 2019 11:08:53 +0800 Subject: [PATCH 165/196] rt --- .../com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index 1e5b27e54..ac525128a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -54,7 +54,7 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe //先关闭当前打开的模板版本 JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); - //只有模板一样是关闭当前模板 + //只有模板路径一致时关闭当前模板 if (ComparatorUtils.equals(fileOfVersion, jt.getPath())) { MutilTempalteTabPane.getInstance().setIsCloseCurrent(true); MutilTempalteTabPane.getInstance().closeFormat(jt); From 78f8afd3ad4997106524f13f1558065f15c15800 Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Fri, 10 May 2019 11:39:35 +0800 Subject: [PATCH 166/196] =?UTF-8?q?=E5=BB=B6=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E5=86=99=E9=94=99=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/InformationCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index 775f402d8..83cb7dd33 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -205,7 +205,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { TemplateInfoCollector.getInstance().sendTemplateInfo(); ErrorInfoUploader.getInstance().sendErrorInfo(); } - }, SEND_DELAY, TimeUnit.SECONDS); + }, SEND_DELAY, TimeUnit.MILLISECONDS); } /** From d89a2bedde93343e581e4894ee9303520f0c7724 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 May 2019 11:43:30 +0800 Subject: [PATCH 167/196] =?UTF-8?q?REPORT-16986=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=88=B6=E4=BD=9C=E5=9F=8B=E7=82=B9=E7=9A=84tpl.info=E9=87=8C?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E5=A6=82=E6=9E=9C=E6=98=AF=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E5=90=8D=E4=BC=9A=E4=B9=B1=E7=A0=81=3D>=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/info/TemplateInfoCollector.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 342213e0f..330b9304a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.template.info; import com.fr.base.FRContext; +import com.fr.base.io.XMLReadHelper; import com.fr.design.DesignerEnvManager; import com.fr.log.FineLoggerFactory; import com.fr.stable.ProductConstants; @@ -18,7 +19,8 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.InputStreamReader; +import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; @@ -134,14 +136,24 @@ public class TemplateInfoCollector implements XMLReadable, XMLWriter { if (!getInfoFile().exists()) { return; } - try { - InputStreamReader isReader = new InputStreamReader(new FileInputStream(getInfoFile()), StandardCharsets.UTF_8); - XMLableReader xmlReader = XMLableReader.createXMLableReader(isReader); - xmlReader.readXMLObject(this); - } catch (XMLStreamException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + + XMLableReader reader = null; + try (InputStream in = new FileInputStream(getInfoFile())) { + // XMLableReader 还是应该考虑实现 Closable 接口的,这样就能使用 try-with 语句了 + reader = XMLReadHelper.createXMLableReader(in, XMLPrintWriter.XML_ENCODER); + reader.readXMLObject(this); } catch (FileNotFoundException e) { // do nothing + } catch (XMLStreamException | IOException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } finally { + try { + if (reader != null) { + reader.close(); + } + } catch (XMLStreamException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } } } From 48bd73570563b3ea41d6ff3355aeb3ba0b59d9a3 Mon Sep 17 00:00:00 2001 From: Hades Date: Fri, 10 May 2019 14:14:49 +0800 Subject: [PATCH 168/196] =?UTF-8?q?=E6=97=A0jira=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=94=99=E8=AF=AFimport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/SheetNameTabPane.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java index 5df1f5686..9fdc9d5a8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/SheetNameTabPane.java @@ -27,7 +27,6 @@ import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.UpdateAction; import com.fr.design.constants.UIConstants; import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.menu.MenuDef; @@ -45,7 +44,6 @@ import com.fr.report.poly.PolyWorkSheet; import com.fr.report.report.TemplateReport; import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ProductConstants; -import org.apache.tools.ant.taskdefs.Sleep; /** * NameTabPane of sheets From daf44aa345cc9a76ad48bdd4e636f6b532cf9e63 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 10 May 2019 16:42:43 +0800 Subject: [PATCH 169/196] =?UTF-8?q?REPORT-16604=20=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8-=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=97=A5=E5=BF=97=E6=8E=A8=E9=80=81-=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/com/fr/design/ui/update/push/pushUpdate.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css index 521c8cdbb..58c03ecba 100644 --- a/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css +++ b/designer-base/src/main/resources/com/fr/design/ui/update/push/pushUpdate.css @@ -5,7 +5,7 @@ body { background-size: 100% 100% !important; -moz-background-size: 100% 100% !important; - font-family: PingFangSC-Regular, Georgia, "Nimbus Roman No9 L", "Songti SC", "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif CN", STSong, "AR PL New Sung", "AR PL SungtiL GB", NSimSun, SimSun, "TW\-Sung", "WenQuanYi Bitmap Song", "AR PL UMing CN", "AR PL UMing HK", "AR PL UMing TW", "AR PL UMing TW MBE", PMingLiU, MingLiU, serif !important; + font-family: "PingFang SC", "Microsoft YaHei", "Myriad Pro", "OpenSans", Verdana, SimSun, sans-serif !important; } .close-btn { @@ -27,7 +27,7 @@ body { } .font-bold { - font-weight: bold; + font-weight: 500; } .title { From f26a81ba2de01287f3fb8086e9e0f8ddb6024e95 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 10 May 2019 17:44:23 +0800 Subject: [PATCH 170/196] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java index 9d892ba53..ff0a93fa8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionFirstRowPanel.java @@ -15,7 +15,7 @@ public class FileVersionFirstRowPanel extends JPanel { super(new BorderLayout()); Box upPane = Box.createVerticalBox(); upPane.setBorder(new EmptyBorder(5, 10, 5, 10)); - upPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Local_User"))); + upPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Current"))); add(upPane, BorderLayout.CENTER); } } From 9227466ccfee24c385c3a2adb67518420fb03747 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Fri, 10 May 2019 18:21:25 +0800 Subject: [PATCH 171/196] =?UTF-8?q?REPORT-17014=20@xiaoxia=20=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E6=97=B6=EF=BC=8C=E8=A7=A6=E5=8F=91=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E4=BF=9D=E5=AD=98=E3=80=82=E7=A6=81=E7=94=A8=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=90=8E=E6=9F=A5=E7=9C=8B=E6=A8=A1=E7=89=88=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=91=E7=8E=B0=E6=9C=89=E7=89=88=E6=9C=AC=E6=96=B0?= =?UTF-8?q?=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index bc6c4d372..98e9a330f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -164,7 +164,7 @@ public class VcsHelper implements JTemplateActionListener { */ @Override public void templateSaved(JTemplate jt) { - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && !FineClusterConfig.getInstance().isCluster()) { + if (needInit() && DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && !FineClusterConfig.getInstance().isCluster()) { fireVcs(jt); } } From 10e6adb481a826329a4a08e2a0c9748875f52da2 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 12 May 2019 00:05:48 +0800 Subject: [PATCH 172/196] =?UTF-8?q?REPORT-14835=20=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/EditFileVersionDialog.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java index 76bededaa..dba7c8bde 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -7,8 +7,11 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; +import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; @@ -81,6 +84,13 @@ public class EditFileVersionDialog extends UIDialog { entity.setCommitMsg(msgTestArea.getText()); WorkContext.getCurrent().get(VcsOperator.class).updateVersion(entity); setVisible(false); + String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); + FileVersionTable table = FileVersionTable.getInstance(); + try { + table.updateModel(table.getSelectedRow(), WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", StringUtils.EMPTY))); + } catch (Exception e1) { + FineLoggerFactory.getLogger().error(e1.getMessage()); + } } }); From 8e9457b51cd8281c758178f2a3dcc3609f5cdda9 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 12 May 2019 00:33:37 +0800 Subject: [PATCH 173/196] rt --- .../fr/design/mainframe/vcs/ui/EditFileVersionDialog.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java index dba7c8bde..105a9b872 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -86,11 +86,7 @@ public class EditFileVersionDialog extends UIDialog { setVisible(false); String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); FileVersionTable table = FileVersionTable.getInstance(); - try { - table.updateModel(table.getSelectedRow(), WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", StringUtils.EMPTY))); - } catch (Exception e1) { - FineLoggerFactory.getLogger().error(e1.getMessage()); - } + table.updateModel(table.getSelectedRow(), WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst("/", StringUtils.EMPTY))); } }); From 2f97d162d8108c47a2c4fd7db6d09e9423832613 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 12 May 2019 11:52:11 +0800 Subject: [PATCH 174/196] =?UTF-8?q?REPORT-16570=20@xiaoxia=20windows?= =?UTF-8?q?=E4=B8=8B=E6=A8=A1=E6=9D=BF=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 1 + .../com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java | 2 +- .../com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 98e9a330f..d58737627 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -44,6 +44,7 @@ public class VcsHelper implements JTemplateActionListener { public final static Icon VCS_DELETE_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_delete.png"); public final static Icon VCS_USER_PNG = IOUtils.readIcon("/com/fr/design/images/vcs/icon_user@1x.png"); public final static Icon VCS_REVERT = IOUtils.readIcon("/com/fr/design/images/vcs/icon_revert.png"); + public final static int OFFSET = 2; private final static String VCS_DIR = "vcs"; public final static String VCS_CACHE_DIR = pathJoin(VCS_DIR, "cache"); private static final int MINUTE = 60 * 1000; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java index ac525128a..125d4bc4e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellEditor.java @@ -68,7 +68,7 @@ public class FileVersionCellEditor extends AbstractCellEditor implements TableCe double height = editor.getPreferredSize().getHeight(); if (table.getRowHeight(row) != height) { - table.setRowHeight(row, (int) height); + table.setRowHeight(row, (int) height + VcsHelper.OFFSET); } return editor; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java index c1cc23fc4..40fa02c1f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionCellRender.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.vcs.ui; +import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.report.entity.VcsEntity; import javax.swing.JPanel; @@ -34,7 +35,7 @@ public class FileVersionCellRender implements TableCellRenderer { double height = editor.getPreferredSize().getHeight(); if (table.getRowHeight(row) != height) { - table.setRowHeight(row, (int) height); + table.setRowHeight(row, (int) height + VcsHelper.OFFSET); } return editor; } From ece42cfde57a328a6d91ace87843ceb6e1bc883b Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Sun, 12 May 2019 17:02:58 +0800 Subject: [PATCH 175/196] =?UTF-8?q?REPORT-14835=20=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index d58737627..fa649b66a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -115,7 +115,7 @@ public class VcsHelper implements JTemplateActionListener { public boolean needInit() { PluginContext context = PluginManager.getContext(VCS_PLUGIN_ID); - return context == null || !context.isActive(); + return context == null || !context.isRunning(); } /** From a4c3e17d919159827aac3e4358fffcbd9ee9f000 Mon Sep 17 00:00:00 2001 From: Hades Date: Sun, 12 May 2019 20:45:31 +0800 Subject: [PATCH 176/196] =?UTF-8?q?REPORT-16711=20=E3=80=9010.0.3=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E3=80=91=E6=9D=83=E9=99=90=E8=AE=BE=E7=BD=AE=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E4=BB=8E=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E5=88=87=E6=8D=A2=E5=88=B0a1=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC=20=20&&=20REPORT-16847=E3=80=90=E6=A6=82=E7=8E=87?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E3=80=91=20=E6=8C=89=E9=92=AE=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E9=94=99=E4=B9=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/gui/ibutton/UIToggleButton.java | 40 ++++++++++++++++--- .../fr/design/mainframe/ElementCasePane.java | 12 ++++-- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java index 4b8975235..9f12bd5ed 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java @@ -29,6 +29,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ private boolean isEventBannded = false; private String toggleButtonName = ""; private GlobalNameListener globalNameListener = null; + private Icon[] icons; public UIToggleButton() { this(StringUtils.EMPTY); @@ -53,9 +54,9 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ * @param icons */ public UIToggleButton(Icon[] icons) { - super(icons[0], null, icons[1]); - setSelectedIcon(icons[1]); + super(icons[0], null, null); setExtraPainted(true); + this.icons = icons; addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { @@ -73,10 +74,10 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ * @param icons */ public UIToggleButton(Icon[] icons, boolean needRelease) { - super(icons[0], null, icons[1]); + super(icons[0], null, null); setBorderPainted(true); - setSelectedIcon(icons[1]); setExtraPainted(true); + this.icons = icons; if (!needRelease) { addActionListener(new AbstractAction() { @Override @@ -92,6 +93,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ addMouseListener(getMouseListener()); } + @Override public void setGlobalName(String name){ toggleButtonName = name ; } @@ -100,6 +102,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ * * @return */ + @Override public boolean isSelected() { return isSelected; } @@ -115,9 +118,11 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ super.setSelected(isSelected); if (this.isSelected != isSelected) { this.isSelected = isSelected; - repaint(); + refresh(isSelected); } } + + @Override protected void initListener(){ if(shouldResponseChangeListener()){ this.addChangeListener(new ChangeListener() { @@ -138,10 +143,29 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ if (this.isSelected != isSelected) { this.isSelected = isSelected; fireSelectedChanged(); - repaint(); + refresh(isSelected); } } + + + private void refresh(final boolean isSelected) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + if (icons != null) { + if (isSelected) { + UIToggleButton.this.setIcon(icons[1]); + } else { + UIToggleButton.this.setIcon(icons[0]); + } + } + UIToggleButton.this.repaint(); + } + }); + } + + protected MouseListener getMouseListener() { return new MouseAdapter() { @Override @@ -157,6 +181,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ this.isEventBannded = ban; } + @Override protected void fireStateChanged() { } @@ -187,6 +212,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ } } + @Override protected void paintOtherBorder(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setStroke(UIConstants.BS); @@ -200,6 +226,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ * * @return 如果需要响应观察者事件则返回true,否则返回false */ + @Override public boolean shouldResponseChangeListener() { return true; } @@ -208,6 +235,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ * * @param listener 观察者监听事件 */ + @Override public void registerNameListener(GlobalNameListener listener) { globalNameListener = listener; } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java index db91d0a39..b16aa1b42 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java @@ -174,6 +174,7 @@ public abstract class ElementCasePane extends Tar private CellSelection cellNeedTOFormat = null; private FormatBrushAction formatBrushAction; private ActionListener keyListener = new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (!formatBrush.isSelected()) { DesignerContext.setFormatState(DesignerContext.FORMAT_STATE_ONCE); @@ -188,6 +189,7 @@ public abstract class ElementCasePane extends Tar } }; private ActionListener escKey = new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { cancelFormatBrush(); } @@ -212,6 +214,7 @@ public abstract class ElementCasePane extends Tar /** * 取消格式化 */ + @Override public void cancelFormat() { return; } @@ -240,7 +243,6 @@ public abstract class ElementCasePane extends Tar verScrollBar = new DynamicScrollBar(Adjustable.VERTICAL, this, this.resolution); horScrollBar = new DynamicScrollBar(Adjustable.HORIZONTAL, this, this.resolution); this.add(RGridLayout.VerticalBar, this.verScrollBar); -// this.add(RGridLayout.HorizontalBar, this.horScrollBar); // Init input/action map defaultly. initInputActionMap(); @@ -253,7 +255,7 @@ public abstract class ElementCasePane extends Tar initFormatBrush(); } - + @Override public int getMenuState() { return DesignState.WORK_SHEET; } @@ -265,6 +267,7 @@ public abstract class ElementCasePane extends Tar formatBrush.setSelected(DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL); formatBrush.removeActionListener(formatBrushAction); formatBrush.addMouseListener(new MouseAdapter() { + @Override public void mouseClicked(MouseEvent e) { //如果没有格式刷,点击时就是想使用格式刷 if (e.getClickCount() == 1) { @@ -528,8 +531,8 @@ public abstract class ElementCasePane extends Tar FineLoggerFactory.getLogger().info("Nothing to release"); } this.selection = selection; - fireSelectionChanged(); } + fireSelectionChanged(); } @@ -1210,6 +1213,7 @@ public abstract class ElementCasePane extends Tar /** * 请求焦点 */ + @Override public void requestFocus() { super.requestFocus(); this.getGrid().requestFocus(); @@ -1338,6 +1342,7 @@ public abstract class ElementCasePane extends Tar * * @return 返回正在编辑的状态. */ + @Override public EditingState createEditingState() { return new ElementCaseEditingState(this.selection, this.verScrollBar.getValue(), this.horScrollBar.getValue(), this.resolution); } @@ -1380,7 +1385,6 @@ public abstract class ElementCasePane extends Tar ElementCasePane.this.getVerticalScrollBar().setValue(this.verticalValue); ElementCasePane.this.getHorizontalScrollBar().setValue(this.horizontalValue); -// ElementCasePane.this.setResolution(this.resolution); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setScale(this.resolution); // 重绘. ElementCasePane.this.repaint(); From 9a06cbb35ee87ed754a9a7c68872f92136fb678d Mon Sep 17 00:00:00 2001 From: Hades Date: Sun, 12 May 2019 21:19:04 +0800 Subject: [PATCH 177/196] update --- .../main/java/com/fr/design/gui/ibutton/UIToggleButton.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java index 9f12bd5ed..12f39a7ab 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java @@ -30,6 +30,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ private String toggleButtonName = ""; private GlobalNameListener globalNameListener = null; private Icon[] icons; + private final int ICON_COUNT = 2; public UIToggleButton() { this(StringUtils.EMPTY); @@ -126,6 +127,7 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ protected void initListener(){ if(shouldResponseChangeListener()){ this.addChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent e) { if (uiObserverListener == null) { return; @@ -153,7 +155,8 @@ public class UIToggleButton extends UIButton implements GlobalNameObserver{ SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - if (icons != null) { + Icon[] icons = UIToggleButton.this.icons; + if (icons != null && icons.length == ICON_COUNT) { if (isSelected) { UIToggleButton.this.setIcon(icons[1]); } else { From 85fa5185eb7e509b963e9ed1561e96c0cce6cc48 Mon Sep 17 00:00:00 2001 From: Hades Date: Mon, 13 May 2019 09:53:32 +0800 Subject: [PATCH 178/196] update --- .../main/java/com/fr/design/gui/ibutton/UIToggleButton.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java index 12f39a7ab..cf932be41 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java @@ -25,12 +25,13 @@ import com.fr.stable.StringUtils; * @since 2012-5-11下午4:28:24 */ public class UIToggleButton extends UIButton implements GlobalNameObserver{ + + private final int ICON_COUNT = 2; private boolean isSelected; private boolean isEventBannded = false; private String toggleButtonName = ""; private GlobalNameListener globalNameListener = null; private Icon[] icons; - private final int ICON_COUNT = 2; public UIToggleButton() { this(StringUtils.EMPTY); From 4570299e84014a098e8623f9c3b7fc9b3f125eec Mon Sep 17 00:00:00 2001 From: Hades Date: Mon, 13 May 2019 10:08:06 +0800 Subject: [PATCH 179/196] update --- .../src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java index cf932be41..45c878419 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIToggleButton.java @@ -26,7 +26,7 @@ import com.fr.stable.StringUtils; */ public class UIToggleButton extends UIButton implements GlobalNameObserver{ - private final int ICON_COUNT = 2; + private static final int ICON_COUNT = 2; private boolean isSelected; private boolean isEventBannded = false; private String toggleButtonName = ""; From a27d8abd0fe26a1f836b77f2df204324f9a861be Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Mon, 13 May 2019 10:27:52 +0800 Subject: [PATCH 180/196] =?UTF-8?q?REPORT-14835=20=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/actions/file/PreferenceAction.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java index eb652abb8..08273202d 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferenceAction.java @@ -4,9 +4,10 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrame; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; import com.fr.design.menu.KeySetUtils; @@ -38,9 +39,10 @@ public class PreferenceAction extends UpdateAction { preferencePane.update(DesignerEnvManager.getEnvManager()); DesignerEnvManager.loadLogSetting(); DesignerEnvManager.getEnvManager().saveXMLFile(); - JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); jt.refreshToolArea(); preferencePane.showRestartDialog(); + DesignerFrameFileDealerPane.getInstance().refreshDockingView(); } }); From d3379ae2561e99426c4dcef6da949f984a49b557 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 13 May 2019 16:59:34 +0800 Subject: [PATCH 181/196] =?UTF-8?q?REPORT-15987=20=E8=BF=99=E8=BE=B9?= =?UTF-8?q?=E4=B9=9F=E4=B8=80=E8=B5=B7=E6=94=B9=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/mobile/ui/DownMenuStyleDefinePane.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/DownMenuStyleDefinePane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/DownMenuStyleDefinePane.java index ff76e5fed..c5e19e881 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/DownMenuStyleDefinePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/DownMenuStyleDefinePane.java @@ -2,7 +2,6 @@ package com.fr.design.mainframe.mobile.ui; import com.fr.base.GraphHelper; import com.fr.base.Icon; -import com.fr.base.IconManager; import com.fr.design.constants.LayoutConstants; import com.fr.design.designer.IntervalConstants; import com.fr.design.gui.ilable.UILabel; @@ -11,6 +10,7 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.widget.UITitleSplitLine; import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.WidgetInfoConfig; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.FRFont; import com.fr.general.cardtag.mobile.DownMenuStyle; @@ -40,6 +40,7 @@ public class DownMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { super(tagLayout); } + @Override protected void createExtraConfPane(JPanel centerPane) { JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0); panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); @@ -134,12 +135,13 @@ public class DownMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { private static final int GAP = 6; private static final String PAINT_ICON = "fund_white"; private static final String ICON_PATH = "/com/fr/web/images/fund_white.png"; - private LineDescription splitLine; + private transient LineDescription splitLine; public DownMenuStylePreviewPane() { this.setBackground(Color.decode("#3888EE")); } + @Override public void repaint() { super.repaint(); } @@ -172,7 +174,7 @@ public class DownMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { g2d.setColor(oldColor); } Icon icon = new Icon(PAINT_ICON, ICON_PATH); - g2d.drawImage(IconManager.getIconManager().getDefaultIconImage(icon), (eachWidth - ICON_OFFSET) / 2, (panelHeight - ICON_OFFSET - GAP - fontHeight) / 2, null); + g2d.drawImage(WidgetInfoConfig.getInstance().getIconManager().getDefaultIconImage(icon), (eachWidth - ICON_OFFSET) / 2, (panelHeight - ICON_OFFSET - GAP - fontHeight) / 2, null); g2d.drawString(displayName, (eachWidth - width) / 2, (panelHeight + ICON_OFFSET + GAP - fontHeight) / 2 + ascent); Stroke oldStroke = g2d.getStroke(); if (splitLine.getLineStyle() != 0) { @@ -187,6 +189,7 @@ public class DownMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { } + @Override public void populateConfig(MobileTemplateStyle templateStyle) { super.populateConfig(templateStyle); this.splitLine = ((DownMenuStyle) templateStyle).getSplitLine(); From 7a177b1ad15fb53314126819548ea482d0773085 Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Tue, 14 May 2019 14:56:27 +0800 Subject: [PATCH 182/196] =?UTF-8?q?encode=E4=B8=80=E4=B8=8B=EF=BC=8C?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/messagecollect/entity/FileEntityBuilder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index 99ba2c5f7..9071902ce 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -21,6 +21,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.net.URLEncoder; import java.util.HashMap; import java.util.UUID; @@ -120,7 +121,7 @@ public class FileEntityBuilder { try { HashMap params = new HashMap<>(); params.put("topic", FOCUS_POINT_FILE_UPLOAD_TOPIC); - params.put("username", userName); + params.put("username", URLEncoder.encode(userName, EncodeConstants.ENCODING_UTF_8)); params.put("uuid", uuid); params.put("filepath", filePath); params.put("timestamp", String.valueOf(System.currentTimeMillis())); From 3681e3910eb67f0758a81f427f8283f0122dbc7b Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Tue, 14 May 2019 15:21:55 +0800 Subject: [PATCH 183/196] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=8Btopic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/messagecollect/entity/FileEntityBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java index 9071902ce..c8ac3b32c 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/entity/FileEntityBuilder.java @@ -32,7 +32,7 @@ import java.util.UUID; public class FileEntityBuilder { private static final String FOCUS_POINT_FILE_ROOT_PATH = "FocusPoint"; - private static final String FOCUS_POINT_FILE_UPLOAD_TOPIC = "__fine_intelli_treasure_upload__"; + private static final String FOCUS_POINT_FILE_UPLOAD_TOPIC = "__fine_intelli_file_upload__"; private static final String FILE_FROM = "design"; private static final String FOCUS_POINT_FILE_UPLOAD_TYPE = "FocusPoint"; private static final String FOCUS_POINT_FILE_UPLOAD_URL = CloudCenter.getInstance().acquireUrlByKind("design.feedback"); From fe470dd49138ef5002c78dd3f125fa17cad59353 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Tue, 14 May 2019 16:43:33 +0800 Subject: [PATCH 184/196] =?UTF-8?q?REPORT-16997=20FileExtension=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8E=A5=E5=8F=A3=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itree/filetree/TemplateFileTree.java | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java index ebbb78470..a76b353ab 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -1,6 +1,7 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; +import com.fr.base.FileExtensionProvider; import com.fr.base.extension.FileExtension; import com.fr.design.ExtraDesignClassManager; import com.fr.design.file.NodeAuthProcessor; @@ -16,7 +17,6 @@ import javax.swing.text.Position; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -129,15 +129,15 @@ public class TemplateFileTree extends EnvFileTree { public FileNode[] listFile(String path) { // 支持插件扩展, 先从env的filter拿, 再从插件拿 - Set supportTypes = createFileExtensionFilter(); + Set supportTypes = createFileExtensionFilter(); return FRContext.getFileNodes().list( path, - supportTypes.toArray(new FileExtension[supportTypes.size()]) + supportTypes.toArray(new FileExtensionProvider[supportTypes.size()]) ); } - private Set createFileExtensionFilter() { - Set supportTypes = new HashSet(); + private Set createFileExtensionFilter() { + Set supportTypes = new HashSet(); if (filter != null) { for (String temp : filter.getSupportedTypes()) { supportTypes.add(FileExtension.parse(temp)); @@ -228,17 +228,6 @@ public class TemplateFileTree extends EnvFileTree { if (fileNodes == null) { fileNodes = new FileNode[0]; } - // FileNodeFilter过滤 - if (filter != null) { - List list = new ArrayList(); - for (FileNode fileNode : fileNodes) { - if (filter.accept(fileNode)) { - list.add(fileNode); - } - } - fileNodes = list.toArray(new FileNode[list.size()]); - } - Arrays.sort(fileNodes, new FileNodeComparator(FRContext.getFileNodes().getSupportedTypes())); return fileNodes; } From f50ea66fa0691efa8f27f1130b098f42e5cbe4ce Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Tue, 14 May 2019 17:37:31 +0800 Subject: [PATCH 185/196] =?UTF-8?q?=E8=AF=AF=E5=88=A0=E4=BA=86sort?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/itree/filetree/TemplateFileTree.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java index a76b353ab..a52e33440 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -17,6 +17,7 @@ import javax.swing.text.Position; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -228,6 +229,7 @@ public class TemplateFileTree extends EnvFileTree { if (fileNodes == null) { fileNodes = new FileNode[0]; } + Arrays.sort(fileNodes, new FileNodeComparator(FRContext.getFileNodes().getSupportedTypes())); return fileNodes; } From a369005330f469dbb72521d4e05bfce2e52c9379 Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Tue, 14 May 2019 18:20:33 +0800 Subject: [PATCH 186/196] =?UTF-8?q?=E4=BE=9D=E7=84=B6=E4=BD=BF=E7=94=A8Fil?= =?UTF-8?q?eExtension?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/gui/itree/filetree/TemplateFileTree.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java index a52e33440..51af636aa 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -1,7 +1,6 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; -import com.fr.base.FileExtensionProvider; import com.fr.base.extension.FileExtension; import com.fr.design.ExtraDesignClassManager; import com.fr.design.file.NodeAuthProcessor; @@ -130,15 +129,15 @@ public class TemplateFileTree extends EnvFileTree { public FileNode[] listFile(String path) { // 支持插件扩展, 先从env的filter拿, 再从插件拿 - Set supportTypes = createFileExtensionFilter(); + Set supportTypes = createFileExtensionFilter(); return FRContext.getFileNodes().list( path, - supportTypes.toArray(new FileExtensionProvider[supportTypes.size()]) + supportTypes.toArray(new FileExtension[supportTypes.size()]) ); } - private Set createFileExtensionFilter() { - Set supportTypes = new HashSet(); + private Set createFileExtensionFilter() { + Set supportTypes = new HashSet(); if (filter != null) { for (String temp : filter.getSupportedTypes()) { supportTypes.add(FileExtension.parse(temp)); From 2a11a0f3d621d96021c8af0eab750d0106828f6a Mon Sep 17 00:00:00 2001 From: Hades Date: Wed, 15 May 2019 09:41:15 +0800 Subject: [PATCH 187/196] =?UTF-8?q?REPORT-16029=20=E7=B9=81=E4=BD=93?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=90=AF=E5=8A=A8=E7=94=BB=E9=9D=A2=E6=94=B9?= =?UTF-8?q?=E6=88=90=E8=8B=B1=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-realize/src/main/java/com/fr/start/SplashContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/start/SplashContext.java b/designer-realize/src/main/java/com/fr/start/SplashContext.java index cea537592..17eff62ba 100644 --- a/designer-realize/src/main/java/com/fr/start/SplashContext.java +++ b/designer-realize/src/main/java/com/fr/start/SplashContext.java @@ -167,7 +167,7 @@ public class SplashContext { private static String getSplashPath() { Locale locale = DesignerEnvManager.getEnvManager().getLanguage(); - if (Locale.US.equals(locale) || Locale.KOREA.equals(locale)) { + if (Locale.US.equals(locale) || Locale.KOREA.equals(locale) || Locale.TAIWAN.equals(locale)) { return "/com/fr/design/images/splash_10_en.gif"; } else if (Locale.JAPAN.equals(locale)) { return "/com/fr/design/images/splash_10_jp.gif"; From ee69c71bb9603cd00a2e03399a3754567f31ed88 Mon Sep 17 00:00:00 2001 From: Hades Date: Wed, 15 May 2019 11:06:54 +0800 Subject: [PATCH 188/196] =?UTF-8?q?REPORT-16567=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E7=A4=BE=E5=8C=BA=E8=8F=9C=E5=8D=95=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E6=96=B0=E5=AD=90=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/community/FacebookFansAction.java | 41 ++++++++++++++++++ .../mainframe/toolbar/ToolBarMenuDock.java | 5 ++- .../com/fr/design/images/bbs/facebook.png | Bin 0 -> 484 bytes 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/bbs/facebook.png diff --git a/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java b/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java new file mode 100644 index 000000000..9ab799bcc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/actions/community/FacebookFansAction.java @@ -0,0 +1,41 @@ +package com.fr.design.actions.community; + +import com.fr.design.menu.MenuKeySet; +import com.fr.design.utils.BrowseUtils; +import com.fr.general.CloudCenter; +import com.fr.general.IOUtils; + +import javax.swing.KeyStroke; +import java.awt.event.ActionEvent; + +public class FacebookFansAction extends UpAction { + + public FacebookFansAction() { + this.setMenuKeySet(FACEBOOKFANS); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/bbs/facebook.png")); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + BrowseUtils.browser(CloudCenter.getInstance().acquireUrlByKind("facebook.fans.tw")); + } + + public static final MenuKeySet FACEBOOKFANS = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'F'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community_FaceBook_Fans"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index c26dce9a0..7e0d6b359 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -13,6 +13,7 @@ import com.fr.design.actions.community.BBSAction; import com.fr.design.actions.community.BugAction; import com.fr.design.actions.community.CenterAction; import com.fr.design.actions.community.CusDemandAction; +import com.fr.design.actions.community.FacebookFansAction; import com.fr.design.actions.community.NeedAction; import com.fr.design.actions.community.QuestionAction; import com.fr.design.actions.community.SignAction; @@ -151,7 +152,6 @@ public abstract class ToolBarMenuDock { } }; - private static final String FINEREPORT = "FineReport"; private static final int MENUBAR_HEIGHT = 22; private static final List PLUGIN_LISTENERS = new ArrayList<>(); @@ -543,6 +543,9 @@ public abstract class ToolBarMenuDock { shortCuts.add(new CusDemandAction()); shortCuts.add(new CenterAction()); shortCuts.add(new SignAction()); + if (Locale.TAIWAN.equals(GeneralContext.getLocale())) { + shortCuts.add(new FacebookFansAction()); + } return shortCuts.toArray(new ShortCut[shortCuts.size()]); } diff --git a/designer-base/src/main/resources/com/fr/design/images/bbs/facebook.png b/designer-base/src/main/resources/com/fr/design/images/bbs/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5dc8af2c50e3b75eff0af050bb794e5455dc32 GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|Vb-5N14{zaj-F$X?><>&pI^m7hsl_ExE62~g;|r;B5V#`)ZfhThDM0;~`6 z`CWCLtaOz%SPsrlNK8#m&em_5n(H9&M|{$y_yqBTW~El%8!zm>*5P{K#ah>QS8jjy z{rYV0+{)7zj7>zNL#xa#Bxd~U-?PGe`N5EIVflM!*S_L%i&|fl{;SIGjLTzHO}BNd zv#*J5$vxqEJ1;k~QD>sM+Kipw74)LcvWPpS?hWcX_Ohk6I->mDf^Ez8?>MqUO_QmvAUQh^kMk%6J5u7Rnpp=pSLk(G(Dm64^kfq|8Q k!S9Tnz)(igkei>9nO2EgLzgL|1yBQnr>mdKI;Vst093lG5&!@I literal 0 HcmV?d00001 From 14d0e324a2475310989540d28b767c9794ce6861 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 15 May 2019 11:10:46 +0800 Subject: [PATCH 189/196] =?UTF-8?q?REPORT-16985=20=E5=85=88=E5=B1=8F?= =?UTF-8?q?=E8=94=BD=E5=BC=80=E5=8F=91=E8=80=85=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/file/PreferencePane.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 4aee1941b..7afc21d31 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -186,11 +186,11 @@ public class PreferencePane extends BasicPane { JPanel oraclePane = FRGUIPaneFactory.createTitledBorderPane("Oracle" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Oracle_All_Tables")); oracleSpace = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Show_All_Oracle_Tables")); oraclePane.add(oracleSpace); - - JPanel debuggerPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Basic_Develop_Tools")); - openDebugComboBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Open_Debug_Window")); - debuggerPane.add(openDebugComboBox, BorderLayout.CENTER); - advancePane.add(debuggerPane); +// +// JPanel debuggerPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Basic_Develop_Tools")); +// openDebugComboBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Open_Debug_Window")); +// debuggerPane.add(openDebugComboBox, BorderLayout.CENTER); +// advancePane.add(debuggerPane); JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager")); useOptimizedUPMCheckbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager")); @@ -636,7 +636,7 @@ public class PreferencePane extends BasicPane { this.portEditor.setValue(new Integer(designerEnvManager.getEmbedServerPort())); - openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); +// openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM()); this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); @@ -702,7 +702,7 @@ public class PreferencePane extends BasicPane { designerEnvManager.setJettyServerPort(portEditor.getValue().intValue()); - designerEnvManager.setOpenDebug(openDebugComboBox.isSelected()); +// designerEnvManager.setOpenDebug(openDebugComboBox.isSelected()); designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected()); designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue()); From 0fdc1233d99cde0538567a6776ab1565661bbaec Mon Sep 17 00:00:00 2001 From: Hades Date: Wed, 15 May 2019 11:44:03 +0800 Subject: [PATCH 190/196] =?UTF-8?q?REPORT-17096=20=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=88=B010.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/gui/style/AlignmentPane.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java b/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java index 11fbaf8c8..9bbca6d2b 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/AlignmentPane.java @@ -20,8 +20,10 @@ import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.event.EventDispatcher; import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; import com.fr.plugin.ExtraClassManager; import com.fr.plugin.context.PluginContext; import com.fr.plugin.manage.PluginFilter; @@ -94,11 +96,11 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO imageLayoutComboBox = new UIComboBox(LAYOUT); initTextRotationCombox(); - Icon[][] hAlignmentIconArray = {{BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal_white.png")}, - {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal_white.png")}, - {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal_white.png")}, - {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_s_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_s_normal_white.png")}, - {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/defaultAlignment.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/defaultAlignment_white.png")}}; + Icon[][] hAlignmentIconArray = {{IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal_white.png")}, + {IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal_white.png")}, + {IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal_white.png")}, + {IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_s_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_s_normal_white.png")}, + {IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/defaultAlignment.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/defaultAlignment_white.png")}}; Integer[] hAlignment = new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT, Integer.valueOf(Constants.DISTRIBUTED), Constants.NULL}; hAlignmentPane = new UIButtonGroup(hAlignmentIconArray, hAlignment); hAlignmentPane.setAllToolTips(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Tooltips_Left"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Tooltips_Center"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Tooltips_Right"), @@ -106,9 +108,9 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO hPaneContainer = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); vPaneContainer = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); - Icon[][] vAlignmentIconArray = {{BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_top_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_top_normal_white.png")}, - {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_center_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_center_normal_white.png")}, - {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_down_normal.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_down_normal_white.png")}}; + Icon[][] vAlignmentIconArray = {{IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_top_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_top_normal_white.png")}, + {IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_center_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_center_normal_white.png")}, + {IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_down_normal.png"), IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/v_down_normal_white.png")}}; Integer[] vAlignment = new Integer[]{Constants.TOP, Constants.CENTER, Constants.BOTTOM}; vAlignmentPane = new UIButtonGroup(vAlignmentIconArray, vAlignment); vAlignmentPane.setAllToolTips(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Tooltips_Top"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Tooltips_Center"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Tooltips_Bottom")}); @@ -210,9 +212,11 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO private JPanel basicPane() { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; + UILabel horizontalLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Pane_Horizontal") + " ", SwingConstants.LEFT); + UIComponentUtils.setLineWrap(horizontalLabel); Component[][] components = new Component[][]{ new Component[]{null, null}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Pane_Horizontal") + " ", SwingConstants.LEFT), hPaneContainer}, + new Component[]{horizontalLabel, hPaneContainer}, new Component[]{null, null}, new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Pane_Vertical") + " ", SwingConstants.RIGHT), vPaneContainer}, new Component[]{null, null} @@ -304,6 +308,7 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO * * @param style the new style. */ + @Override public void populateBean(Style style) { hAlignmentPane.setSelectedItem(BaseUtils.getAlignment4Horizontal(style)); vAlignmentPane.setSelectedItem(style.getVerticalAlignment()); From e83ea53ce116a7df078d0a1ae15e3c47a1b608b1 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 15 May 2019 15:13:03 +0800 Subject: [PATCH 191/196] =?UTF-8?q?REPORT-14835=20=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E8=87=AA=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/date/SingleObjectComboBoxModel.java | 4 +- .../com/fr/design/gui/date/UIDatePicker.java | 16 +++- .../design/mainframe/vcs/ui/ActionLabel.java | 79 +++++++++++++++++++ 3 files changed, 94 insertions(+), 5 deletions(-) create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java diff --git a/designer-base/src/main/java/com/fr/design/gui/date/SingleObjectComboBoxModel.java b/designer-base/src/main/java/com/fr/design/gui/date/SingleObjectComboBoxModel.java index 788d1104e..62cf79347 100644 --- a/designer-base/src/main/java/com/fr/design/gui/date/SingleObjectComboBoxModel.java +++ b/designer-base/src/main/java/com/fr/design/gui/date/SingleObjectComboBoxModel.java @@ -1,6 +1,7 @@ package com.fr.design.gui.date; import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; @@ -9,7 +10,7 @@ import java.util.Date; public class SingleObjectComboBoxModel extends AbstractListModel implements ComboBoxModel { private SimpleDateFormat dateFormat; - private String selectedDate = ""; + private String selectedDate = StringUtils.EMPTY; public SingleObjectComboBoxModel() { } @@ -28,6 +29,7 @@ public class SingleObjectComboBoxModel extends AbstractListModel implements Comb public void setSelectedItem(Object anItem) { if (anItem == null) { + selectedDate = StringUtils.EMPTY; return; } if (anItem instanceof Date) { diff --git a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java index aa9cabd49..a48f5a59d 100644 --- a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java +++ b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java @@ -6,6 +6,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.JComboBox; @@ -156,8 +157,12 @@ public class UIDatePicker extends UIComboBox implements Serializable { /** * 设置当前选择的日期 */ - public void setSelectedDate(Date date) throws ParseException { - this.setSelectedItem(dateFormat.format(date)); + public void setSelectedDate(Date date) { + if (date == null) { + this.setSelectedItem(null); + } else { + this.setSelectedItem(dateFormat.format(date)); + } } public void setSelectedItem(Object anObject) { @@ -215,8 +220,11 @@ public class UIDatePicker extends UIComboBox implements Serializable { try { String strDate = comboBox.getSelectedItem().toString(); synchronized (this) { - Date selectionDate = dateFormat.parse(strDate); - calendarPanel.setSelectedDate(selectionDate); + Date selectionDate = new Date(); + if (StringUtils.isNotBlank(strDate)) { + selectionDate = dateFormat.parse(strDate); + } + calendarPanel.setSelectedDate(selectionDate); calendarPanel.updateHMS(); } } catch (Exception e) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java new file mode 100755 index 000000000..973846bc5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java @@ -0,0 +1,79 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.gui.ilable.UILabel; + +import javax.swing.event.MouseInputAdapter; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; + +/** + * Action label + */ +public class ActionLabel extends UILabel { + private ActionListener actionListener; + private Color color; + + private MouseInputAdapter mouseInputAdapter = new MouseInputAdapter() { + public void mouseClicked(MouseEvent e) { + } + + public void mousePressed(MouseEvent e) { + } + + public void mouseReleased(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + //Action. + if (actionListener != null) { + ActionEvent actionEvent = new ActionEvent(source, 99, ""); + actionListener.actionPerformed(actionEvent); + } + } + } + + public void mouseEntered(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + ((UILabel) source).setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + } + + public void mouseExited(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + ((UILabel) source).setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + } + } + + public void mouseDragged(MouseEvent e) { + } + + public void mouseMoved(MouseEvent evt) { + Object source = evt.getSource(); + + if (source instanceof UILabel) { + ((UILabel) source).setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + } + }; + + public ActionLabel(String text, Color color) { + super(text); + + this.color = color; + this.setForeground(color); + this.addMouseListener(mouseInputAdapter); + this.addMouseMotionListener(mouseInputAdapter); + } + + public void addActionListener(ActionListener actionListener) { + this.actionListener = actionListener; + } + +} \ No newline at end of file From 095c0745f1bad9a1bf8496ae7b14e00eab01c9d1 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 15 May 2019 15:14:31 +0800 Subject: [PATCH 192/196] rt --- .../src/main/java/com/fr/design/gui/date/UIDatePicker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java index a48f5a59d..fb44f618f 100644 --- a/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java +++ b/designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java @@ -157,7 +157,7 @@ public class UIDatePicker extends UIComboBox implements Serializable { /** * 设置当前选择的日期 */ - public void setSelectedDate(Date date) { + public void setSelectedDate(Date date) throws ParseException { if (date == null) { this.setSelectedItem(null); } else { From 46f5da34b9e6e47c4587cbce3d4998f445894b27 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 15 May 2019 15:19:50 +0800 Subject: [PATCH 193/196] =?UTF-8?q?=E4=BF=AE=E6=94=B9editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/editor/editor/DateEditor.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java index 3b1abe6f0..c40161ba6 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java @@ -153,6 +153,10 @@ public class DateEditor extends Editor { this.uiDatePicker.setSelectedItem(new Date()); } + public UIDatePicker getUiDatePicker() { + return uiDatePicker; + } + /** * Request focus */ From 59cb8283b705161e915df771e6475c246c5e69cc Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 15 May 2019 15:36:27 +0800 Subject: [PATCH 194/196] =?UTF-8?q?REPORT-14835=20=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/vcs/ui/FileVersionDialog.java | 31 ++++++++++++---- .../mainframe/vcs/ui/VcsDateEditor.java | 37 +++++++++++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsDateEditor.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 33076a07f..96232b7bc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.vcs.ui; +import com.fr.analysis.cloud.DateUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.editor.editor.DateEditor; import com.fr.design.gui.date.UIDatePicker; @@ -14,6 +15,7 @@ import com.fr.workspace.WorkContext; import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.AbstractAction; +import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JPanel; import java.awt.BorderLayout; @@ -45,7 +47,7 @@ public class FileVersionDialog extends UIDialog { upBox.setBorder(VcsHelper.EMPTY_BORDER); upBox.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_buildTime") + " ")); upBox.add(Box.createHorizontalGlue()); - dateEditor = new DateEditor(new Date(), true, StringUtils.EMPTY, UIDatePicker.STYLE_CN_DATE1); + dateEditor = new VcsDateEditor(new Date(), true, StringUtils.EMPTY, UIDatePicker.STYLE_CN_DATE1); upBox.add(dateEditor); Box downBox = Box.createHorizontalBox(); downBox.setBorder(VcsHelper.EMPTY_BORDER); @@ -62,8 +64,10 @@ public class FileVersionDialog extends UIDialog { @Override public void actionPerformed(ActionEvent e) { FileVersionDialog.this.setVisible(false); - Date date = dateEditor.getValue(); - List vcsEntities = WorkContext.getCurrent().get(VcsOperator.class).getFilterVersions(fileName, date, new Date(date.getTime() + DELAY), textField.getText()); + Date editorDate = dateEditor.getValue(); + Date start = editorDate == null ? new Date(0) : editorDate; + Date end = editorDate == null ? DateUtils.getLastHour() : new Date(start.getTime() + DELAY); + List vcsEntities = WorkContext.getCurrent().get(VcsOperator.class).getFilterVersions(fileName, start, end, textField.getText()); FileVersionTable.getInstance().updateModel(1, vcsEntities); } @@ -74,16 +78,29 @@ public class FileVersionDialog extends UIDialog { FileVersionDialog.this.setVisible(false); } }); + ActionLabel resetLabel = new ActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_resetValue"), VcsHelper.COPY_VERSION_BTN_COLOR); + resetLabel.setBorder(BorderFactory.createEmptyBorder(10, 160, 0, 10)); + resetLabel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dateEditor.setValue(null); + textField.setText(null); + FileVersionDialog.this.repaint(); + } + }); panel.add(upBox, BorderLayout.NORTH); panel.add(downBox, BorderLayout.CENTER); panel.add(buttonPane, BorderLayout.SOUTH); - add(panel); - setSize(new Dimension(230, 105)); - centerWindow(this); + JPanel filterPane = new JPanel(new BorderLayout()); + filterPane.add(resetLabel, BorderLayout.NORTH); + filterPane.add(panel, BorderLayout.CENTER); + add(filterPane); + setSize(new Dimension(230, 125)); + centerWindow(frame); } private void centerWindow(Window window) { - window.setLocation(0, 95); + this.setLocation(window.getX(), 95); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsDateEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsDateEditor.java new file mode 100644 index 000000000..74b65ecfe --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsDateEditor.java @@ -0,0 +1,37 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.editor.editor.DateEditor; +import com.fr.log.FineLoggerFactory; + +import java.text.ParseException; +import java.util.Date; + +/** + * Created by XiaXiang on 2019/5/14. + */ +public class VcsDateEditor extends DateEditor { + private Date tempValue; + + public VcsDateEditor(Date value, boolean format, String name, int dateFormat) { + super(value, format, name, dateFormat); + this.tempValue = value; + } + + @Override + public Date getValue() { + if (tempValue == null) { + return null; + } + return super.getValue(); + } + + @Override + public void setValue(Date value) { + this.tempValue = value; + try { + getUiDatePicker().setSelectedDate(value); + } catch (ParseException parseException) { + FineLoggerFactory.getLogger().error(parseException.getMessage(), parseException); + } + } +} From e20989d81d11a4cca4122d41670f55ed4a57d769 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 15 May 2019 15:38:44 +0800 Subject: [PATCH 195/196] rt --- .../java/com/fr/design/mainframe/vcs/ui/ActionLabel.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java index 973846bc5..eb9f2ddba 100755 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java @@ -10,7 +10,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; /** - * Action label + * Created by XiaXiang on 2019/5/15. */ public class ActionLabel extends UILabel { private ActionListener actionListener; @@ -76,4 +76,11 @@ public class ActionLabel extends UILabel { this.actionListener = actionListener; } + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } } \ No newline at end of file From bfb5abfc0db3684895511452123d9c991a8ae0e4 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 15 May 2019 16:01:13 +0800 Subject: [PATCH 196/196] =?UTF-8?q?=E6=94=B9=E4=B8=80=E4=B8=8Blabel=20?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=20=E4=B8=8Bactionlabel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/ActionLabel.java | 86 ------------------- .../mainframe/vcs/ui/FileVersionDialog.java | 2 +- .../fr/design/mainframe/vcs/ui/VcsLabel.java | 32 +++++++ 3 files changed, 33 insertions(+), 87 deletions(-) delete mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java create mode 100755 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsLabel.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java deleted file mode 100755 index eb9f2ddba..000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ActionLabel.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.fr.design.mainframe.vcs.ui; - -import com.fr.design.gui.ilable.UILabel; - -import javax.swing.event.MouseInputAdapter; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; - -/** - * Created by XiaXiang on 2019/5/15. - */ -public class ActionLabel extends UILabel { - private ActionListener actionListener; - private Color color; - - private MouseInputAdapter mouseInputAdapter = new MouseInputAdapter() { - public void mouseClicked(MouseEvent e) { - } - - public void mousePressed(MouseEvent e) { - } - - public void mouseReleased(MouseEvent evt) { - Object source = evt.getSource(); - - if (source instanceof UILabel) { - //Action. - if (actionListener != null) { - ActionEvent actionEvent = new ActionEvent(source, 99, ""); - actionListener.actionPerformed(actionEvent); - } - } - } - - public void mouseEntered(MouseEvent evt) { - Object source = evt.getSource(); - - if (source instanceof UILabel) { - ((UILabel) source).setCursor(new Cursor(Cursor.HAND_CURSOR)); - } - } - - public void mouseExited(MouseEvent evt) { - Object source = evt.getSource(); - - if (source instanceof UILabel) { - ((UILabel) source).setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - } - } - - public void mouseDragged(MouseEvent e) { - } - - public void mouseMoved(MouseEvent evt) { - Object source = evt.getSource(); - - if (source instanceof UILabel) { - ((UILabel) source).setCursor(new Cursor(Cursor.HAND_CURSOR)); - } - } - }; - - public ActionLabel(String text, Color color) { - super(text); - - this.color = color; - this.setForeground(color); - this.addMouseListener(mouseInputAdapter); - this.addMouseMotionListener(mouseInputAdapter); - } - - public void addActionListener(ActionListener actionListener) { - this.actionListener = actionListener; - } - - public Color getColor() { - return color; - } - - public void setColor(Color color) { - this.color = color; - } -} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java index 96232b7bc..15d8bae63 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionDialog.java @@ -78,7 +78,7 @@ public class FileVersionDialog extends UIDialog { FileVersionDialog.this.setVisible(false); } }); - ActionLabel resetLabel = new ActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_resetValue"), VcsHelper.COPY_VERSION_BTN_COLOR); + VcsLabel resetLabel = new VcsLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_resetValue"), VcsHelper.COPY_VERSION_BTN_COLOR); resetLabel.setBorder(BorderFactory.createEmptyBorder(10, 160, 0, 10)); resetLabel.addActionListener(new ActionListener() { @Override diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsLabel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsLabel.java new file mode 100755 index 000000000..a0180a137 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsLabel.java @@ -0,0 +1,32 @@ +package com.fr.design.mainframe.vcs.ui; + + +import com.fr.design.gui.ilable.ActionLabel; +import com.fr.design.gui.ilable.UILabel; + +import java.awt.Color; +import java.awt.Graphics; + +/** + * Created by XiaXiang on 2019/5/15. + */ +public class VcsLabel extends ActionLabel { + + + public VcsLabel(String text, Color color) { + super(text); + this.setForeground(color); + } + + public void paintComponent(Graphics g) { + if (ui != null) { + Graphics scratchGraphics = (g == null) ? null : g.create(); + try { + ui.update(scratchGraphics, this); + } + finally { + scratchGraphics.dispose(); + } + } + } +} \ No newline at end of file