Browse Source

Merge pull request #14846 in DESIGN/design from fbp/release to fbp/feature

* commit '52edc2c6093167bc1f8ff9536e0ca55ee60d3931':
  REPORT-134347 & REPORT-134726 fix:fbp回归问题修复&图标清理
  REPORT-134304【fr-fbp回归】 模板设置不了图片导出属性
  REPORT-133220 【fr-fbp回归】启动加载页没有模块加载状态了,鸣谢也没有了
  REPORT-134721 【fr-fbp回归】服务器配置-pc端自适应属性,frm相关的内容屏蔽
  REPORT-133059 fix: 东区拖拽面板事件响应问题
  REPORT-130772 & REPORT-134756 fix:本地还没有复现,但是解决一些已知的缩放问题
  REPORT-130080 【FR-FBP】埋点方案梳理与调整
fbp/research
superman 5 months ago
parent
commit
894d8ef73d
  1. 12
      designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
  2. 214
      designer-base/src/main/java/com/fr/design/EnvSwitcherSubmitTask.java
  3. 57
      designer-base/src/main/java/com/fr/design/constants/UIConstants.java
  4. 2
      designer-base/src/main/java/com/fr/design/gui/ibutton/UIPreviewButton.java
  5. 11
      designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java
  6. 3
      designer-base/src/main/java/com/fr/design/gui/imenu/UICheckBoxMenuItem.java
  7. 30
      designer-base/src/main/java/com/fr/design/gui/itextfield/UISearchTextField.java
  8. 6
      designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java
  9. 39
      designer-base/src/main/java/com/fr/design/metric/AbstractDesignerMetric.java
  10. 4
      designer-base/src/main/java/com/fr/design/report/fit/BaseFitAttrPane.java
  11. 4
      designer-base/src/main/java/com/fr/design/roleAuthority/RoleTree.java
  12. 6
      designer-base/src/main/java/com/fr/design/style/color/ColorSelectDetailPane.java
  13. 8
      designer-base/src/main/java/com/fr/design/style/color/ColorSelectDialog.java
  14. 4
      designer-base/src/main/java/com/fr/design/style/color/CustomChooserPanel.java
  15. 47
      designer-chart/src/main/java/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java
  16. 8
      designer-chart/src/main/java/com/fr/van/chart/custom/component/ChartImageCheckOutPane.java
  17. 19
      designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvChooseComponent.java
  18. 2
      designer-realize/src/main/java/com/fanruan/boot/pre/DesignPreStartComponent.java
  19. 12
      designer-realize/src/main/java/com/fr/design/mainframe/AuthorityToolBarPane.java
  20. 3
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java
  21. 4
      designer-realize/src/main/java/com/fr/design/report/ReportExportAttrPane.java
  22. 11
      designer-realize/src/main/java/com/fr/design/webattr/ServerFitAttrPane.java
  23. 3
      designer-realize/src/main/java/com/fr/start/CarinaDesigner.java
  24. 94
      designer-realize/src/main/java/com/fr/start/DesignerStartupMetric.java

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

@ -2,8 +2,6 @@ package com.fr.design;
import com.fr.common.report.ReportState;
import com.fr.design.backup.EnvBackupHelper;
import com.fr.design.mainframe.manager.clip.TemplateTreeClipboard;
import com.fr.design.plugin.remind.PluginErrorDesignReminder;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.DialogActionAdapter;
@ -52,7 +50,6 @@ import com.fr.workspace.engine.base.FineObjectPool;
import com.fr.workspace.engine.channel.http.FunctionalHttpRequest;
import com.fr.workspace.engine.exception.WorkspaceConnectionException;
import com.fr.workspace.engine.rpc.WorkspaceProxyPool;
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
@ -68,9 +65,10 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
public class EnvChangeEntrance {
private static final String BRANCH_TAG = "#";
private static final String BRANCH_BEGIN = "-";
@ -158,11 +156,11 @@ public class EnvChangeEntrance {
}
/**
* 由云端运维触发切换埋点
* 内部空实现
* <a href="https://kms.fineres.com/pages/viewpage.action?pageId=945327503">实现</a>
* 异步提交埋点
*
*/
private void triggerSwitchMetric() {
EnvSwitcherSubmitTask.asyncSubmit();
}
/**

214
designer-base/src/main/java/com/fr/design/EnvSwitcherSubmitTask.java

@ -0,0 +1,214 @@
package com.fr.design;
import com.fr.concurrent.FineExecutors;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.mainframe.SiteCenterToken;
import com.fr.design.metric.AbstractDesignerMetric;
import com.fr.general.CloudCenter;
import com.fr.general.http.HttpToolbox;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import com.fr.workspace.Workspace;
import com.fr.workspace.WorkspaceSwitchProcess;
import com.fr.workspace.WorkspaceSwitchStatics;
import com.fr.workspace.switcher.WorkspaceSwitchHistory;
import org.jetbrains.annotations.NotNull;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeSet;
import java.util.concurrent.ExecutorService;
/**
* 设计器环境切换埋点提交
*
* @author Bruce.Deng
* @since 11.0
* Created on 2024/9/5
*/
public class EnvSwitcherSubmitTask extends AbstractDesignerMetric {
private static final String TAG_MODULE = "module";
private static final String TAG_SELF_USED = "selfUsed";
private static final String TAG_SUB = "sub";
private static final String WORK_DIRECTORY_TYPE_BEFORE_SWITCHING = "workDirectoryTypeBeforeSwitching";
private static final String WORK_DIRECTORY_TYPE_AFTER_SWITCHING = "workDirectoryTypeAfterSwitching";
private static final String SWITCH_COMPLETED = "switchCompleted";
private static final String EXCHANGE_TIME = "exchangeTime";
private static final String START_SLOW_MODULE_NAME = "startSlowModuleName";
private static final String STOP_SLOW_MODULE_NAME = "stopSlowModuleName";
private static final int MIN_LIMIT = 100;
private static final String SWITCH_TABLE_SUFFIX = "record_of_fbp_remoteSwitch/single";
private final ExecutorService service;
private EnvSwitcherSubmitTask() {
service = FineExecutors.newSingleThreadExecutor(new NamedThreadFactory("DesignEnvSwitchMetricSubmit"));
}
/**
* 异步提交环境切换的埋点
*/
public static void asyncSubmit() {
new EnvSwitcherSubmitTask().run();
}
/**
* 执行任务
*/
private void run() {
WorkspaceSwitchHistory.consume(workspaceSwitchProcesses -> {
Iterator<WorkspaceSwitchProcess> workspaceSwitchProcessIterator = workspaceSwitchProcesses.descendingIterator();
while (workspaceSwitchProcessIterator.hasNext()) {
WorkspaceSwitchProcess next = workspaceSwitchProcessIterator.next();
// 过滤掉 source 为空的启动过程
if (next != null && next.getSource() != null) {
submitProcess(next);
}
// 提交之后要移除掉
workspaceSwitchProcessIterator.remove();
}
});
}
private void submitProcess(WorkspaceSwitchProcess process) {
service.submit(new Runnable() {
@Override
public void run() {
collectAndSubmit(process);
}
});
}
private void collectAndSubmit(WorkspaceSwitchProcess process) {
Map<String, Object> para = new HashMap<>();
para.put("token", SiteCenterToken.generateToken());
para.put("content", collect(process));
try {
HttpToolbox.post(getUrl(), para);
FineLoggerFactory.getLogger().debug("[EnvSwitcher] submit env switcher metric to cloud.");
} catch (Throwable t) {
FineLoggerFactory.getLogger().debug(t,"[EnvSwitcher] failed to submit env switcher metric to cloud.");
}
}
private JSONObject collect(WorkspaceSwitchProcess process) {
JSONObject info = new JSONObject();
addDefaultMetric(info);
addMeta(info, process);
addStatics(info, process.getStatics());
return info;
}
private static void addMeta(JSONObject info, WorkspaceSwitchProcess process) {
Workspace source = process.getSource();
info.put(WORK_DIRECTORY_TYPE_BEFORE_SWITCHING, workspaceType(source));
Workspace target = process.getTarget();
info.put(WORK_DIRECTORY_TYPE_AFTER_SWITCHING, workspaceType(target));
info.put(SWITCH_COMPLETED, switchCompleted(process));
}
@NotNull
private static String switchCompleted(WorkspaceSwitchProcess process) {
return process.isSwitchSuccess() ? "yes" : "no";
}
@NotNull
private static String workspaceType(Workspace workspace) {
return workspace.isLocal() ? "local" : "remote";
}
private void addStatics(JSONObject info, WorkspaceSwitchStatics statics) {
info.put(EXCHANGE_TIME, statics.getElapsed());
JSONObject startSlowModuleName = convert2CloudModel(statics.getStartModuleUsed());
info.put(START_SLOW_MODULE_NAME, startSlowModuleName);
JSONObject stopSlowModuleName = convert2CloudModel(statics.getStopModuleUsed());
info.put(STOP_SLOW_MODULE_NAME, stopSlowModuleName);
}
/* convert */
@NotNull
private JSONObject convert2CloudModel(JSONObject moduleUsedJO) {
TreeSet<Entry> entries = convert2SortSet(moduleUsedJO);
return convert2JO(entries);
}
@NotNull
private static JSONObject convert2JO(TreeSet<Entry> startEntries) {
JSONObject moduleNames = new JSONObject();
startEntries.stream()
.filter((e) -> e.getSelfUsed() > MIN_LIMIT)
.forEach((e) -> moduleNames.put(e.getModuleName(), e.getSelfUsed()));
return moduleNames;
}
@NotNull
private TreeSet<Entry> convert2SortSet(JSONObject moduleUsedJO) {
TreeSet<Entry> entries = new TreeSet<>(Comparator.comparingInt(Entry::getSelfUsed));
sortBySelfUsed(moduleUsedJO, entries);
return entries;
}
/**
* 循环处理 JSON, 并降序排序
*
* @param moduleUsed 模块用时 {@link com.fr.module.engine.FineModule}
* @param entries 降序排序的树集合
*/
private void sortBySelfUsed(JSONObject moduleUsed, TreeSet<Entry> entries) {
if (moduleUsed == null || moduleUsed.isEmpty()) {
return;
}
String moduleName = moduleUsed.optString(TAG_MODULE);
int selfUsed = moduleUsed.optInt(TAG_SELF_USED);
entries.add(new Entry(moduleName, selfUsed));
JSONArray subModules = moduleUsed.optJSONArray(TAG_SUB);
if (subModules != null) {
int length = subModules.length();
for (int i = 0; i < length; i++) {
JSONObject subModuleUsed = subModules.optJSONObject(i);
sortBySelfUsed(subModuleUsed, entries);
}
}
}
private String getUrl() {
String monitorEntry = CloudCenter.getInstance().acquireUrlByKind("cloud.monitor.api.entrypoint");
String url = (StringUtils.isNotEmpty(monitorEntry) ? monitorEntry : DEFAULT_MONITOR_URL)
+ SWITCH_TABLE_SUFFIX;
return url;
}
private static class Entry {
private final String moduleName;
private final Integer selfUsed;
public Entry(String moduleName, Integer selfUsed) {
this.moduleName = moduleName;
this.selfUsed = selfUsed;
}
public String getModuleName() {
return moduleName;
}
public Integer getSelfUsed() {
return selfUsed;
}
}
}

57
designer-base/src/main/java/com/fr/design/constants/UIConstants.java

@ -4,7 +4,6 @@
package com.fr.design.constants;
import com.fine.theme.icon.LazyIcon;
import com.fr.base.svg.IconUtils;
import com.fr.base.svg.SVGLoader;
import com.fr.general.IOUtils;
import com.fr.stable.Constants;
@ -27,7 +26,6 @@ import java.awt.image.BufferedImage;
*/
public interface UIConstants {
public static final Icon CPT_ICON = IOUtils.readIcon("/com/fr/base/images/oem/cpt.png");
public static final Icon BLACK_ICON = IOUtils.readIcon("/com/fr/base/images/cell/blank.gif");
public static final String EMPTY_ICON = StringUtils.EMPTY;
@ -153,67 +151,17 @@ public interface UIConstants {
public static final Color CHECK_BOX_TIP_FONT_COLOR = new Color(51, 51, 52, (int)Math.round(0.5 * 255));
public static final BufferedImage DRAG_BAR = IOUtils.readImage("com/fr/design/images/control/bar.png");
public static final BufferedImage DRAG_BAR_LIGHT = IOUtils.readImage("com/fr/design/images/control/bar-light.png");
public static final Image ARROW_NORTH = SVGLoader.load("/com/fr/design/standard/arrowlinear/up_arrow.svg");
public static final Image ARROW_SOUTH = SVGLoader.load("/com/fr/design/standard/arrowlinear/down_arrow.svg");
public static final Image ARROW_EAST = SVGLoader.load("/com/fr/design/standard/arrowlinear/east_arrow.svg");
public static final Image ARROW_WEST = SVGLoader.load("/com/fr/design/standard/arrowlinear/west_arrow.svg");
public static final BufferedImage DRAG_BAR_RIGHT = IOUtils.readImage("com/fr/design/images/control/barm.png");
public static final BufferedImage DRAG_BAR_LEFT = IOUtils.readImage("com/fr/design/images/control/barl.png");
public static final Image DRAG_UP_NORMAL = SVGLoader.load("/com/fr/design/standard/triangle.arrow/up_normal.svg");
public static final Image DRAG_UP_PRESS = SVGLoader.load("/com/fr/design/standard/triangle.arrow/up_hover.svg");
public static final Image DRAG_DOWN_NORMAL = SVGLoader.load("/com/fr/design/standard/triangle.arrow/down_normal.svg");
public static final Image DRAG_DOWN_PRESS = SVGLoader.load("/com/fr/design/standard/triangle.arrow/down_hover.svg");
public static final Image DRAG_RIGHT_NORMAL = SVGLoader.load("/com/fr/design/standard/drag/right_normal.svg");
public static final Image DRAG_RIGHT_PRESS = SVGLoader.load("/com/fr/design/standard/drag/right_pressed.svg");
public static final Image DRAG_LEFT_NORMAL = SVGLoader.load("/com/fr/design/standard/drag/left_normal.svg");
public static final Image DRAG_LEFT_PRESS = SVGLoader.load("/com/fr/design/standard/drag/left_pressed.svg");
public static final BufferedImage DRAG_DOT = IOUtils.readImage("com/fr/design/images/control/dot.png");
public static final Image DRAG_LINE = SVGLoader.load("/com/fr/design/standard/dot_line_normal.svg");
public static final BufferedImage ACCESSIBLE_EDITOR_DOT = IOUtils.readImage("com/fr/design/images/control/dot.png");
public static final BufferedImage DRAG_DOT_VERTICAL = IOUtils.readImage("com/fr/design/images/control/dotv.png");
public static final Image POP_BUTTON_DOWN = SVGLoader.load("/com/fr/design/standard/poparrow/pop_down_arrow.svg");
public static final Image POP_BUTTON_UP = SVGLoader.load("/com/fr/design/standard/poparrow/pop_up_arrow.svg");
public static final BufferedImage DRAG_DOWN_SELECTED_SMALL = IOUtils.readImage("com/fr/design/images/buttonicon/downSelected.png");
public static final BufferedImage DRAG_LEFT_NORMAL_SMALL = IOUtils.readImage("com/fr/design/images/buttonicon/leftNormal.png");
public static final BufferedImage WATERMARK_BACKGROUND = IOUtils.readImage("/com/fr/design/images/dialog/watermark/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_WaterMark_Background_Icon_File_Name"));
public static final int MODEL_NORMAL = 0;
public static final int MODEL_PRESS = 1;
public static final Icon ARROW_DOWN_ICON = IconUtils.readIcon("/com/fr/design/standard/arrowlinear/down_arrow.svg");
public static final Icon ARROW_UP_ICON = IOUtils.readIcon("com/fr/design/images/buttonicon/arrowup.png");
public static final Icon YES_ICON = IOUtils.readIcon("com/fr/design/images/buttonicon/yes.png");
public static final Icon CHOOSEN_ICON = IOUtils.readIcon("com/fr/design/images/buttonicon/select_item.png");
public static final Icon PRE_WIDGET_ICON = IOUtils.readIcon("com/fr/design/images/buttonicon/prewidget.png");
public static final Icon PRE_WIDGET_NORMAL_ICON = IconUtils.readIcon("com/fr/design/images/buttonicon/prewidget");
public static final Icon EDIT_NORMAL_ICON = IconUtils.readIcon("/com/fr/design/standard/uimode/edit");
public static final Icon EDIT_PRESSED_ICON = IconUtils.readIcon("/com/fr/design/standard/uimode/edit_pressed.svg");
public static final Icon HIDE_NORMAL_ICON = IconUtils.readIcon("/com/fr/design/standard/uimode/hide");
public static final Icon HIDE_PRESSED_ICON = IconUtils.readIcon("/com/fr/design/standard/uimode/hide_pressed.svg");
public static final Icon VIEW_NORMAL_ICON = IconUtils.readIcon("/com/fr/design/standard/uimode/view");
//public static final Icon VIEW_PRESSED_ICON = IconUtils.readIcon("/com/fr/design/standard/uimode/view");
public static final Icon RUN_BIG_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/run24.svg");
public static final Icon RUN_SMALL_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/runs.svg");
public static final Icon PAGE_BIG_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/pageb24.svg");
public static final Icon WRITE_BIG_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/writeb24.svg");
public static final Icon ANA_BIG_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/anab24.svg");
public static final Icon PAGE_SMALL_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/pages.svg");
public static final Icon WRITE_SMALL_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/writes.svg");
public static final Icon ANA_SMALL_ICON = IconUtils.readIcon("/com/fr/design/standard/preview/anas.svg");
public static final Icon REFRESH_ICON = IOUtils.readIcon("com/fr/design/images/buttonicon/refresh.png");
public static final Icon FONT_ICON = IOUtils.readIcon("/com/fr/design/images/gui/color/foreground.png");
public static final Icon AUTO_FONT_ICON = IOUtils.readIcon("/com/fr/design/images/gui/color/autoForeground.png");
public static final Icon HISTORY_ICON = IOUtils.readIcon("com/fr/design/images/buttonicon/history.png");
public static final Icon DELETE_ICON = IOUtils.readIcon("com/fr/design/images/m_file/close.png");
public static final Icon EDIT_ICON = IOUtils.readIcon("com/fr/design/images/m_file/edit.png");
public static final Icon SEARCH_ICON = IOUtils.readIcon("/com/fr/design/images/data/search.png");
public static final Icon BLACK_SEARCH_ICON = IOUtils.readIcon("/com/fr/design/images/data/black_search.png");
public static final Icon CLEAR_ICON = IOUtils.readIcon("/com/fr/design/images/data/source/delete.png");
public static final Icon LIST_EDIT_ICON = IOUtils.readIcon("/com/fr/design/images/control/edit.png");
public static final Icon LIST_EDIT_WHITE_ICON = IOUtils.readIcon("/com/fr/design/images/control/edit_white.png");
public static final Icon ARROW_DOWN_ICON = new LazyIcon("down_arrow");
public static final Icon ARROW_UP_ICON = new LazyIcon("up_arrow");
public static final Color PRESSED_DARK_GRAY = new Color(127, 127, 127);
public static final Color GRDIENT_DARK_GRAY = new Color(45, 45, 45);
public static final Color BARNOMAL = new Color(232, 232, 233);
@ -222,7 +170,6 @@ public interface UIConstants {
public static final int BUTTON_GROUP_ARC = 0;
public static final int LARGEARC = 6;
public static final Stroke BS = new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 2f, new float[]{3, 1}, 0);
public static final Icon PREVIEW_DOWN = IconUtils.readIcon("/com/fr/design/standard/preview_down_icon");
public static final int CLOSE_AUTHORITY_HEIGHT_AND_WIDTH = 24;
public static final Icon CLOSE_OF_AUTHORITY = new LazyIcon("platform_close", CLOSE_AUTHORITY_HEIGHT_AND_WIDTH).disabled();
public static final Icon CLOSE_OVER_AUTHORITY = new LazyIcon("platform_close", CLOSE_AUTHORITY_HEIGHT_AND_WIDTH);

2
designer-base/src/main/java/com/fr/design/gui/ibutton/UIPreviewButton.java

@ -1 +1 @@
package com.fr.design.gui.ibutton; import com.fr.design.constants.UIConstants; import com.fr.stable.Constants; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * Author : daisy * Date: 13-8-1 * Time: 下午3:41 */ public class UIPreviewButton extends JPanel { private static final int START_X = -7; protected UIButton upButton; protected UIButton downButton; protected void upButtonClickEvent() { // do nothing } protected void downButtonClickEvent() { // do nothing } public UIPreviewButton() { this(new UIButton(), new UIButton()); } public UIPreviewButton(UIButton up, UIButton down) { upButton = up; downButton = down; upButton.setRoundBorder(true, Constants.CENTER); downButton.setRoundBorder(true, Constants.CENTER); upButton.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { downButton.getModel().setPressed(true); downButton.getModel().setSelected(true); downButton.repaint(); } @Override public void mouseReleased(MouseEvent e) { downButton.getModel().setPressed(false); downButton.getModel().setSelected(false); downButton.repaint(); } @Override public void mouseClicked(MouseEvent e) { upButtonClickEvent(); } }); downButton.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { upButton.getModel().setPressed(true); upButton.getModel().setSelected(true); upButton.repaint(); } @Override public void mouseReleased(MouseEvent e) { upButton.getModel().setPressed(false); upButton.getModel().setSelected(false); upButton.repaint(); } @Override public void mouseClicked(MouseEvent e) { downButtonClickEvent(); } }); this.setLayout(new FlowLayout(FlowLayout.CENTER,5,0)); this.add(upButton); this.add(downButton); } public UIPreviewButton(Icon left, Icon right) { this(); upButton.setIcon(left); downButton.setIcon(right); } public UIButton getUpButton() { return upButton; } public void setExtraPainted(boolean isExtraPainted) { if (!isExtraPainted) { upButton.setBackground(null); downButton.setBackground(null); upButton.setOpaque(false); downButton.setOpaque(false); } } public UIButton getDownButton() { return downButton; } public void set4Toolbar() { upButton.setNormalPainted(false); downButton.setNormalPainted(false); upButton.setBorderPaintedOnlyWhenPressed(true); downButton.setBorderPaintedOnlyWhenPressed(true); } protected void showPopWindow(JPopupMenu menu) { GUICoreUtils.showPopupMenu(menu, this, START_X, getY() + getHeight() - 3); } public static void main(String... args) { JFrame jf = new JFrame("test"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel content = (JPanel) jf.getContentPane(); content.setLayout(null); UIPreviewButton bb = new UIPreviewButton(UIConstants.PAGE_BIG_ICON, UIConstants.PREVIEW_DOWN); bb.setBounds(20, 20, bb.getPreferredSize().width, bb.getPreferredSize().height); content.add(bb); GUICoreUtils.centerWindow(jf); jf.setSize(100, 100); jf.setVisible(true); } }
package com.fr.design.gui.ibutton; import com.fr.design.constants.UIConstants; import com.fr.stable.Constants; import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * Author : daisy * Date: 13-8-1 * Time: 下午3:41 */ public class UIPreviewButton extends JPanel { private static final int START_X = -7; protected UIButton upButton; protected UIButton downButton; protected void upButtonClickEvent() { // do nothing } protected void downButtonClickEvent() { // do nothing } public UIPreviewButton() { this(new UIButton(), new UIButton()); } public UIPreviewButton(UIButton up, UIButton down) { upButton = up; downButton = down; upButton.setRoundBorder(true, Constants.CENTER); downButton.setRoundBorder(true, Constants.CENTER); upButton.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { downButton.getModel().setPressed(true); downButton.getModel().setSelected(true); downButton.repaint(); } @Override public void mouseReleased(MouseEvent e) { downButton.getModel().setPressed(false); downButton.getModel().setSelected(false); downButton.repaint(); } @Override public void mouseClicked(MouseEvent e) { upButtonClickEvent(); } }); downButton.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { upButton.getModel().setPressed(true); upButton.getModel().setSelected(true); upButton.repaint(); } @Override public void mouseReleased(MouseEvent e) { upButton.getModel().setPressed(false); upButton.getModel().setSelected(false); upButton.repaint(); } @Override public void mouseClicked(MouseEvent e) { downButtonClickEvent(); } }); this.setLayout(new FlowLayout(FlowLayout.CENTER,5,0)); this.add(upButton); this.add(downButton); } public UIPreviewButton(Icon left, Icon right) { this(); upButton.setIcon(left); downButton.setIcon(right); } public UIButton getUpButton() { return upButton; } public void setExtraPainted(boolean isExtraPainted) { if (!isExtraPainted) { upButton.setBackground(null); downButton.setBackground(null); upButton.setOpaque(false); downButton.setOpaque(false); } } public UIButton getDownButton() { return downButton; } public void set4Toolbar() { upButton.setNormalPainted(false); downButton.setNormalPainted(false); upButton.setBorderPaintedOnlyWhenPressed(true); downButton.setBorderPaintedOnlyWhenPressed(true); } protected void showPopWindow(JPopupMenu menu) { GUICoreUtils.showPopupMenu(menu, this, START_X, getY() + getHeight() - 3); } }

11
designer-base/src/main/java/com/fr/design/gui/icontainer/UIEastResizableContainer.java

@ -54,6 +54,7 @@ public class UIEastResizableContainer extends JPanel {
private static final int DRAG_GAP_SIZE = 10;
private Point dragPoint;
private boolean dragging;
public UIEastResizableContainer() {
this(new JPanel(), new JPanel());
@ -71,12 +72,20 @@ public class UIEastResizableContainer extends JPanel {
public void mousePressed(MouseEvent e) {
if (isEnableDrag(e)) {
dragPoint = e.getPoint();
dragging = true;
}
}
@Override
public void mouseDragged(MouseEvent e) {
resizePanel(e);
if (dragging) {
resizePanel(e);
}
}
@Override
public void mouseReleased(MouseEvent e) {
dragging = false;
}
};

3
designer-base/src/main/java/com/fr/design/gui/imenu/UICheckBoxMenuItem.java

@ -1,5 +1,6 @@
package com.fr.design.gui.imenu;
import com.fine.theme.icon.LazyIcon;
import com.fr.design.constants.UIConstants;
public class UICheckBoxMenuItem extends UIMenuItem {
@ -19,7 +20,7 @@ public class UICheckBoxMenuItem extends UIMenuItem {
public void setSelected(boolean b) {
super.setSelected(b);
if (this.isSelected()) {
setIcon(UIConstants.CHOOSEN_ICON);
setIcon(new LazyIcon("checkbox_checked"));
} else {
setIcon(UIConstants.BLACK_ICON);
}

30
designer-base/src/main/java/com/fr/design/gui/itextfield/UISearchTextField.java

@ -1,6 +1,7 @@
package com.fr.design.gui.itextfield;
import com.fine.theme.icon.LazyIcon;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ilable.UILabel;
@ -25,8 +26,8 @@ import java.awt.geom.RoundRectangle2D;
*/
public class UISearchTextField extends UITextField {
private UILabel iconLabel = new UILabel(UIConstants.BLACK_SEARCH_ICON);
private UILabel clearLabel = new UILabel(UIConstants.CLEAR_ICON);
private UILabel iconLabel = new UILabel(new LazyIcon("search"));
private UILabel clearLabel = new UILabel(new LazyIcon("clear"));
private UILabel infoLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Search"));
private Dimension iconSize;
private Dimension infoSize;
@ -268,29 +269,4 @@ public class UISearchTextField extends UITextField {
this.showClearIcon = showClearIcon;
this.repaint();
}
public static void main(String[] args) {
JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
UISearchTextField comp = new UISearchTextField(20);
p.add(comp);
comp = new UISearchTextField(20);
comp.setShowClearIcon(false);
p.add(comp);
comp = new UISearchTextField(20);
comp.setIconPosition(SwingConstants.RIGHT);
p.add(comp);
comp = new UISearchTextField(20);
comp.setShowClearIcon(false);
comp.setIconPosition(SwingConstants.RIGHT);
p.add(comp);
p.add(new JTextField(20));
JFrame frame = new JFrame();
frame.setTitle("UITextField");
frame.setContentPane(p);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

6
designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java

@ -2,9 +2,9 @@ package com.fr.design.mainframe.vcs.ui;
import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIScale;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.svg.IconUtils;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.gui.ilable.UILabel;
@ -121,11 +121,11 @@ public class RecyclePane extends AbstractSupportSelectTablePane<VcsTableEntity>
if (isNeedSearch()) {
searchTextField = new UITextField();
searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Vcs_Start_Search"));
searchTextField.setColumns(COLUMNS_COUNT);
searchTextField.setPreferredSize(new Dimension(FineUIScale.scale(150), super.getPreferredSize().height));
UILabel searchLabel = new UILabel(ICON_SEARCH);
searchLabel.setBorder(new ScaledEmptyBorder(0, 4, 0, 4));
searchTextField.setBorder(null);
leftPane = row(cell(searchLabel), cell(searchTextField).weight(1)).with(it -> {
leftPane = row(cell(searchLabel), cell(searchTextField)).with(it -> {
it.setBorder(new FineRoundBorder());
it.setOpaque(true);
it.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));

39
designer-base/src/main/java/com/fr/design/metric/AbstractDesignerMetric.java

@ -0,0 +1,39 @@
package com.fr.design.metric;
import com.fanruan.carina.Carina;
import com.fanruan.config.bbs.FineBBSConfigProvider;
import com.fr.config.MarketConfig;
import com.fr.design.DesignerEnvManager;
import com.fr.general.GeneralUtils;
import com.fr.json.JSONObject;
import org.jetbrains.annotations.NotNull;
/**
* 设计器埋点抽象
*
* @author Bruce.Deng
* @since 11.0
* Created on 2024/9/10
*/
public abstract class AbstractDesignerMetric {
public static final String TIME = "time";
public static final String DESIGNER_ID = "designerId";
public static final String DESIGNER_VERSION = "designerVersion";
public static final String USERID = "userId";
public static final String APPID = "appId";
public static final String DEFAULT_MONITOR_URL = "https://cloud.fanruan.com/api/monitor/";
protected void addDefaultMetric(@NotNull JSONObject info) {
info.put(TIME, System.currentTimeMillis());
info.put(DESIGNER_ID, DesignerEnvManager.getEnvManager().getUUID());
info.put(DESIGNER_VERSION, GeneralUtils.getVersion());
info.put(USERID, Carina.config(FineBBSConfigProvider.class).getBbsUid());
info.put(APPID, MarketConfig.getInstance().getCloudOperationMaintenanceId());
}
}

4
designer-base/src/main/java/com/fr/design/report/fit/BaseFitAttrPane.java

@ -82,8 +82,6 @@ public abstract class BaseFitAttrPane extends BasicBeanPane<ReportFitAttr> {
protected void initComponents() {
//添加以下设置
initItemChoose();
//服务器配置-PC端自适应属性面板中需要添加提示
initPrompt();
this.setLayout(new BorderLayout());
this.add(contentJPanel);
}
@ -112,8 +110,6 @@ public abstract class BaseFitAttrPane extends BasicBeanPane<ReportFitAttr> {
}
protected void initPrompt() {
}
protected void refresh() {
validate();

4
designer-base/src/main/java/com/fr/design/roleAuthority/RoleTree.java

@ -33,6 +33,8 @@ import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import static com.fine.theme.utils.FineUIScale.scale;
/**
* Author : daisy
* Time: 下午3:32
@ -48,7 +50,7 @@ public class RoleTree extends UserObjectRefreshJTree<RoleSourceOP> {
this.setCellRenderer(roleTreeRenderer);
this.setEnabled(true);
this.setEditable(true);
this.setRowHeight(20);
this.setRowHeight(scale(20));
this.setDigIn(true);
Handler handler = createHandlerForRoleTree();
this.replaceMouseListener(this, handler, 0);

6
designer-base/src/main/java/com/fr/design/style/color/ColorSelectDetailPane.java

@ -78,7 +78,6 @@ public class ColorSelectDetailPane extends BasicPane {
// 颜色选择器面板
selectedPanel = new JColorChooser(this.color);
selectedPanel.setPreferredSize(new Dimension(selectedPanel.getWidth(), FineUIScale.scale(SELECT_PANEL_HEIGHT)));
selectedPanel.setPreviewPanel(new JPanel());
swatchChooserPanel = new SwatchChooserPanel();
@ -130,12 +129,11 @@ public class ColorSelectDetailPane extends BasicPane {
column(
2,
cell(new UILabel(i18nText("Fine-Design_Basic_Preview"))),
cell(previewPanel).with(it -> {
cell(previewPanel).weight(1).with(it -> {
it.setBorder(new FineRoundBorder());
it.setPreferredSize(new Dimension(this.getPreferredSize().width, FineUIScale.scale(120)));
it.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
})
)).with(it -> it.setBorder(new ScaledEmptyBorder(0, 10, 0, 10)))
).weight(1)).weight(1).with(it -> it.setBorder(new ScaledEmptyBorder(0, 10, 0, 10)))
).getComponent();
}

8
designer-base/src/main/java/com/fr/design/style/color/ColorSelectDialog.java

@ -16,6 +16,8 @@ import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.theme.utils.FineUIScale.scale;
@ -86,8 +88,7 @@ public class ColorSelectDialog extends MiddleChartDialog{
private void initComponent() {
this.setLayout(new BorderLayout());
this.add(pane,BorderLayout.NORTH);
this.setBasicDialogSize(scale(545),scale(500));
this.setBasicDialogSize(545,500);
this.setResizable(false);
this.applyClosingAction();
@ -95,8 +96,6 @@ public class ColorSelectDialog extends MiddleChartDialog{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
this.add(buttonPane, BorderLayout.SOUTH);
ok = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Button_OK"));
cancel = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Button_Cancel"));
@ -121,6 +120,7 @@ public class ColorSelectDialog extends MiddleChartDialog{
}
});
this.add(column(10, cell(pane).weight(1), cell(buttonPane)).getComponent());
this.setTitle(pane.title4PopupWindow());
GUICoreUtils.setWindowCenter(getOwner(), this);
}

4
designer-base/src/main/java/com/fr/design/style/color/CustomChooserPanel.java

@ -599,7 +599,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel implements ColorSelec
protected void buildChooser() {
setLayout(new BorderLayout(10, 0));
setPreferredSize(new Dimension((int) this.getPreferredSize().getWidth(), scale(180)));
add(buildRightPanel(), BorderLayout.CENTER);
Container rightPane = buildRightPanel();
JPanel container = new JPanel();
container.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0));
@ -628,7 +628,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel implements ColorSelec
slider.setSize(scale(new Dimension(12, 180)));
trackPanel.setSize(scale(new Dimension(12, 180)));
add(container, BorderLayout.WEST);
add(row(cell(container).weight(1), cell(rightPane).weight(1)).getComponent());
slider.addChangeListener(new SliderChangeListener());
updateTextFields();

47
designer-chart/src/main/java/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java

@ -1,15 +1,14 @@
package com.fr.design.chart.series.PlotSeries;
import com.fine.theme.icon.LazyIcon;
import com.fr.chart.base.MapSvgXMLHelper;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.UIDialog;
import com.fr.design.event.ChangeEvent;
import com.fr.design.event.ChangeListener;
import com.fr.design.gui.frpane.UIExtensionPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.BoldFontTextLabel;
import com.fr.design.gui.ilable.UILabel;
@ -33,8 +32,6 @@ import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
@ -50,8 +47,6 @@ import java.util.List;
* 可收缩的面板只有两层
*/
public class UIGroupExtensionPane extends BasicPane {
public static final String EDIT = "edit";
public static final String DELETE = "delete";
private static final int BUTTONWIDTH = 16;
private static final int DIALOG_WIDTH = 140;
private static final int DIALOG_HEIGHT = 100;
@ -350,8 +345,8 @@ public class UIGroupExtensionPane extends BasicPane {
JComponent c = (JComponent) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Border border = null;
c.setBorder(border);
UILabel editLabel = new UILabel(UIConstants.EDIT_ICON);
UILabel deleteLabel = new UILabel(UIConstants.DELETE_ICON);
UILabel editLabel = new UILabel(new LazyIcon("edit"));
UILabel deleteLabel = new UILabel(new LazyIcon("remove"));
JPanel editPane = GUICoreUtils.createFlowPane(new Component[]{editLabel, deleteLabel}, FlowLayout.LEFT, LayoutConstants.HGAP_LARGE);
editPane.setBackground(isSelected ? c.getBackground() : null);
@ -548,40 +543,4 @@ public class UIGroupExtensionPane extends BasicPane {
}
}
}
/**
* 测试程序
* @param args 参数
*/
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = f.getContentPane();
c.setBackground(Color.WHITE);
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
final UIGroupExtensionPane g = new UIGroupExtensionPane(new String[]{"title1", "title2", "title3"});
c.add(g, BorderLayout.CENTER);
JPanel pp = new JPanel(new FlowLayout());
c.add(pp, BorderLayout.SOUTH);
UIButton test = new UIButton("add1");
test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
g.addData("test111", 0);
}
});
pp.add(test);
UIButton test2 = new UIButton("add2");
test2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
g.addData("test222", 1);
}
});
pp.add(test2);
f.setSize(360, 500);
f.setLocation(200, 100);
f.setVisible(true);
}
}

8
designer-chart/src/main/java/com/fr/van/chart/custom/component/ChartImageCheckOutPane.java

@ -33,6 +33,7 @@ public class ChartImageCheckOutPane extends BasicPane implements UIObserver {
private static final int ICON_WIDTH = 56;
private static final int ICON_HEIGHT = 50;
private final ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
private static final String CHART_ICON_PREFIX = "icon_";
public ChartImageCheckOutPane(CustomPlotType type){
this(type, false);
@ -66,8 +67,13 @@ public class ChartImageCheckOutPane extends BasicPane implements UIObserver {
this.add(row(flex(), cell(checkBox)).getComponent(), BorderLayout.NORTH);
}
/**
* 图表iconId注册时设置为"icon_" + 图表类型
* @param customPlotType
* @return
*/
private String getIconId(CustomPlotType customPlotType) {
return CustomPlotFactory.getTypeIconId(customPlotType);
return CHART_ICON_PREFIX + customPlotType.getType();
}
public JCheckBox getCheckBox() {

19
designer-realize/src/main/java/com/fanruan/boot/env/DesignEnvChooseComponent.java vendored

@ -1,8 +1,6 @@
package com.fanruan.boot.env;
import com.fr.design.ConfigHelper;
import com.fanruan.boot.key.StartupArgsShell;
import com.fr.design.mem.MemConfigRepositoryBuilder;
import com.fanruan.carina.Carina;
import com.fanruan.carina.annotions.FineComponent;
import com.fanruan.carina.annotions.Start;
@ -15,15 +13,18 @@ import com.fanruan.config.realm.local.LocalConfigRepositoryBuilder;
import com.fr.base.operator.org.OrganizationOperator;
import com.fr.base.rpc.encrypt.EncryptOperator;
import com.fr.decision.service.context.ServiceContext;
import com.fr.design.ConfigHelper;
import com.fr.design.DesignerEnvManager;
import com.fr.design.EnvChangeEntrance;
import com.fr.design.PluginClassRefreshManager;
import com.fr.design.backup.DesignContext;
import com.fr.design.constants.DesignerLaunchStatus;
import com.fr.design.editlock.ConnectionLockChangeChecker;
import com.fr.design.editlock.ServerTableDataLockChangeChecker;
import com.fr.design.env.DesignerWorkspaceGenerator;
import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.mem.MemConfigRepositoryBuilder;
import com.fr.design.plugin.remind.PluginErrorDesignReminder;
import com.fr.env.utils.WorkspaceUtils;
import com.fr.event.Event;
@ -36,12 +37,12 @@ import com.fr.report.lock.DefaultLockInfoOperator;
import com.fr.report.lock.LocalLockInfoOperator;
import com.fr.report.lock.LockInfoOperator;
import com.fr.report.lock.ServerLockInfoOperator;
import com.fr.design.backup.DesignContext;
import com.fr.start.module.StartupArgs;
import com.fr.value.NotNullLazyValue;
import com.fr.workspace.WorkContext;
import com.fr.workspace.Workspace;
import com.fr.workspace.WorkspaceEvent;
import com.fr.workspace.WorkspaceSwitchProcess;
import com.fr.workspace.base.WorkspaceKey;
import com.fr.workspace.pool.WorkRPCRegister;
import com.fr.workspace.pool.WorkRPCType;
@ -101,6 +102,8 @@ import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator;
import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
/**
* 环境选择模块
*
@ -118,10 +121,20 @@ public class DesignEnvChooseComponent extends ResourceAffiliate {
BootstrapFactory.get().reboot("design_env_prepare");
// 环境切换后,等到模块重启更新一下当前的系统信息
WorkplaceConstants.updateBean();
recordModuleStartStop();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void recordModuleStartStop() {
WorkspaceSwitchProcess process = WorkContext.getSwitcher().getProcess();
Optional.ofNullable(process)
.ifPresent((e) -> e.recordModuleStartUsed(() -> BootstrapFactory.get().profileStart("design_env_prepare")));
Optional.ofNullable(process)
.ifPresent((e) -> e.recordModuleStopUsed(() -> BootstrapFactory.get().profileStop("design_env_prepare")));
}
};
private Listener<Workspace> beforeSwitch4Max = new Listener<Workspace>(Integer.MAX_VALUE) {

2
designer-realize/src/main/java/com/fanruan/boot/pre/DesignPreStartComponent.java

@ -23,6 +23,7 @@ import com.fr.base.function.UITerminator;
import com.fr.carina.util.CarinaResourceUtils;
import com.fr.carina.util.provider.CarinaResourceProvider;
import com.fr.design.DesignerEnvManager;
import com.fr.design.constants.DesignerLaunchStatus;
import com.fr.design.deeplink.DeepLinkManager;
import com.fr.design.fun.OemProcessor;
import com.fr.design.mainframe.messagecollect.StartErrorMessageCollector;
@ -236,6 +237,7 @@ public class DesignPreStartComponent {
PreLoadService.getInstance().addUIFuture(initLookAndFeel);
showSplash();
DesignerLaunchStatus.setStatusAndAsyncFire(DesignerLaunchStatus.UI_PRE_INIT_COMPLETE);
}
/**

12
designer-realize/src/main/java/com/fr/design/mainframe/AuthorityToolBarPane.java

@ -1,6 +1,7 @@
package com.fr.design.mainframe;
import com.fine.theme.utils.FineUIScale;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.file.HistoryTemplateListPane;
@ -37,7 +38,10 @@ import java.awt.event.MouseListener;
import java.util.List;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.flex;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineUIScale.scale;
/**
* Author : daisy
@ -134,14 +138,14 @@ public class AuthorityToolBarPane<T extends WebContent> extends BasicBeanPane<Re
public AuthorityToolBarPane() {
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(0, PRE_GAP, 10, 0));
this.setBorder(new ScaledEmptyBorder(0, PRE_GAP, 10, 0));
title = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Toolbar_Choose_Role"));
title.setHorizontalAlignment(SwingConstants.LEFT);
title.setPreferredSize(new Dimension(FineUIScale.scale(120), title.getHeight()));
title.setPreferredSize(new Dimension(scale(120), title.getHeight()));
choseComboBox = new UIComboBox(CHOOSEITEM) {
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
dim.width = COMBOX_WIDTH;
dim.width = scale(COMBOX_WIDTH);
return dim;
}
};
@ -158,7 +162,7 @@ public class AuthorityToolBarPane<T extends WebContent> extends BasicBeanPane<Re
authorityEditToolBarPane.setAuthorityToolBarPane(this);
checkToolBarPaneEnable();
toolBarPane.setOpaque(false);
this.add(row(10, cell(title), cell(choseComboBox), cell(toolBarPane)).getComponent());
this.add(row(10, cell(title), cell(choseComboBox), column(flex(), cell(toolBarPane), flex())).getComponent());
}

3
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePaneAuthorityEditPane.java

@ -1,5 +1,6 @@
package com.fr.design.mainframe;
import com.fine.theme.utils.FineUIScale;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.editor.ValueEditorPane;
import com.fr.design.editor.ValueEditorPaneFactory;
@ -54,7 +55,7 @@ public class ElementCasePaneAuthorityEditPane extends AuthorityEditPane {
private static final int NEW_VALUE = 4;
//新值下面的编辑器的宽度
private static final int NEW_PANE_WIDTH = 120;
private static final Dimension VALUEPANE_NEW_DIMENSION = new Dimension(154,20);
private static final Dimension VALUEPANE_NEW_DIMENSION = FineUIScale.scale(new Dimension(154,20));
private static final Dimension VALUEPANE_OLD_DIMENSION = new Dimension(0,0);

4
designer-realize/src/main/java/com/fr/design/report/ReportExportAttrPane.java

@ -45,8 +45,8 @@ public class ReportExportAttrPane extends BasicPane {
}
private void initPane(BasicStorePane<?> exportPane) {
tabPaneBuilder.addTab(new ImageExportPane().getTitle(), new ImageExportPane());
paneList.add(new ImageExportPane());
tabPaneBuilder.addTab(exportPane.getTitle(), exportPane);
paneList.add(exportPane);
}
@Override

11
designer-realize/src/main/java/com/fr/design/webattr/ServerFitAttrPane.java

@ -79,15 +79,6 @@ public class ServerFitAttrPane extends BaseFitAttrPane {
};
}
/**
* 服务器配置-PC端自适应属性面板中需要添加提示
*/
@Override
protected void initPrompt() {
UILabel uiLabel = new UILabel(Toolkit.i18nText("Fine-Designer_Fit_Attr_Pane_Hint"));
FineUIStyle.setStyle(uiLabel, FineUIStyle.LABEL_TIP);
uiLabel.setBorder(new ScaledEmptyBorder(5, 5, 5, 0));
contentJPanel.add(uiLabel);
}
}

3
designer-realize/src/main/java/com/fr/start/CarinaDesigner.java

@ -10,11 +10,9 @@ import com.fanruan.gui.UiInspector;
import com.fr.base.StateHubContext;
import com.fr.design.backup.DesignContext;
import com.fr.design.carton.SwitchForSwingChecker;
import com.fr.design.carton.latency.DesignerLatencyMetric;
import com.fr.design.mainframe.DesignerUIModeConfig;
import com.fr.log.FineLoggerFactory;
import com.fr.runtime.FineRuntime;
import com.fr.start.common.DesignerStartupContext;
import com.fr.start.module.StartupArgs;
@ -65,6 +63,7 @@ public class CarinaDesigner extends MainDesigner{
FineLoggerFactory.getLogger().info("Designer started.Time used {} ms", DesignerStartupContext.getRecorder().getTime(TimeUnit.MILLISECONDS));
DesignerStartupContext.getRecorder().stop();
DesignerStartupMetric.getInstance().asyncSubmit();
SwitchForSwingChecker.initThreadMonitoring();
DesignerLatencyMetric.getInstance().start();
}

94
designer-realize/src/main/java/com/fr/start/DesignerStartupMetric.java

@ -0,0 +1,94 @@
package com.fr.start;
import com.fr.concurrent.FineExecutors;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.mainframe.SiteCenterToken;
import com.fr.design.metric.AbstractDesignerMetric;
import com.fr.general.CloudCenter;
import com.fr.general.http.HttpToolbox;
import com.fr.json.JSONObject;
import com.fr.json.revise.EmbedJson;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils;
import com.fr.start.common.DesignerStartupContext;
import com.fr.startup.metric.DesignerMetrics;
import com.fr.startup.metric.DesignerStartupModel;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* fbp设计器启动埋点提交
*
* @author Bruce.Deng
* @since 11.0
* Created on 2024/9/5
*/
public class DesignerStartupMetric extends AbstractDesignerMetric {
private static final String LANDING_TIME = "landingTime";
private static final String STARTING_TIME = "startingTime";
private static final String MODE = "mode";
private static final String INFO = "info";
private static volatile DesignerStartupMetric instance = new DesignerStartupMetric();
private static final String DESIGNER_START_TABLE_SUFFIX = "record_of_fbp_designerStartTime/single";
private DesignerStartupMetric() {
}
/**
* 获取单例
*/
public static DesignerStartupMetric getInstance() {
return instance;
}
/**
* 延迟5分钟提交埋点数据
*
*/
public void asyncSubmit() {
ScheduledExecutorService scheduledExecutorService = FineExecutors.newSingleThreadScheduledExecutor(new NamedThreadFactory("DesignerStartupMetricSubmit"));
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
collectAndSubmit();
}
}, 5, TimeUnit.MINUTES);
scheduledExecutorService.shutdown();
}
private void collectAndSubmit() {
Map<String, Object> para = new HashMap<>();
para.put("token", SiteCenterToken.generateToken());
para.put("content", collect());
try {
HttpToolbox.post(getUrl(), para);
FineLoggerFactory.getLogger().debug("[DesignerStartup] submit designer startup metric to cloud.");
} catch (Throwable t) {
FineLoggerFactory.getLogger().debug(t,"[DesignerStartup] failed to submit designer startup metric to cloud.");
}
}
private String getUrl() {
String monitorEntry = CloudCenter.getInstance().acquireUrlByKind("cloud.monitor.api.entrypoint");
String url = (StringUtils.isNotEmpty(monitorEntry) ? monitorEntry : DEFAULT_MONITOR_URL)
+ DESIGNER_START_TABLE_SUFFIX;
return url;
}
private JSONObject collect() {
JSONObject info = new JSONObject();
DesignerMetrics designerMetrics = DesignerStartupContext.getInstance().getDesignerMetrics();
DesignerStartupModel model = designerMetrics.getModel();
info.put(LANDING_TIME, model.getLandingTime());
info.put(STARTING_TIME, model.getStartingTime());
info.put(MODE, model.getMode());
info.put(INFO, EmbedJson.encode(model.getInfo()));
addDefaultMetric(info);
return info;
}
}
Loading…
Cancel
Save