Browse Source

KERNEL-6380 在部分插件切换的时候,需要有一个集中刷新缓存的地方

feature/big-screen
hades 4 years ago
parent
commit
f121386268
  1. 73
      designer-base/src/main/java/com/fr/design/PluginRefreshManager.java
  2. 34
      designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java
  3. 27
      designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java
  4. 1
      designer-base/src/main/java/com/fr/design/gui/frpane/HyperlinkGroupPane.java
  5. 18
      designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
  6. 2
      designer-realize/src/main/java/com/fr/start/module/DesignerInitActivator.java
  7. 4
      designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceActivator.java

73
designer-base/src/main/java/com/fr/design/PluginRefreshManager.java

@ -0,0 +1,73 @@
package com.fr.design;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.fun.HyperlinkProvider;
import com.fr.design.fun.TableDataDefineProvider;
import com.fr.plugin.manage.PluginFilter;
import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
import com.fr.plugin.observer.PluginEventType;
import com.fr.plugin.observer.PluginListenerRegistration;
import com.fr.stable.fun.IOFileAttrMark;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author hades
* @version 10.0
* Created by hades on 2020/12/17
*/
public class PluginRefreshManager {
private static final PluginRefreshManager INSTANCE = new PluginRefreshManager();
private final Set<String> context = new HashSet<>();
private final PluginEventListener pluginAfterRunEventListener = new PluginEventListener() {
@Override
public void on(PluginEvent event) {
// 重新载入模板xml内容 到 Workbook/Form对象中
HistoryTemplateListCache.getInstance().reloadAllEditingTemplate();
}
};
private final PluginFilter pluginFilter = pluginContext -> {
for (String xmlTag : context) {
if (pluginContext.contain(xmlTag)) {
return true;
}
}
return false;
};
public static PluginRefreshManager getInstance() {
return INSTANCE;
}
public void load() {
context.add(IOFileAttrMark.MARK_STRING);
context.add(TableDataDefineProvider.XML_TAG);
context.add(HyperlinkProvider.XML_TAG);
}
private PluginRefreshManager() {
PluginListenerRegistration.getInstance().listen(PluginEventType.AfterRun, this.pluginAfterRunEventListener, this.pluginFilter);
}
public void registerItem(String xmlTag) {
context.add(xmlTag);
}
public void removePluginListener() {
PluginListenerRegistration.getInstance().stopListen(this.pluginAfterRunEventListener);
}
public void addPluginListener() {
PluginListenerRegistration.getInstance().listen(PluginEventType.AfterRun, this.pluginAfterRunEventListener, this.pluginFilter);
}
}

34
designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java

@ -18,8 +18,6 @@ import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.fun.TableDataDefineProvider;
import com.fr.design.fun.TableDataPaneProcessor;
import com.fr.design.gui.ibutton.UIHeadGroup;
import com.fr.design.gui.icontainer.UIScrollPane;
@ -28,7 +26,6 @@ import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.icon.IconPathConstants;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.SeparatorDef;
import com.fr.design.menu.ToolBarDef;
@ -98,9 +95,6 @@ public class TableDataTreePane extends BasicTableDataTreePane {
createAddMenuDef();
// 创建插件监听
createPluginListener();
editAction = new EditAction();
removeAction = new RemoveAction();
previewTableDataAction = new PreviewTableDataAction(dataTree);
@ -160,34 +154,6 @@ public class TableDataTreePane extends BasicTableDataTreePane {
return context.contain(PluginModule.ExtraDesign);
}
});
//监听数据集插件
GeneralContext.listenPluginRunningChanged(new PluginEventListener() {
@Override
public void on(PluginEvent event) {
//REPORT-25577
//如果数据集插件禁用或启用。需要清空当前模板中的缓存
reloadCurrTemplate();
}
private void reloadCurrTemplate() {
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (accept(jt)) {
jt.refreshResource();
}
}
private boolean accept(JTemplate<?, ?> jt) {
return jt != null && jt.getEditingFILE() != null && jt.getEditingFILE().exists();
}
}, new PluginFilter() {
@Override
public boolean accept(PluginContext pluginContext) {
return pluginContext.contain(TableDataDefineProvider.XML_TAG);
}
});
}

27
designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java

@ -420,6 +420,7 @@ public class HistoryTemplateListCache implements CallbackEvent {
/**
* 重新载入当前模板刷新数据/对象
*/
@Deprecated
public void reloadCurrentTemplate() {
JTemplate<?, ?> jt = getCurrentEditingTemplate();
boolean access = jt != null && jt.getEditingFILE() != null && jt.getEditingFILE().exists();
@ -440,4 +441,30 @@ public class HistoryTemplateListCache implements CallbackEvent {
});
}
/**
* 插件安装后/启用 重新加载模板资源
*/
public void reloadAllEditingTemplate() {
FineLoggerFactory.getLogger().info("Plugin env Change reload all template started");
int size = historyList.size();
for (int i = 0; i < size; i++) {
JTemplate<?, ?> template = historyList.get(i);
FILE file = template.getEditingFILE();
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BaseBook target = template.getTarget();
if (target != null) {
FineLoggerFactory.getLogger().info("{} is being reloaded", template.getName());
target.export(outputStream);
FILE stashedFile = new StashedFILE(file, outputStream.toByteArray());
template.refreshResource(stashedFile);
}
// 如果 target == null 那么这个模板是被模板内存优化功能处理过的,不用处理
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
FineLoggerFactory.getLogger().info("Plugin env Change reload all template ended");
}
}

1
designer-base/src/main/java/com/fr/design/gui/frpane/HyperlinkGroupPane.java

@ -46,7 +46,6 @@ public abstract class HyperlinkGroupPane extends UIListControlPane {
@Override
public void on(PluginEvent event) {
refreshNameableCreator(createNameableCreators());
HistoryTemplateListCache.getInstance().reloadCurrentTemplate();
}
}, new PluginFilter() {

18
designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java

@ -47,6 +47,7 @@ import com.fr.design.menu.MenuDef;
import com.fr.design.menu.NameSeparator;
import com.fr.design.menu.ShortCut;
import com.fr.design.preview.PagePreview;
import com.fr.design.ui.util.UIUtil;
import com.fr.design.write.submit.DBManipulationInWidgetEventPane;
import com.fr.design.write.submit.DBManipulationPane;
import com.fr.event.EventDispatcher;
@ -332,16 +333,23 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
* CenterPane 负责监听改动
* 所以需要同步处理
*/
@Deprecated
public void refreshResource() {
refreshResource(this.editingFILE);
}
public void refreshResource(FILE file) {
try {
this.template = JTemplateFactory.asIOFile(this.editingFILE);
this.template = JTemplateFactory.asIOFile(file);
setTarget(this.template);
// 先移除旧的。
removeCenterPane();
// 加入新的
addCenterPane();
UIUtil.invokeLaterIfNeeded(() -> {
// 先移除旧的。
removeCenterPane();
// 加入新的
addCenterPane();
});
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}

2
designer-realize/src/main/java/com/fr/start/module/DesignerInitActivator.java

@ -1,5 +1,6 @@
package com.fr.start.module;
import com.fr.design.PluginRefreshManager;
import com.fr.module.Activator;
import com.fr.start.DesignerInitial;
@ -15,6 +16,7 @@ public class DesignerInitActivator extends Activator {
@Override
public void start() {
PluginRefreshManager.getInstance().load();
DesignerInitial.init(findSingleton(StartupArgs.class).get());
}

4
designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceActivator.java

@ -1,6 +1,7 @@
package com.fr.start.module;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.PluginRefreshManager;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.event.Event;
import com.fr.event.Listener;
@ -50,7 +51,7 @@ public class DesignerWorkspaceActivator extends Activator {
@Override
public void on(Event event, Workspace workspace) {
PluginRefreshManager.getInstance().removePluginListener();
HistoryTemplateListCache.getInstance().stash();
}
});
@ -62,6 +63,7 @@ public class DesignerWorkspaceActivator extends Activator {
public void on(Event event, Workspace workspace) {
HistoryTemplateListCache.getInstance().load();
PluginRefreshManager.getInstance().addPluginListener();
}
});
}

Loading…
Cancel
Save