Browse Source

REPORT-133186 【fr-fbp回归】【数据集】fbp设计器远程设计,新建mysql数据连接,开启SSL通道后读不到CA证书

fbp/merge
Destiny.Lin 5 months ago
parent
commit
5e649c4757
  1. 2
      designer-base/src/main/java/com/fr/design/data/datapane/connect/SslPane.java
  2. 9
      designer-base/src/main/java/com/fr/design/data/tabledata/LocalTableDataSource.java
  3. 46
      designer-base/src/main/java/com/fr/file/FILEChooserPane.java
  4. 151
      designer-base/src/main/java/com/fr/file/FileCAFILE.java

2
designer-base/src/main/java/com/fr/design/data/datapane/connect/SslPane.java

@ -146,7 +146,7 @@ public class SslPane extends BasicPane {
@Override
public void actionPerformed(ActionEvent e) {
FILEChooserPane fileChooser = FILEChooserPane.getInstanceWithDesignatePath(SslUtils.PREFIX, new ChooseFileFilter(true), SslUtils.CERTIFICATES);
FILEChooserPane fileChooser = FILEChooserPane.getFileCAChoosePane(new ChooseFileFilter(true));
int type = fileChooser.showOpenDialog(SslPane.this, StringUtils.EMPTY);
if (type == FILEChooserPane.OK_OPTION) {
final FILE file = fileChooser.getSelectedFILE();

9
designer-base/src/main/java/com/fr/design/data/tabledata/LocalTableDataSource.java

@ -7,9 +7,12 @@ import com.fr.decision.webservice.bean.dataset.FileDataSetBean;
import com.fr.decision.webservice.bean.dataset.ServerDataSetBean;
import com.fr.decision.webservice.bean.entry.FileNodeBean;
import com.fr.decision.webservice.v10.datasource.dataset.processor.impl.FileProcessor;
import com.fr.decision.webservice.v10.file.FileNodeService;
import com.fr.design.data.datapane.preview.TableDataBeanHelper;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.CommonUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.project.ProjectConstants;
import com.fr.workspace.server.repository.tabledata.BaseTableDataSource;
import java.util.ArrayList;
@ -67,6 +70,12 @@ public class LocalTableDataSource extends BaseTableDataSource {
}
}
@Override
public List<FileNodeBean> getCertificatesFile(String keyword) throws Exception {
String pPath = CommonUtils.pathJoin(ProjectConstants.RESOURCES_NAME, ProjectConstants.CERTIFICATES_DIRECTORY);
return FileNodeService.getInstance().getAllRecursiveFileNodes(pPath, ProjectConstants.RESOURCES_NAME, keyword);
}
@Override
public List<ServerDataSetBean> getAllTableData() {

46
designer-base/src/main/java/com/fr/file/FILEChooserPane.java

@ -252,6 +252,21 @@ public class FILEChooserPane extends BasicPane {
return chooserPane;
}
/**
* 获取CA证书的文件选择面板
*/
public static FILEChooserPane getFileCAChoosePane(FILEFilter filter) {
FILEChooserPane chooserPane = new FILEChooserPane();
chooserPane.showEnv = true;
chooserPane.showLoc = false;
chooserPane.showWebReport = false;
// 替换掉 PlaceListModel
chooserPane.setFileCAPlaceListModel();
chooserPane.removeAllFilter();
chooserPane.addChooseFILEFilter(filter, 0);
return chooserPane;
}
/**
* @param showEnv
@ -1128,6 +1143,13 @@ public class FILEChooserPane extends BasicPane {
setPlaceListModel(new FileDataPlaceListModel(type));
}
protected void setFileCAPlaceListModel() {
if (placesList == null) {
return;
}
setPlaceListModel(new FileCAPlaceListModel());
}
/*
* 选中文件
*/
@ -1385,6 +1407,30 @@ public class FILEChooserPane extends BasicPane {
}
private class FileCAPlaceListModel extends AbstractPlaceListModel {
private FileCAFILE envFILE;
FileCAPlaceListModel() {
envFILE = new FileCAFILE(new FileNode(StableUtils.pathJoin(ProjectConstants.RESOURCES_NAME, ProjectConstants.CERTIFICATES_DIRECTORY), true), false, StableUtils.pathJoin(ProjectConstants.ASSETS_NAME, FileDataFILE.FILE_DATASET_NAME)) {
@Override
public String getName() {
return getEnvProjectName();
}
};
}
@Override
public FILE getElementAt(int index) {
return envFILE;
}
@Override
public int getSize() {
return 1 + filesOfSystem.size();
}
}
private class MultiLocalEnvPlaceListModel extends AbstractPlaceListModel {
private static final long serialVersionUID = 6300018896958532154L;

151
designer-base/src/main/java/com/fr/file/FileCAFILE.java

@ -0,0 +1,151 @@
package com.fr.file;
import com.fr.decision.webservice.bean.entry.FileNodeBean;
import com.fr.file.filetree.FileNode;
import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.CoreConstants;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import com.fr.workspace.server.repository.tabledata.TableDataRepository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* CA证书文件相关
*
* @author Destiny.Lin
* @since 11.0
* Created on 2024/9/8
*/
public class FileCAFILE extends FileNodeFILE{
private List<FileCAFILE> children = new ArrayList<>();
private boolean builded = false;
private String id = StringUtils.EMPTY;
public FileCAFILE(FileNode node) {
super(node);
}
public FileCAFILE(FileNode node, boolean builded, String id) {
super(node);
this.builded = builded;
this.id = id;
}
/**
* 添加子
*/
private void addChild(FileCAFILE file) {
children.add(file);
}
public List<FileCAFILE> getChildren() {
return children;
}
public void setChildren(List<FileCAFILE> children) {
this.children = children;
}
public boolean isBuilded() {
return builded;
}
public void setBuilded(boolean builded) {
this.builded = builded;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public FILE[] listFiles() {
if (ComparatorUtils.equals(node, null)) {
node = new FileNode(CoreConstants.SEPARATOR, true);
}
if (!node.isDirectory()) {
return new FILE[]{this};
}
try {
FileCAFILE root = null;
if (!this.builded) {
root = buildTree();
FileCAFILE dataFILE = root.getFileCAFILE(this.id);
this.setChildren(dataFILE.getChildren());
this.builded = true;
}
return this.getChildren().toArray(new FILE[0]);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return new FILE[0];
}
}
private List<FileNodeBean> getBeans() {
try {
return TableDataRepository.getInstance().getCertificatesFile(StringUtils.EMPTY);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 递归获取指定id的文件
*/
public FileCAFILE getFileCAFILE(String id) {
if (StringUtils.equals(this.id, id) || StringUtils.equals(StableUtils.pathJoin(this.id, StringUtils.EMPTY), id)) {
return this;
}
for (FileCAFILE file : getChildren()) {
return file.getFileCAFILE(id);
}
return null;
}
private FileCAFILE buildTree() {
List<FileNodeBean> beans = getBeans();
Map<String, FileCAFILE> tree = new HashMap<>();
FileCAFILE root = null;
// id , 父
for (FileNodeBean bean : beans) {
FileNode fileNode = new FileNode();
fileNode.setEnvPath(bean.getPath());
fileNode.setDirectory(bean.getIsParent());
tree.putIfAbsent(bean.getId(), new FileCAFILE(fileNode, true, bean.getId()));
if (StringUtils.isEmpty(bean.getpId())) {
root = tree.get(bean.getId());
} else {
tree.putIfAbsent(bean.getpId(), createParent(bean.getpId(), beans));
FileCAFILE file = tree.get(bean.getpId());
if (file != null) {
file.addChild(tree.get(bean.getId()));
}
}
}
return root;
}
private FileCAFILE createParent(String s, List<FileNodeBean> beans) {
for (FileNodeBean bean : beans) {
if (StringUtils.equals(bean.getId(), s)) {
FileNode fileNode = new FileNode();
fileNode.setEnvPath(bean.getPath());
fileNode.setDirectory(bean.getIsParent());
return new FileCAFILE(fileNode, true, bean.getId());
}
}
return null;
}
}
Loading…
Cancel
Save