Browse Source

Merge pull request #4667 in DESIGN/design from bugfix/10.0 to feature/10.0

* commit 'bd2cdbb7544446dc4995773a69b76bccd5e0b89c':
  代码修改
  代码修改
  增加username参数
  REPORT-53647【组件复用涉及到登录相关功能】设计器本身是没有登录的,换成最新的nightly后,打开设计器后无论是否登录,下载在线组件都会提示失败@lanla
  REPORT-53873 设计器用户登录策略调整-消息提醒-消息提醒框弹出位置
  REPORT-53873 设计器用户登录策略调整-消息提醒-消息提醒框弹出位置
feature/10.0
superman 3 years ago
parent
commit
156b0b9f23
  1. 2
      designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
  2. 81
      designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java
  3. 4
      designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java
  4. 11
      designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java
  5. 6
      designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java
  6. 2
      designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java
  7. 0
      designer-base/src/main/resources/com/fr/design/notification/ui/notificationCenter.png
  8. 0
      designer-base/src/main/resources/com/fr/design/notification/ui/notificationCenterDot.png
  9. 62
      designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java

2
designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java

@ -17,6 +17,7 @@ import com.fr.design.file.TemplateTreePane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.notification.NotificationCenter;
import com.fr.design.utils.DesignUtils;
import com.fr.design.versioncheck.VersionCheckUtils;
import com.fr.env.EnvListPane;
@ -182,6 +183,7 @@ public class EnvChangeEntrance {
if (model != null) {
model.envChanged();
}
NotificationCenter.getInstance().clearAllNotifications();
return true;
}

81
designer-base/src/main/java/com/fr/design/dialog/NotificationDialog.java

@ -1,12 +1,14 @@
package com.fr.design.dialog;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.notification.Notification;
import com.fr.design.notification.NotificationCenter;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.module.ModuleContext;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
@ -14,6 +16,8 @@ import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JDialog;
@ -24,7 +28,6 @@ import javax.swing.UIManager;
/**
* 带查看详情的简要通知框
*
*/
public class NotificationDialog extends JDialog {
public static final int ERROR_MESSAGE = 0;
@ -32,13 +35,15 @@ public class NotificationDialog extends JDialog {
public static final int WARNING_MESSAGE = 2;
public static final String HTML_TAG_1 = "<html>";
public static final String HTML_TAG_2 = "</html>";
private static final String HIDE_MSG = "HIDE_MSG_TIMER";
private UILabel messageText;
private NotificationDialogAction notificationDialogAction;
private ScheduledExecutorService TIMER;
public NotificationDialog(Frame owner, String title, boolean isModal, int messageType, String message,NotificationDialogAction action) {
public NotificationDialog(Frame owner, String title, boolean isModal, int messageType, String message, NotificationDialogAction action) {
super(owner);
setTitle(title);
initComponents(messageType, message, isModal,action);
initComponents(messageType, message, isModal, action);
}
public NotificationDialog(Builder builder) {
@ -47,27 +52,32 @@ public class NotificationDialog extends JDialog {
initComponents(builder.messageType, builder.message, builder.modal, builder.action);
}
public void initComponents(int messageType, String message, boolean isModal,NotificationDialogAction action) {
NotificationCenter.getInstance().addNotification(new Notification(messageType,message,action));
public void initComponents(int messageType, String message, boolean isModal, NotificationDialogAction action) {
NotificationCenter.getInstance().addNotification(new Notification(messageType, message, action));
notificationDialogAction = action;
setModal(isModal);
setFocusable(false);
setAutoRequestFocus(false);
setResizable(false);
JPanel body = FRGUIPaneFactory.createBorderLayout_L_Pane();
body.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
//消息内容
UILabel icon = new UILabel(getIconForType(messageType));
JPanel iconPanel = FRGUIPaneFactory.createBorderLayout_L_Pane();
iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 8));
iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 10, 8));
iconPanel.add(icon);
add(iconPanel, BorderLayout.WEST);
body.add(iconPanel, BorderLayout.WEST);
messageText = new UILabel(HTML_TAG_1 + message + HTML_TAG_2);
messageText.setForeground(new Color(51, 51, 52));
JPanel centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane();
centerPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 10));
centerPanel.setBorder(BorderFactory.createEmptyBorder(8, 0, 5, 20));
JScrollPane jScrollPane = new JScrollPane(messageText, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane.setBorder(BorderFactory.createEmptyBorder());
centerPanel.add(jScrollPane, BorderLayout.CENTER);
add(centerPanel, BorderLayout.CENTER);
centerPanel.setPreferredSize(new Dimension(230, 95));
body.add(centerPanel, BorderLayout.CENTER);
//查看详情
UILabel detailLabel = new UILabel();
@ -75,37 +85,67 @@ public class NotificationDialog extends JDialog {
detailLabel.setForeground(Color.BLUE);
JPanel detailPanel = FRGUIPaneFactory.createBorderLayout_L_Pane();
detailPanel.add(detailLabel, BorderLayout.EAST);
add(detailPanel, BorderLayout.SOUTH);
setPreferredSize(new Dimension(262, 135));
body.add(detailPanel, BorderLayout.SOUTH);
detailLabel.addMouseListener(detailClickListener);
messageText.addMouseListener(detailClickListener);
pack();
if (getOwner() != null) {
GUICoreUtils.setWindowCenter(getOwner(), this);
}
addMouseListener(bodyMouseListener);
add(body);
Dimension dimension = body.getPreferredSize();
setSize(dimension.width, dimension.height);
setLocation((DesignerContext.getDesignerFrame().getWidth() - dimension.width - 30 + DesignerContext.getDesignerFrame().getX()),
DesignerContext.getDesignerFrame().getY() + DesignerContext.getDesignerFrame().getHeight() - dimension.height - 30);
disappear();
}
private MouseListener detailClickListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(notificationDialogAction != null){
if (notificationDialogAction != null) {
hideDialog();
notificationDialogAction.doClick();
}
}
};
private MouseListener bodyMouseListener = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (TIMER != null) {
TIMER.shutdownNow();
}
}
@Override
public void mouseExited(MouseEvent e) {
disappear();
}
};
public void disappear() {
TIMER = createScheduleExecutorService();
TIMER.schedule(new Runnable() {
@Override
public void run() {
hideDialog();
}
}, 10000, TimeUnit.MILLISECONDS);
}
private ScheduledExecutorService createScheduleExecutorService() {
return ModuleContext.getExecutor().newSingleThreadScheduledExecutor(new NamedThreadFactory(HIDE_MSG));
}
/**
* 设置通知消息
*/
public void setMessage(String message){
public void setMessage(String message) {
messageText.setText(HTML_TAG_1 + message + HTML_TAG_2);
}
private void hideDialog(){
private void hideDialog() {
this.setVisible(false);
this.dispose();
}
@ -138,6 +178,7 @@ public class NotificationDialog extends JDialog {
public Frame owner = null;
public String title;
public NotificationDialogAction action;
private Builder() {
}

4
designer-base/src/main/java/com/fr/design/login/message/DesignerMessageHelper.java

@ -90,7 +90,7 @@ public class DesignerMessageHelper {
NotificationDialog.Builder()
.owner(DesignerContext.getDesignerFrame())
.title(title)
.modal(true)
.modal(false)
.messageType(NotificationDialog.NEW_MESSAGE)
.message(body)
.notificationDialogAction(new NotificationDialogAction() {
@ -107,7 +107,7 @@ public class DesignerMessageHelper {
NotificationDialog.Builder()
.owner(DesignerContext.getDesignerFrame())
.title(title)
.modal(true)
.modal(false)
.messageType(NotificationDialog.NEW_MESSAGE)
.message(body)
.notificationDialogAction(designerModuleClickType.getAction())

11
designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterDialog.java

@ -15,8 +15,9 @@ import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JDialog;
@ -32,10 +33,16 @@ public class NotificationCenterDialog extends JDialog {
private static final int NOTIFICATIONCOUNT = 5;
public NotificationCenterDialog(Frame parent) {
super(parent, true);
super(parent);
setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Notification"));
setResizable(false);
notificationNeedShow = new ArrayList<>();
addWindowFocusListener(new WindowAdapter() {
@Override
public void windowLostFocus(WindowEvent e) {
hideDialog();
}
});
initComponents();
}

6
designer-base/src/main/java/com/fr/design/notification/ui/NotificationCenterPane.java

@ -20,7 +20,7 @@ public class NotificationCenterPane extends BasicPane {
setPreferredSize(new Dimension(24, 24));
setLayout(new BorderLayout());
notificationCenterButton = new UIButton();
notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png"));
notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/notification/ui/notificationCenter.png"));
notificationCenterButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Show_Notification"));
notificationCenterButton.set4ToolbarButton();
notificationCenterButton.setRolloverEnabled(false);
@ -41,9 +41,9 @@ public class NotificationCenterPane extends BasicPane {
public void refreshButton() {
if (NotificationCenter.getInstance().getNotificationsCount() > 0) {
notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenterDot.png"));
notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/notification/ui/notificationCenterDot.png"));
} else {
notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/mainframe/notificationcenter/notificationCenter.png"));
notificationCenterButton.setIcon(IOUtils.readIcon("/com/fr/design/notification/ui/notificationCenter.png"));
}
}

2
designer-base/src/main/java/com/fr/design/versioncheck/VersionCheckUtils.java

@ -73,7 +73,7 @@ public class VersionCheckUtils {
public static void showVersionCheckDialog(String envName) {
if (!VersionCheckUtils.versionCheck(envName)) {
NotificationDialog notificationDialog = new NotificationDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Sync_Prompt"),
true, NotificationDialog.WARNING_MESSAGE, Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"), new NotificationDialogAction() {
false, NotificationDialog.WARNING_MESSAGE, Toolkit.i18nText("Fine-Design_Basic_Sync_Check_Brief_Info"), new NotificationDialogAction() {
@Override
public void doClick() {
CheckServiceDialog checkServiceDialog = new CheckServiceDialog(DesignerContext.getDesignerFrame(), GeneralUtils.readFullBuildNO(), getRemoteBranch(envName),getNoExistServiceDescription(envName));

0
designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenter.png → designer-base/src/main/resources/com/fr/design/notification/ui/notificationCenter.png

Before

Width:  |  Height:  |  Size: 347 B

After

Width:  |  Height:  |  Size: 347 B

0
designer-realize/src/main/resources/com/fr/design/mainframe/notificationCenter/notificationCenterDot.png → designer-base/src/main/resources/com/fr/design/notification/ui/notificationCenterDot.png

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 491 B

62
designer-form/src/main/java/com/fr/design/mainframe/share/util/DownloadUtils.java

@ -1,9 +1,10 @@
package com.fr.design.mainframe.share.util;
import com.fr.config.MarketConfig;
import com.fr.design.DesignerEnvManager;
import com.fr.design.extra.PluginConstants;
import com.fr.form.share.base.CancelCheck;
import com.fr.form.share.constants.ShareComponentConstants;
import com.fr.ftp.util.Base64;
import com.fr.general.CloudCenter;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ProductConstants;
@ -21,31 +22,27 @@ import com.fr.third.org.apache.http.impl.client.CloseableHttpClient;
import com.fr.third.org.apache.http.impl.client.HttpClients;
import org.jetbrains.annotations.NotNull;
import javax.crypto.Cipher;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;
/**
* created by Harrison on 2020/05/27
**/
public class DownloadUtils {
private static final String MARKET_LOGIN_URL = CloudCenter.getInstance().acquireUrlByKind("market.login");
private static final String REUSES_URL = CloudCenter.getInstance().acquireUrlByKind("af.reuseInfo") + "file/";
private static final String PACKAGE_REUSES_URL = CloudCenter.getInstance().acquireUrlByKind("af.reuseInfo") + "package/download/";
private static final String CERTIFICATE_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtsz62CPSWXZE/IYZRiAuTSZkw\n" +
"1WOwer8+JFktK0uKLAUuQoBr+UjAMFtRA8W7JgKMDwZy/2liEAiXEOSPU/hrdV8D\n" +
"tT541LnGi1X/hXiRwuttPWYN3L2GYm/d5blU+FBNwghBIrdAxXTzYBc6P4KL/oYX\n" +
"nMdTIrkz8tYkG3QoFQIDAQAB";
public static boolean login(CloseableHttpClient client) throws Exception {
HttpUriRequest login = RequestBuilder.post()
.setUri(MARKET_LOGIN_URL)
.setHeader("User-Agent", "Mozilla/5.0")
.addParameter("username", MarketConfig.getInstance().getBbsUsername())
.addParameter("password", MarketConfig.getInstance().getBbsPassword())
.build();
CloseableHttpResponse loginResponse = client.execute(login);
return loginResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK;
}
private static CloseableHttpClient createClient() {
BasicCookieStore cookieStore = new BasicCookieStore();
@ -59,8 +56,10 @@ public class DownloadUtils {
@NotNull
public static String download(String id, String fileName, com.fr.design.extra.Process<Double> process) throws Exception {
CloseableHttpResponse fileRes = getHttpResponse(REUSES_URL, id);
if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) {
fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue());
}
if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_SHARE);
String filePath;
@ -95,7 +94,9 @@ public class DownloadUtils {
public static String downloadPackage(String id, String fileName, CancelCheck cancelCheck) throws Exception {
CloseableHttpResponse fileRes = getHttpResponse(PACKAGE_REUSES_URL, id);
if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) {
fileRes = getHttpResponse(fileRes.getHeaders("Location")[0].getValue());
}
String realPath = StableUtils.pathJoin(ProductConstants.getEnvHome(), ShareComponentConstants.PLUGIN_CACHE, ShareComponentConstants.DOWNLOAD_PACKAGE_SHARE);
String filePath;
if (fileRes.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
@ -133,11 +134,36 @@ public class DownloadUtils {
//先登录一下。不然可能失败
CloseableHttpClient client = createClient();
FineLoggerFactory.getLogger().info("login fr-market");
login(client);
FineLoggerFactory.getLogger().info("start download widget {}", id);
HttpUriRequest file = RequestBuilder.post()
.setHeader("User-Agent", "Mozilla/5.0")
.setUri(url).addParameter("id", encrypt(id)).addParameter("userId",
String.valueOf(DesignerEnvManager.getEnvManager().getDesignerLoginUid()))
.build();
return client.execute(file);
}
private static CloseableHttpResponse getHttpResponse(String url) throws Exception {
//先登录一下。不然可能失败
CloseableHttpClient client = createClient();
HttpUriRequest file = RequestBuilder.get()
.setUri(url + id)
.setUri(url)
.build();
return client.execute(file);
}
private static String encrypt(String str) throws Exception {
//base64编码的公钥
byte[] decoded = Base64.decodeBase64(CERTIFICATE_PUBLIC_KEY);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8)));
return outStr;
}
}

Loading…
Cancel
Save