From 526a43c7c6ba0bad42a3611795516cb54370b19d Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 15 Oct 2019 11:42:44 +0800 Subject: [PATCH 1/8] =?UTF-8?q?REPORT-21017=E3=80=90=E6=96=B0=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E3=80=91=E5=A2=9E=E5=8A=A0cptx=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=8F=8A=E7=9B=B8=E5=85=B3=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itree/filetree/FileNodeConstants.java | 4 +- .../gui/itree/filetree/FileTreeIcon.java | 29 ++++++++++-- .../AbstractNewTemplateFileProvider.java | 20 ++++++++ .../com/fr/design/mainframe/JTemplate.java | 32 +++++++++++-- .../mainframe/NewTemplateFileProvider.java | 46 +++++++++++++++++++ .../java/com/fr/file/FILEChooserPane.java | 25 +++++----- .../itree/filetree/FileNodeConstantsTest.java | 39 ++++++++++++---- .../java/com/fr/file/FILEChooserPaneTest.java | 38 +++++++++++++++ .../java/com/fr/design/mainframe/JForm.java | 14 ++++++ .../com/fr/design/mainframe/JWorkBook.java | 9 ++++ 10 files changed, 226 insertions(+), 30 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java create mode 100644 designer-base/src/test/java/com/fr/file/FILEChooserPaneTest.java diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java index 8c5f0e154..256fee21b 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java @@ -55,12 +55,14 @@ public class FileNodeConstants { private static void initSupportedTypes() { try { rwl.writeLock().lock(); - supportFileType = new ArrayList<>(Arrays.asList(FRContext.getFileNodes().getSupportedTypes())); + supportFileType = new ArrayList(); //通过插件扩展的 Set apps = ExtraDesignClassManager.getInstance().getArray(App.MARK_STRING); for (App app : apps) { addAppExtensions(app.defaultExtensions()); } + supportFileType.addAll(Arrays.asList(FRContext.getFileNodes().getSupportedTypes())); + } finally { rwl.writeLock().unlock(); } diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java index b0e26cc80..1a84fa169 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java @@ -1,7 +1,9 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.BaseUtils; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.icon.LockIcon; +import com.fr.design.mainframe.NewTemplateFileProvider; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.stable.StableUtils; @@ -11,6 +13,7 @@ import javax.swing.Icon; import javax.swing.UIManager; import javax.swing.filechooser.FileSystemView; import java.io.File; +import java.util.Set; public class FileTreeIcon { private FileTreeIcon() { @@ -146,16 +149,36 @@ public class FileTreeIcon { if (node.isDirectory()) { return FileTreeIcon.FOLDER_IMAGE_ICON; } - return FileSystemView.getFileSystemView().getSystemIcon(new File(path)); + return getLocalFileIcon(path); } } if (node.isDirectory()) { return FileTreeIcon.FOLDER_IMAGE_ICON; } else { - return FileTreeIcon.getIcon(FileTreeIcon.getFileType(node.getName()), isShowLock); + return getRemoteFileIcon(node, isShowLock); } } + private static Icon getLocalFileIcon(String path) { + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); + for (NewTemplateFileProvider provider : providers) { + if (provider.getLocalFileIcon(path) != null) { + return provider.getLocalFileIcon(path); + } + } + return FileSystemView.getFileSystemView().getSystemIcon(new File(path)); + } + + private static Icon getRemoteFileIcon(FileNode node, boolean isShowLock){ + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); + for (NewTemplateFileProvider provider : providers) { + if (provider.getRemoteFileIcon(node, isShowLock) != null) { + return provider.getRemoteFileIcon(node, isShowLock); + } + } + return FileTreeIcon.getIcon(FileTreeIcon.getFileType(node.getName()), isShowLock); + } + private static Icon getIcon(int fileType, boolean isLocked) { if (fileType == JAVA_FILE) { if (isLocked) { @@ -293,4 +316,4 @@ public class FileTreeIcon { return TEXT_FILE; } } -} \ No newline at end of file +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java new file mode 100644 index 000000000..64a6f480f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java @@ -0,0 +1,20 @@ +package com.fr.design.mainframe; + +import com.fr.stable.fun.mark.API; + +/** + * Created by kerry on 2019-10-14 + */ +@API(level = NewTemplateFileProvider.CURRENT_LEVEL) +public abstract class AbstractNewTemplateFileProvider implements NewTemplateFileProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} 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 852130c1e..1daeb4d81 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 @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.Parameter; import com.fr.base.ScreenResolution; +import com.fr.base.extension.FileExtension; import com.fr.base.io.BaseBook; import com.fr.base.iofile.attr.DesignBanCopyAttrMark; import com.fr.base.iofile.attr.TemplateIdAttrMark; @@ -12,7 +13,6 @@ 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; @@ -49,6 +49,7 @@ import com.fr.design.write.submit.DBManipulationPane; import com.fr.file.FILE; import com.fr.file.FILEChooserPane; import com.fr.file.MemFILE; +import com.fr.file.filter.ChooseFileFilter; import com.fr.form.ui.NoneWidget; import com.fr.form.ui.Widget; import com.fr.general.ComparatorUtils; @@ -575,6 +576,7 @@ public abstract class JTemplate> String oldName = this.getPath(); // alex:如果是SaveAs的话需要让用户来选择路径了 FILEChooserPane fileChooser = getFILEChooserPane(isShowLoc); + addChooseFILEFilter(fileChooser); fileChooser.setFileNameTextField(fileName, this.suffix()); int chooseResult = fileChooser.showSaveDialog(DesignerContext.getDesignerFrame(), this.suffix()); @@ -625,6 +627,16 @@ public abstract class JTemplate> } } + protected void addChooseFILEFilter(FILEChooserPane fileChooser){ + String appName = ProductConstants.APP_NAME; + fileChooser.addChooseFILEFilter(new ChooseFileFilter(FileExtension.CPT, appName + Toolkit.i18nText("Fine-Design_Report_Template_File"))); + if (FileExtension.FRM.matchExtension(this.suffix())) { + // richer:form文件 daniel 改成三个字 + fileChooser.addChooseFILEFilter(new ChooseFileFilter(FileExtension.FRM, appName + Toolkit.i18nText("Fine-Design_Report_Template_File"))); + } + + } + // 保存新模板时会进入此方法(新建模板直接保存,或者另存为) protected boolean saveNewFile(FILE editingFILE, String oldName) { String originID = StringUtils.EMPTY; @@ -635,13 +647,25 @@ public abstract class JTemplate> initForCollect(); this.editingFILE = editingFILE; - boolean result = this.saveFile(); + boolean result = this.saveToNewFile(oldName); if (result) { DesignerFrameFileDealerPane.getInstance().refresh(); collectInfo(originID); } - //更换最近打开 - DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getPath()); + return result; + } + + protected boolean saveToNewFile(String oldName){ + boolean result = false; + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); + for (NewTemplateFileProvider provider : providers) { + result = result || provider.saveToNewFile(this.editingFILE.getPath(), this); + } + if(!result && FileExtension.CPT.matchExtension(this.editingFILE.getPath())){ + result = result || this.saveFile(); + //更换最近打开 + DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldName, this.getPath()); + } return result; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java new file mode 100644 index 000000000..e14a54d7b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java @@ -0,0 +1,46 @@ +package com.fr.design.mainframe; + +import com.fr.file.FILEChooserPane; +import com.fr.file.filetree.FileNode; +import com.fr.stable.fun.mark.Mutable; + +import javax.swing.Icon; + +/** + * Created by kerry on 2019-10-11 + */ +public interface NewTemplateFileProvider extends Mutable { + + int CURRENT_LEVEL = 1; + + String XML_TAG = "NewFileTypeProvider"; + + /** + * 向文件选择器中添加指定文件类型过滤器 + * @param fileChooser 文件选择器 + * @param suffix 文件后缀 + */ + void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); + + /** + * 获取本地目录文件关联的icon + * @param path 文件路径 + * @return 对应的图标 + */ + Icon getLocalFileIcon(String path); + + /** + * 获取远程目录文件关联的icon + * @param node 文件节点 + * @param isShowLock 是否显示被锁住 + * @return 对应的图标 + */ + Icon getRemoteFileIcon(FileNode node, boolean isShowLock); + + /** + * 保存为新类型文件 + * @param targetPath 目标路径 + * @param jTemplate 模板对象 + */ + boolean saveToNewFile(String targetPath, JTemplate jTemplate); +} 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 fc4a5dfea..7c6e56bb7 100644 --- a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java +++ b/designer-base/src/main/java/com/fr/file/FILEChooserPane.java @@ -782,12 +782,7 @@ public class FILEChooserPane extends BasicPane { } } //jerry 26216 只保留.cpt .frm有用的格式,并且不可编辑 - if (type == JFileChooser.OPEN_DIALOG) { - postfixComboBox.setEnabled(true); - } else { - postfixComboBox.setEnabled(false); - } - + postfixComboBox.setEnabled(true); //只有一个类型时不可下拉 if (filterList.size() == 1) { postfixComboBox.setEnabled(false); @@ -841,14 +836,7 @@ public class FILEChooserPane extends BasicPane { private void saveDialog() { String filename = fileNameTextField.getText(); - if (!filename.endsWith(suffix)) { - ChooseFileFilter chooseFileFilter = (ChooseFileFilter) (postfixComboBox.getSelectedItem()); - if (chooseFileFilter != null && StringUtils.isNotEmpty(chooseFileFilter.getExtensionString())) { - fileNameTextField.setText(filename + chooseFileFilter.getExtensionString()); - } else { - fileNameTextField.setText(filename + this.suffix); - } - } + fileNameTextField.setText(calFileNameText(filename, (ChooseFileFilter) (postfixComboBox.getSelectedItem()))); option = OK_OPTION; FILE selectedFile = this.getSelectedFILE(); @@ -874,6 +862,15 @@ public class FILEChooserPane extends BasicPane { } } + private String calFileNameText(String currentValue, ChooseFileFilter selectFileFilter) { + if (selectFileFilter == null || StringUtils.isEmpty(selectFileFilter.getExtensionString())) { + return currentValue + this.suffix; + } else if (!currentValue.endsWith(selectFileFilter.getExtensionString())) { + return currentValue + selectFileFilter.getExtensionString(); + } + return currentValue; + } + private boolean access(FILE selectedFile) { boolean access = false; try { diff --git a/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java b/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java index 67f082456..a12ae6c14 100644 --- a/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java +++ b/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java @@ -11,6 +11,10 @@ import com.fr.stable.fun.mark.Mutable; import org.easymock.EasyMock; import org.junit.Assert; 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.HashSet; import java.util.Set; @@ -18,23 +22,42 @@ import java.util.Set; /** * Created by alex sung on 2019/7/25. */ +@RunWith(PowerMockRunner.class) +@PrepareForTest(ExtraDesignClassManager.class) public class FileNodeConstantsTest { @Test - public void supportFileTypesTest(){ - ExtraDesignClassManager extra = EasyMock.mock(ExtraDesignClassManager.class); - Set apps = new HashSet(){{add(new MockCptxApp());}}; - EasyMock.expect(extra.getArray(App.MARK_STRING)).andReturn(apps).anyTimes(); - EasyMock.replay(extra); - + public void supportFileTypesTest() { + ExtraDesignClassManager extra = mockExtraDesignClassManager(); Assert.assertEquals(1, extra.getArray(App.MARK_STRING).size()); App app = (App) extra.getArray(App.MARK_STRING).iterator().next(); Assert.assertEquals("cptx", app.defaultExtensions()[0]); } - private class MockCptxApp extends AbstractAppProvider{ + @Test + public void testSupportFileTypesOrder() { + ExtraDesignClassManager extra = mockExtraDesignClassManager(); + PowerMock.mockStatic(ExtraDesignClassManager.class); + EasyMock.expect(ExtraDesignClassManager.getInstance()).andReturn(extra).once(); + PowerMock.replayAll(); + String[] fileTypes = FileNodeConstants.getSupportFileTypes(); + Assert.assertEquals("cptx", fileTypes[0]); + Assert.assertEquals("cpt", fileTypes[1]); + } + + private ExtraDesignClassManager mockExtraDesignClassManager() { + ExtraDesignClassManager extra = EasyMock.mock(ExtraDesignClassManager.class); + Set apps = new HashSet() {{ + add(new MockCptxApp()); + }}; + EasyMock.expect(extra.getArray(App.MARK_STRING)).andReturn(apps).anyTimes(); + EasyMock.replay(extra); + return extra; + } + + private class MockCptxApp extends AbstractAppProvider { @Override public String[] defaultExtensions() { - return new String[] {FileExtension.CPTX.getExtension()}; + return new String[]{FileExtension.CPTX.getExtension()}; } @Override diff --git a/designer-base/src/test/java/com/fr/file/FILEChooserPaneTest.java b/designer-base/src/test/java/com/fr/file/FILEChooserPaneTest.java new file mode 100644 index 000000000..d3d601c28 --- /dev/null +++ b/designer-base/src/test/java/com/fr/file/FILEChooserPaneTest.java @@ -0,0 +1,38 @@ +package com.fr.file; + +import com.fr.base.extension.FileExtension; +import com.fr.file.filter.ChooseFileFilter; +import com.fr.invoke.Reflect; +import com.fr.stable.StringUtils; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by kerry on 2019-10-15 + */ + +public class FILEChooserPaneTest { + @Test + public void testAddChooseFileFilter() { + FILEChooserPane chooserPane = Reflect.on(FILEChooserPane.class).field("INSTANCE").get(); + String result1 = Reflect.on(chooserPane).call("calFileNameText", "WorkBook1.cpt", null).get(); + Assert.assertEquals("WorkBook1.cptnull", result1); + + ChooseFileFilter chooseFileFilter1 = new ChooseFileFilter(FileExtension.CPT, StringUtils.EMPTY); + String result2 = Reflect.on(chooserPane).call("calFileNameText", "WorkBook1.cpt", chooseFileFilter1).get(); + Assert.assertEquals("WorkBook1.cpt", result2); + + ChooseFileFilter chooseFileFilter2 = new ChooseFileFilter(FileExtension.CPTX, StringUtils.EMPTY); + String result3 = Reflect.on(chooserPane).call("calFileNameText", "WorkBook1.cpt", chooseFileFilter2).get(); + Assert.assertEquals("WorkBook1.cpt.cptx", result3); + + ChooseFileFilter chooseFileFilter3 = new ChooseFileFilter(FileExtension.CPT, StringUtils.EMPTY); + String result4 = Reflect.on(chooserPane).call("calFileNameText", "WorkBook1.cptx", chooseFileFilter3).get(); + Assert.assertEquals("WorkBook1.cptx.cpt", result4); + + ChooseFileFilter chooseFileFilter5 = new ChooseFileFilter(FileExtension.CPTX, StringUtils.EMPTY); + String result5 = Reflect.on(chooserPane).call("calFileNameText", "WorkBook1.cptx", chooseFileFilter5).get(); + Assert.assertEquals("WorkBook1.cptx", result5); + } + +} 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 6b8cbbe5d..0abafdabd 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 @@ -3,6 +3,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.PaperSize; import com.fr.base.Parameter; +import com.fr.base.extension.FileExtension; import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignState; import com.fr.design.actions.FormMobileAttrAction; @@ -34,6 +35,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.xpane.FormHyperlinkGroupPane; import com.fr.design.gui.xpane.FormHyperlinkGroupPaneNoPop; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; @@ -52,6 +54,8 @@ import com.fr.design.report.fit.menupane.ReportFitAttrAction; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.utils.gui.LayoutUtils; import com.fr.file.FILE; +import com.fr.file.FILEChooserPane; +import com.fr.file.filter.ChooseFileFilter; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.main.Form; @@ -66,6 +70,7 @@ import com.fr.report.cell.cellattr.CellImage; import com.fr.report.worksheet.FormElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; +import com.fr.stable.ProductConstants; import com.fr.stable.bridge.StableFactory; import com.fr.web.controller.ViewRequestConstants; @@ -949,4 +954,13 @@ public class JForm extends JTemplate implements BaseJForm { public String route() { return ViewRequestConstants.REPORT_VIEW_PATH; } + + protected void addChooseFILEFilter(FILEChooserPane fileChooser){ + super.addChooseFILEFilter(fileChooser); + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); + for (NewTemplateFileProvider provider : providers) { + provider.addChooseFileFilter(fileChooser, this.suffix()); + } + } } From 157a846b219496b6b88daaed35e3020029bf5761 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 15 Oct 2019 11:52:04 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/fun/NewTemplateFileProvider.java | 47 +++++++++++++++++++ .../impl/AbstractNewTemplateFileProvider.java | 21 +++++++++ .../gui/itree/filetree/FileTreeIcon.java | 2 +- .../com/fr/design/mainframe/JTemplate.java | 1 + .../com/fr/design/mainframe/JWorkBook.java | 1 + 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java create mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java diff --git a/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java new file mode 100644 index 000000000..34f811ae0 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java @@ -0,0 +1,47 @@ +package com.fr.design.fun; + +import com.fr.design.mainframe.JTemplate; +import com.fr.file.FILEChooserPane; +import com.fr.file.filetree.FileNode; +import com.fr.stable.fun.mark.Mutable; + +import javax.swing.Icon; + +/** + * Created by kerry on 2019-10-11 + */ +public interface NewTemplateFileProvider extends Mutable { + + int CURRENT_LEVEL = 1; + + String XML_TAG = "NewFileTypeProvider"; + + /** + * 向文件选择器中添加指定文件类型过滤器 + * @param fileChooser 文件选择器 + * @param suffix 文件后缀 + */ + void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); + + /** + * 获取本地目录文件关联的icon + * @param path 文件路径 + * @return 对应的图标 + */ + Icon getLocalFileIcon(String path); + + /** + * 获取远程目录文件关联的icon + * @param node 文件节点 + * @param isShowLock 是否显示被锁住 + * @return 对应的图标 + */ + Icon getRemoteFileIcon(FileNode node, boolean isShowLock); + + /** + * 保存为新类型文件 + * @param targetPath 目标路径 + * @param jTemplate 模板对象 + */ + boolean saveToNewFile(String targetPath, JTemplate jTemplate); +} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java new file mode 100644 index 000000000..d460c7b95 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java @@ -0,0 +1,21 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.NewTemplateFileProvider; +import com.fr.stable.fun.mark.API; + +/** + * Created by kerry on 2019-10-14 + */ +@API(level = NewTemplateFileProvider.CURRENT_LEVEL) +public abstract class AbstractNewTemplateFileProvider implements NewTemplateFileProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java index 1a84fa169..a453d0a94 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java @@ -3,7 +3,7 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.BaseUtils; import com.fr.design.ExtraDesignClassManager; import com.fr.design.icon.LockIcon; -import com.fr.design.mainframe.NewTemplateFileProvider; +import com.fr.design.fun.NewTemplateFileProvider; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.stable.StableUtils; 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 1daeb4d81..c862b0caa 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 @@ -27,6 +27,7 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.DesignerFrameUpButtonProvider; import com.fr.design.fun.MenuHandler; +import com.fr.design.fun.NewTemplateFileProvider; import com.fr.design.fun.PreviewProvider; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; 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 90e30c0c9..7822f7d85 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 @@ -34,6 +34,7 @@ import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.fun.NewTemplateFileProvider; import com.fr.design.fun.PreviewProvider; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; From 83b322a9cb9c16eeaf31992e60252c46f44d2c48 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 15 Oct 2019 11:52:13 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractNewTemplateFileProvider.java | 20 -------- .../mainframe/NewTemplateFileProvider.java | 46 ------------------- 2 files changed, 66 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java deleted file mode 100644 index 64a6f480f..000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/AbstractNewTemplateFileProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.fr.design.mainframe; - -import com.fr.stable.fun.mark.API; - -/** - * Created by kerry on 2019-10-14 - */ -@API(level = NewTemplateFileProvider.CURRENT_LEVEL) -public abstract class AbstractNewTemplateFileProvider implements NewTemplateFileProvider { - - @Override - public int currentAPILevel() { - return CURRENT_LEVEL; - } - - @Override - public String mark4Provider() { - return getClass().getName(); - } -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java deleted file mode 100644 index e14a54d7b..000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/NewTemplateFileProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.fr.design.mainframe; - -import com.fr.file.FILEChooserPane; -import com.fr.file.filetree.FileNode; -import com.fr.stable.fun.mark.Mutable; - -import javax.swing.Icon; - -/** - * Created by kerry on 2019-10-11 - */ -public interface NewTemplateFileProvider extends Mutable { - - int CURRENT_LEVEL = 1; - - String XML_TAG = "NewFileTypeProvider"; - - /** - * 向文件选择器中添加指定文件类型过滤器 - * @param fileChooser 文件选择器 - * @param suffix 文件后缀 - */ - void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); - - /** - * 获取本地目录文件关联的icon - * @param path 文件路径 - * @return 对应的图标 - */ - Icon getLocalFileIcon(String path); - - /** - * 获取远程目录文件关联的icon - * @param node 文件节点 - * @param isShowLock 是否显示被锁住 - * @return 对应的图标 - */ - Icon getRemoteFileIcon(FileNode node, boolean isShowLock); - - /** - * 保存为新类型文件 - * @param targetPath 目标路径 - * @param jTemplate 模板对象 - */ - boolean saveToNewFile(String targetPath, JTemplate jTemplate); -} From 987c17b553417e9bf906b6bfb4efba7c9d9778ef Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 16 Oct 2019 14:03:33 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fun/NewTemplateFileOptionProvider.java | 47 +++++++++++++++++++ ...AbstractNewTemplateFileOptionProvider.java | 45 ++++++++++++++++++ .../gui/itree/filetree/FileNodeConstants.java | 15 +++--- .../gui/itree/filetree/FileTreeIcon.java | 30 +++++++----- .../com/fr/design/mainframe/JTemplate.java | 6 +-- .../itree/filetree/FileNodeConstantsTest.java | 39 +++++++-------- .../com/fr/design/mainframe/JWorkBook.java | 6 +-- 7 files changed, 140 insertions(+), 48 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java create mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java diff --git a/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java b/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java new file mode 100644 index 000000000..feec821ba --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java @@ -0,0 +1,47 @@ +package com.fr.design.fun; + +import com.fr.decision.extension.report.ReportSupportedFileProvider; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.FILEChooserPane; +import com.fr.stable.fun.mark.Mutable; + +import javax.swing.Icon; + +/** + * Created by kerry on 2019-10-11 + */ +public interface NewTemplateFileOptionProvider extends Mutable { + + int CURRENT_LEVEL = 1; + + String XML_TAG = "NewTemplateFileOptionProvider"; + + /** + * 向文件选择器中添加指定文件类型过滤器 + * @param fileChooser 文件选择器 + * @param suffix 文件后缀 + */ + void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); + + + /** + * 获取对应的新增的支持文件类型 + * @return ReportTemplateFileProvider + */ + ReportSupportedFileProvider getSupportedFile(); + + /** + * 获取文件关联的icon + * @param path 文件路径 + * @param isShowLock 是否显示被锁住 + * @return 对应的图标 + */ + Icon getFileIcon(String path,boolean isShowLock); + + /** + * 保存为新类型文件 + * @param targetPath 目标路径 + * @param jTemplate 模板对象 + */ + boolean saveToNewFile(String targetPath, JTemplate jTemplate); +} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java new file mode 100644 index 000000000..931c4bc65 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java @@ -0,0 +1,45 @@ +package com.fr.design.fun.impl; + +import com.fr.decision.extension.report.ReportSupportedFileProvider; +import com.fr.design.fun.NewTemplateFileOptionProvider; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.FILEChooserPane; +import com.fr.stable.fun.mark.API; + +import javax.swing.Icon; + +/** + * Created by kerry on 2019-10-14 + */ +@API(level = NewTemplateFileOptionProvider.CURRENT_LEVEL) +public abstract class AbstractNewTemplateFileOptionProvider implements NewTemplateFileOptionProvider { + @Override + public void addChooseFileFilter(FILEChooserPane fileChooser, String suffix) { + + } + + @Override + public ReportSupportedFileProvider getSupportedFile() { + return null; + } + + @Override + public Icon getFileIcon(String path, boolean isShowLock) { + return null; + } + + @Override + public boolean saveToNewFile(String targetPath, JTemplate jTemplate) { + return false; + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java index 256fee21b..d0b14804a 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java @@ -1,8 +1,9 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; +import com.fr.base.extension.FileExtension; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.mainframe.App; +import com.fr.design.fun.NewTemplateFileOptionProvider; import com.fr.general.GeneralContext; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; @@ -44,10 +45,10 @@ public class FileNodeConstants { }); } - private static void addAppExtensions(String[] extensions) { + private static void addAppExtensions(FileExtension[] extensions) { for (int i = 0, size = extensions.length; i < size; i++) { - if (!supportFileType.contains(extensions[i])) { - supportFileType.add(extensions[i]); + if (!supportFileType.contains(extensions[i].getExtension())) { + supportFileType.add(extensions[i].getExtension()); } } } @@ -57,9 +58,9 @@ public class FileNodeConstants { rwl.writeLock().lock(); supportFileType = new ArrayList(); //通过插件扩展的 - Set apps = ExtraDesignClassManager.getInstance().getArray(App.MARK_STRING); - for (App app : apps) { - addAppExtensions(app.defaultExtensions()); + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); + for (NewTemplateFileOptionProvider provider : providers) { + addAppExtensions(provider.getSupportedFile().getFileExtensions()); } supportFileType.addAll(Arrays.asList(FRContext.getFileNodes().getSupportedTypes())); diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java index a453d0a94..68c877fb6 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java @@ -3,7 +3,7 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.BaseUtils; import com.fr.design.ExtraDesignClassManager; import com.fr.design.icon.LockIcon; -import com.fr.design.fun.NewTemplateFileProvider; +import com.fr.design.fun.NewTemplateFileOptionProvider; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.stable.StableUtils; @@ -160,25 +160,31 @@ public class FileTreeIcon { } private static Icon getLocalFileIcon(String path) { - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); - for (NewTemplateFileProvider provider : providers) { - if (provider.getLocalFileIcon(path) != null) { - return provider.getLocalFileIcon(path); - } + Icon icon = getExtraIcon(path, false); + if (icon != null) { + return icon; } return FileSystemView.getFileSystemView().getSystemIcon(new File(path)); } - private static Icon getRemoteFileIcon(FileNode node, boolean isShowLock){ - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); - for (NewTemplateFileProvider provider : providers) { - if (provider.getRemoteFileIcon(node, isShowLock) != null) { - return provider.getRemoteFileIcon(node, isShowLock); - } + private static Icon getRemoteFileIcon(FileNode node, boolean isShowLock) { + Icon icon = getExtraIcon(node.getName(), isShowLock); + if (icon != null) { + return icon; } return FileTreeIcon.getIcon(FileTreeIcon.getFileType(node.getName()), isShowLock); } + private static Icon getExtraIcon(String path, boolean isShowLock) { + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); + for (NewTemplateFileOptionProvider provider : providers) { + if (provider.getFileIcon(path, isShowLock) != null) { + return provider.getFileIcon(path, isShowLock); + } + } + return null; + } + private static Icon getIcon(int fileType, boolean isLocked) { if (fileType == JAVA_FILE) { if (isLocked) { 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 c862b0caa..85bd81a72 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 @@ -27,7 +27,7 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.DesignerFrameUpButtonProvider; import com.fr.design.fun.MenuHandler; -import com.fr.design.fun.NewTemplateFileProvider; +import com.fr.design.fun.NewTemplateFileOptionProvider; import com.fr.design.fun.PreviewProvider; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; @@ -658,8 +658,8 @@ public abstract class JTemplate> protected boolean saveToNewFile(String oldName){ boolean result = false; - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); - for (NewTemplateFileProvider provider : providers) { + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); + for (NewTemplateFileOptionProvider provider : providers) { result = result || provider.saveToNewFile(this.editingFILE.getPath(), this); } if(!result && FileExtension.CPT.matchExtension(this.editingFILE.getPath())){ diff --git a/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java b/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java index a12ae6c14..8431344ba 100644 --- a/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java +++ b/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java @@ -1,12 +1,10 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.extension.FileExtension; -import com.fr.base.io.BaseBook; +import com.fr.decision.extension.report.ReportSupportedFileProvider; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.mainframe.AbstractAppProvider; -import com.fr.design.mainframe.App; -import com.fr.design.mainframe.JTemplate; -import com.fr.file.FILE; +import com.fr.design.fun.NewTemplateFileOptionProvider; +import com.fr.design.fun.impl.AbstractNewTemplateFileOptionProvider; import com.fr.stable.fun.mark.Mutable; import org.easymock.EasyMock; import org.junit.Assert; @@ -15,7 +13,6 @@ 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.HashSet; import java.util.Set; @@ -28,9 +25,9 @@ public class FileNodeConstantsTest { @Test public void supportFileTypesTest() { ExtraDesignClassManager extra = mockExtraDesignClassManager(); - Assert.assertEquals(1, extra.getArray(App.MARK_STRING).size()); - App app = (App) extra.getArray(App.MARK_STRING).iterator().next(); - Assert.assertEquals("cptx", app.defaultExtensions()[0]); + Assert.assertEquals(1, extra.getArray(NewTemplateFileOptionProvider.XML_TAG).size()); + NewTemplateFileOptionProvider option = (NewTemplateFileOptionProvider) extra.getArray(NewTemplateFileOptionProvider.XML_TAG).iterator().next(); + Assert.assertEquals(FileExtension.CPTX, option.getSupportedFile().getFileExtensions()[0]); } @Test @@ -46,29 +43,25 @@ public class FileNodeConstantsTest { private ExtraDesignClassManager mockExtraDesignClassManager() { ExtraDesignClassManager extra = EasyMock.mock(ExtraDesignClassManager.class); - Set apps = new HashSet() {{ - add(new MockCptxApp()); + Set options = new HashSet() {{ + add(new MockNewTemplateFileOption()); }}; - EasyMock.expect(extra.getArray(App.MARK_STRING)).andReturn(apps).anyTimes(); + EasyMock.expect(extra.getArray(NewTemplateFileOptionProvider.XML_TAG)).andReturn(options).anyTimes(); EasyMock.replay(extra); return extra; } - private class MockCptxApp extends AbstractAppProvider { - @Override - public String[] defaultExtensions() { - return new String[]{FileExtension.CPTX.getExtension()}; - } + private class MockNewTemplateFileOption extends AbstractNewTemplateFileOptionProvider { @Override - public JTemplate openTemplate(FILE tplFile) { - return null; + public ReportSupportedFileProvider getSupportedFile() { + ReportSupportedFileProvider supportedFileProvider = EasyMock.mock(ReportSupportedFileProvider.class); + EasyMock.expect(supportedFileProvider.getFileExtensions()).andReturn(new FileExtension[]{FileExtension.CPTX}).anyTimes(); + EasyMock.replay(supportedFileProvider); + return supportedFileProvider; } - @Override - public BaseBook asIOFile(FILE tplFile) { - return null; - } + } } 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 7822f7d85..4edae780b 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 @@ -34,7 +34,7 @@ import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; -import com.fr.design.fun.NewTemplateFileProvider; +import com.fr.design.fun.NewTemplateFileOptionProvider; import com.fr.design.fun.PreviewProvider; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; @@ -1171,8 +1171,8 @@ public class JWorkBook extends JTemplate { protected void addChooseFILEFilter(FILEChooserPane fileChooser){ super.addChooseFILEFilter(fileChooser); - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileProvider.XML_TAG); - for (NewTemplateFileProvider provider : providers) { + Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); + for (NewTemplateFileOptionProvider provider : providers) { provider.addChooseFileFilter(fileChooser, this.suffix()); } } From 8bf2a5e0addd3f7a03682868f5237bad08957c27 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 16 Oct 2019 14:03:39 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/fun/NewTemplateFileProvider.java | 47 ------------------- .../impl/AbstractNewTemplateFileProvider.java | 21 --------- 2 files changed, 68 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java delete mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java diff --git a/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java deleted file mode 100644 index 34f811ae0..000000000 --- a/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.fr.design.fun; - -import com.fr.design.mainframe.JTemplate; -import com.fr.file.FILEChooserPane; -import com.fr.file.filetree.FileNode; -import com.fr.stable.fun.mark.Mutable; - -import javax.swing.Icon; - -/** - * Created by kerry on 2019-10-11 - */ -public interface NewTemplateFileProvider extends Mutable { - - int CURRENT_LEVEL = 1; - - String XML_TAG = "NewFileTypeProvider"; - - /** - * 向文件选择器中添加指定文件类型过滤器 - * @param fileChooser 文件选择器 - * @param suffix 文件后缀 - */ - void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); - - /** - * 获取本地目录文件关联的icon - * @param path 文件路径 - * @return 对应的图标 - */ - Icon getLocalFileIcon(String path); - - /** - * 获取远程目录文件关联的icon - * @param node 文件节点 - * @param isShowLock 是否显示被锁住 - * @return 对应的图标 - */ - Icon getRemoteFileIcon(FileNode node, boolean isShowLock); - - /** - * 保存为新类型文件 - * @param targetPath 目标路径 - * @param jTemplate 模板对象 - */ - boolean saveToNewFile(String targetPath, JTemplate jTemplate); -} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java deleted file mode 100644 index d460c7b95..000000000 --- a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.fr.design.fun.impl; - -import com.fr.design.fun.NewTemplateFileProvider; -import com.fr.stable.fun.mark.API; - -/** - * Created by kerry on 2019-10-14 - */ -@API(level = NewTemplateFileProvider.CURRENT_LEVEL) -public abstract class AbstractNewTemplateFileProvider implements NewTemplateFileProvider { - - @Override - public int currentAPILevel() { - return CURRENT_LEVEL; - } - - @Override - public String mark4Provider() { - return getClass().getName(); - } -} From 5951735bb920aac6994ea7c387bed99aca68abbd Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 16 Oct 2019 14:35:03 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E7=BB=A7=E6=89=BFAbstractProvider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/fun/impl/AbstractNewTemplateFileOptionProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java index 931c4bc65..4d420ada0 100644 --- a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java @@ -4,6 +4,7 @@ import com.fr.decision.extension.report.ReportSupportedFileProvider; import com.fr.design.fun.NewTemplateFileOptionProvider; import com.fr.design.mainframe.JTemplate; import com.fr.file.FILEChooserPane; +import com.fr.stable.fun.impl.AbstractProvider; import com.fr.stable.fun.mark.API; import javax.swing.Icon; @@ -12,7 +13,7 @@ import javax.swing.Icon; * Created by kerry on 2019-10-14 */ @API(level = NewTemplateFileOptionProvider.CURRENT_LEVEL) -public abstract class AbstractNewTemplateFileOptionProvider implements NewTemplateFileOptionProvider { +public abstract class AbstractNewTemplateFileOptionProvider extends AbstractProvider implements NewTemplateFileOptionProvider { @Override public void addChooseFileFilter(FILEChooserPane fileChooser, String suffix) { From be9619fc990bc0be43f9d4961f94858f52f4dc96 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 16 Oct 2019 14:57:49 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fun/ReportSupportedFileUIProvider.java | 47 +++++++++++++++++++ ...AbstractReportSupportedFileUIProvider.java | 46 ++++++++++++++++++ .../gui/itree/filetree/FileNodeConstants.java | 6 +-- .../gui/itree/filetree/FileTreeIcon.java | 6 +-- .../com/fr/design/mainframe/JTemplate.java | 6 +-- .../itree/filetree/FileNodeConstantsTest.java | 12 ++--- .../com/fr/design/mainframe/JWorkBook.java | 6 +-- 7 files changed, 111 insertions(+), 18 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/ReportSupportedFileUIProvider.java create mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractReportSupportedFileUIProvider.java diff --git a/designer-base/src/main/java/com/fr/design/fun/ReportSupportedFileUIProvider.java b/designer-base/src/main/java/com/fr/design/fun/ReportSupportedFileUIProvider.java new file mode 100644 index 000000000..c68c8813d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/ReportSupportedFileUIProvider.java @@ -0,0 +1,47 @@ +package com.fr.design.fun; + +import com.fr.decision.extension.report.ReportSupportedFileProvider; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.FILEChooserPane; +import com.fr.stable.fun.mark.Mutable; + +import javax.swing.Icon; + +/** + * Created by kerry on 2019-10-11 + */ +public interface ReportSupportedFileUIProvider extends Mutable { + + int CURRENT_LEVEL = 1; + + String XML_TAG = "ReportSupportedFileUIProvider"; + + /** + * 向文件选择器中添加指定文件类型过滤器 + * @param fileChooser 文件选择器 + * @param suffix 文件后缀 + */ + void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); + + + /** + * 获取对应的新增的支持文件类型 + * @return ReportTemplateFileProvider + */ + ReportSupportedFileProvider getSupportedFile(); + + /** + * 获取文件关联的icon + * @param path 文件路径 + * @param isShowLock 是否显示被锁住 + * @return 对应的图标 + */ + Icon getFileIcon(String path,boolean isShowLock); + + /** + * 保存为新类型文件 + * @param targetPath 目标路径 + * @param jTemplate 模板对象 + */ + boolean saveToNewFile(String targetPath, JTemplate jTemplate); +} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractReportSupportedFileUIProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractReportSupportedFileUIProvider.java new file mode 100644 index 000000000..f307a91e2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractReportSupportedFileUIProvider.java @@ -0,0 +1,46 @@ +package com.fr.design.fun.impl; + +import com.fr.decision.extension.report.ReportSupportedFileProvider; +import com.fr.design.fun.ReportSupportedFileUIProvider; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.FILEChooserPane; +import com.fr.stable.fun.impl.AbstractProvider; +import com.fr.stable.fun.mark.API; + +import javax.swing.Icon; + +/** + * Created by kerry on 2019-10-14 + */ +@API(level = ReportSupportedFileUIProvider.CURRENT_LEVEL) +public abstract class AbstractReportSupportedFileUIProvider extends AbstractProvider implements ReportSupportedFileUIProvider { + @Override + public void addChooseFileFilter(FILEChooserPane fileChooser, String suffix) { + + } + + @Override + public ReportSupportedFileProvider getSupportedFile() { + return null; + } + + @Override + public Icon getFileIcon(String path, boolean isShowLock) { + return null; + } + + @Override + public boolean saveToNewFile(String targetPath, JTemplate jTemplate) { + return false; + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java index d0b14804a..82cae94c1 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileNodeConstants.java @@ -3,7 +3,7 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; import com.fr.base.extension.FileExtension; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.fun.NewTemplateFileOptionProvider; +import com.fr.design.fun.ReportSupportedFileUIProvider; import com.fr.general.GeneralContext; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; @@ -58,8 +58,8 @@ public class FileNodeConstants { rwl.writeLock().lock(); supportFileType = new ArrayList(); //通过插件扩展的 - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); - for (NewTemplateFileOptionProvider provider : providers) { + Set providers = ExtraDesignClassManager.getInstance().getArray(ReportSupportedFileUIProvider.XML_TAG); + for (ReportSupportedFileUIProvider provider : providers) { addAppExtensions(provider.getSupportedFile().getFileExtensions()); } supportFileType.addAll(Arrays.asList(FRContext.getFileNodes().getSupportedTypes())); diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java index 68c877fb6..b418c1db4 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java @@ -3,7 +3,7 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.BaseUtils; import com.fr.design.ExtraDesignClassManager; import com.fr.design.icon.LockIcon; -import com.fr.design.fun.NewTemplateFileOptionProvider; +import com.fr.design.fun.ReportSupportedFileUIProvider; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.stable.StableUtils; @@ -176,8 +176,8 @@ public class FileTreeIcon { } private static Icon getExtraIcon(String path, boolean isShowLock) { - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); - for (NewTemplateFileOptionProvider provider : providers) { + Set providers = ExtraDesignClassManager.getInstance().getArray(ReportSupportedFileUIProvider.XML_TAG); + for (ReportSupportedFileUIProvider provider : providers) { if (provider.getFileIcon(path, isShowLock) != null) { return provider.getFileIcon(path, isShowLock); } 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 85bd81a72..4118578de 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 @@ -27,7 +27,7 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.DesignerFrameUpButtonProvider; import com.fr.design.fun.MenuHandler; -import com.fr.design.fun.NewTemplateFileOptionProvider; +import com.fr.design.fun.ReportSupportedFileUIProvider; import com.fr.design.fun.PreviewProvider; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; @@ -658,8 +658,8 @@ public abstract class JTemplate> protected boolean saveToNewFile(String oldName){ boolean result = false; - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); - for (NewTemplateFileOptionProvider provider : providers) { + Set providers = ExtraDesignClassManager.getInstance().getArray(ReportSupportedFileUIProvider.XML_TAG); + for (ReportSupportedFileUIProvider provider : providers) { result = result || provider.saveToNewFile(this.editingFILE.getPath(), this); } if(!result && FileExtension.CPT.matchExtension(this.editingFILE.getPath())){ diff --git a/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java b/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java index 8431344ba..5ddc3b8b2 100644 --- a/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java +++ b/designer-base/src/test/java/com/fr/design/gui/itree/filetree/FileNodeConstantsTest.java @@ -3,8 +3,8 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.extension.FileExtension; import com.fr.decision.extension.report.ReportSupportedFileProvider; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.fun.NewTemplateFileOptionProvider; -import com.fr.design.fun.impl.AbstractNewTemplateFileOptionProvider; +import com.fr.design.fun.ReportSupportedFileUIProvider; +import com.fr.design.fun.impl.AbstractReportSupportedFileUIProvider; import com.fr.stable.fun.mark.Mutable; import org.easymock.EasyMock; import org.junit.Assert; @@ -25,8 +25,8 @@ public class FileNodeConstantsTest { @Test public void supportFileTypesTest() { ExtraDesignClassManager extra = mockExtraDesignClassManager(); - Assert.assertEquals(1, extra.getArray(NewTemplateFileOptionProvider.XML_TAG).size()); - NewTemplateFileOptionProvider option = (NewTemplateFileOptionProvider) extra.getArray(NewTemplateFileOptionProvider.XML_TAG).iterator().next(); + Assert.assertEquals(1, extra.getArray(ReportSupportedFileUIProvider.XML_TAG).size()); + ReportSupportedFileUIProvider option = (ReportSupportedFileUIProvider) extra.getArray(ReportSupportedFileUIProvider.XML_TAG).iterator().next(); Assert.assertEquals(FileExtension.CPTX, option.getSupportedFile().getFileExtensions()[0]); } @@ -46,12 +46,12 @@ public class FileNodeConstantsTest { Set options = new HashSet() {{ add(new MockNewTemplateFileOption()); }}; - EasyMock.expect(extra.getArray(NewTemplateFileOptionProvider.XML_TAG)).andReturn(options).anyTimes(); + EasyMock.expect(extra.getArray(ReportSupportedFileUIProvider.XML_TAG)).andReturn(options).anyTimes(); EasyMock.replay(extra); return extra; } - private class MockNewTemplateFileOption extends AbstractNewTemplateFileOptionProvider { + private class MockNewTemplateFileOption extends AbstractReportSupportedFileUIProvider { @Override public ReportSupportedFileProvider getSupportedFile() { 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 4edae780b..713b34c54 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 @@ -34,7 +34,7 @@ import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; -import com.fr.design.fun.NewTemplateFileOptionProvider; +import com.fr.design.fun.ReportSupportedFileUIProvider; import com.fr.design.fun.PreviewProvider; import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; @@ -1171,8 +1171,8 @@ public class JWorkBook extends JTemplate { protected void addChooseFILEFilter(FILEChooserPane fileChooser){ super.addChooseFILEFilter(fileChooser); - Set providers = ExtraDesignClassManager.getInstance().getArray(NewTemplateFileOptionProvider.XML_TAG); - for (NewTemplateFileOptionProvider provider : providers) { + Set providers = ExtraDesignClassManager.getInstance().getArray(ReportSupportedFileUIProvider.XML_TAG); + for (ReportSupportedFileUIProvider provider : providers) { provider.addChooseFileFilter(fileChooser, this.suffix()); } } From f8cf8a8a7a65d1fdee197e905ada3e91cb8c6eb5 Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 16 Oct 2019 14:57:55 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fun/NewTemplateFileOptionProvider.java | 47 ------------------- ...AbstractNewTemplateFileOptionProvider.java | 46 ------------------ 2 files changed, 93 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java delete mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java diff --git a/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java b/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java deleted file mode 100644 index feec821ba..000000000 --- a/designer-base/src/main/java/com/fr/design/fun/NewTemplateFileOptionProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.fr.design.fun; - -import com.fr.decision.extension.report.ReportSupportedFileProvider; -import com.fr.design.mainframe.JTemplate; -import com.fr.file.FILEChooserPane; -import com.fr.stable.fun.mark.Mutable; - -import javax.swing.Icon; - -/** - * Created by kerry on 2019-10-11 - */ -public interface NewTemplateFileOptionProvider extends Mutable { - - int CURRENT_LEVEL = 1; - - String XML_TAG = "NewTemplateFileOptionProvider"; - - /** - * 向文件选择器中添加指定文件类型过滤器 - * @param fileChooser 文件选择器 - * @param suffix 文件后缀 - */ - void addChooseFileFilter(FILEChooserPane fileChooser, String suffix); - - - /** - * 获取对应的新增的支持文件类型 - * @return ReportTemplateFileProvider - */ - ReportSupportedFileProvider getSupportedFile(); - - /** - * 获取文件关联的icon - * @param path 文件路径 - * @param isShowLock 是否显示被锁住 - * @return 对应的图标 - */ - Icon getFileIcon(String path,boolean isShowLock); - - /** - * 保存为新类型文件 - * @param targetPath 目标路径 - * @param jTemplate 模板对象 - */ - boolean saveToNewFile(String targetPath, JTemplate jTemplate); -} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java deleted file mode 100644 index 4d420ada0..000000000 --- a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractNewTemplateFileOptionProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.fr.design.fun.impl; - -import com.fr.decision.extension.report.ReportSupportedFileProvider; -import com.fr.design.fun.NewTemplateFileOptionProvider; -import com.fr.design.mainframe.JTemplate; -import com.fr.file.FILEChooserPane; -import com.fr.stable.fun.impl.AbstractProvider; -import com.fr.stable.fun.mark.API; - -import javax.swing.Icon; - -/** - * Created by kerry on 2019-10-14 - */ -@API(level = NewTemplateFileOptionProvider.CURRENT_LEVEL) -public abstract class AbstractNewTemplateFileOptionProvider extends AbstractProvider implements NewTemplateFileOptionProvider { - @Override - public void addChooseFileFilter(FILEChooserPane fileChooser, String suffix) { - - } - - @Override - public ReportSupportedFileProvider getSupportedFile() { - return null; - } - - @Override - public Icon getFileIcon(String path, boolean isShowLock) { - return null; - } - - @Override - public boolean saveToNewFile(String targetPath, JTemplate jTemplate) { - return false; - } - - @Override - public int currentAPILevel() { - return CURRENT_LEVEL; - } - - @Override - public String mark4Provider() { - return getClass().getName(); - } -}