diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/SslPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/SslPane.java index 10cd4e5e2f..62e6666acd 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/SslPane.java +++ b/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(); diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/LocalTableDataSource.java b/designer-base/src/main/java/com/fr/design/data/tabledata/LocalTableDataSource.java index 5c70a87536..25acc3da90 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/LocalTableDataSource.java +++ b/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 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 getAllTableData() { diff --git a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java b/designer-base/src/main/java/com/fr/file/FILEChooserPane.java index 9d21751c28..5018f37349 100644 --- a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java +++ b/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; diff --git a/designer-base/src/main/java/com/fr/file/FileCAFILE.java b/designer-base/src/main/java/com/fr/file/FileCAFILE.java new file mode 100644 index 0000000000..78ea400447 --- /dev/null +++ b/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 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 getChildren() { + return children; + } + + public void setChildren(List 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 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 beans = getBeans(); + Map 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 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; + } + + +}