forked from fanruan/design
rinoux
4 years ago
9 changed files with 327 additions and 192 deletions
@ -0,0 +1,47 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.db; |
||||||
|
|
||||||
|
import com.fr.data.impl.DBTableData; |
||||||
|
import com.fr.esd.event.DSMapping; |
||||||
|
import com.fr.esd.event.DsNameTarget; |
||||||
|
import com.fr.esd.event.StrategyEventsNotifier; |
||||||
|
import com.fr.esd.event.xml.XMLSavedHook; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
public class DBTableDataSavedHook implements XMLSavedHook<DBTableData> { |
||||||
|
|
||||||
|
private static final long serialVersionUID = 4925391747683335372L; |
||||||
|
|
||||||
|
private final String tplPath; |
||||||
|
private String origName; |
||||||
|
|
||||||
|
private String origConnection; |
||||||
|
|
||||||
|
private String origQuery; |
||||||
|
|
||||||
|
public DBTableDataSavedHook(String tplPath, DBTableData origDBTableData) { |
||||||
|
this.tplPath = tplPath; |
||||||
|
this.origName = origDBTableData.getDsName(); |
||||||
|
this.origConnection = origDBTableData.getDatabase().toString(); |
||||||
|
this.origQuery = origDBTableData.getQuery(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doAfterSaved(DBTableData saved) { |
||||||
|
String dsName = saved.getDsName(); |
||||||
|
String conn = saved.getDatabase().toString(); |
||||||
|
String query = saved.getQuery(); |
||||||
|
|
||||||
|
|
||||||
|
//检查数据集名称、数据链接和sql是否修改,如果修改需要触发缓存监听事件
|
||||||
|
if (!dsName.equals(origName) || !conn.equals(origConnection) || !query.equals(origQuery)) { |
||||||
|
if (StringUtils.isNotEmpty(tplPath) && StringUtils.isNotEmpty(origName)) { |
||||||
|
//新建数据集的origName为null,不用触发
|
||||||
|
StrategyEventsNotifier.modifyDataSet(new DSMapping(tplPath, new DsNameTarget(origName))); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
this.origName = dsName; |
||||||
|
this.origConnection = conn; |
||||||
|
this.origQuery = query; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,70 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.db; |
||||||
|
|
||||||
|
import com.fr.data.impl.DBTableData; |
||||||
|
import com.fr.esd.core.strategy.config.StrategyConfig; |
||||||
|
import com.fr.esd.event.DSMapping; |
||||||
|
import com.fr.esd.event.DsNameTarget; |
||||||
|
import com.fr.esd.event.StrategyEventsNotifier; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author rinoux |
||||||
|
* @version 10.0 |
||||||
|
* Created by rinoux on 2021/3/19 |
||||||
|
*/ |
||||||
|
public class ServerStrategyConfigHandler implements StrategyConfigHandler { |
||||||
|
private final DBTableData tableData; |
||||||
|
|
||||||
|
private final String origName; |
||||||
|
|
||||||
|
private final String origConnection; |
||||||
|
|
||||||
|
private final String origQuery; |
||||||
|
|
||||||
|
public ServerStrategyConfigHandler(DBTableData tableData) { |
||||||
|
this.tableData = tableData; |
||||||
|
this.origName = tableData.getDsName(); |
||||||
|
this.origConnection = tableData.getDatabase().toString(); |
||||||
|
this.origQuery = tableData.getQuery(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public StrategyConfig find() { |
||||||
|
StrategyConfig strategyConfig = null; |
||||||
|
if (tableData != null) { |
||||||
|
try { |
||||||
|
strategyConfig = tableData.getStrategyConfig() == null ? null : tableData.getStrategyConfig().clone(); |
||||||
|
} catch (CloneNotSupportedException e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return strategyConfig; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void save(DBTableData saved, StrategyConfig strategyConfig) { |
||||||
|
String conn = saved.getDatabase().toString(); |
||||||
|
String query = saved.getQuery(); |
||||||
|
|
||||||
|
|
||||||
|
//检查数据链接和sql是否修改,如果修改需要触发缓存监听事件
|
||||||
|
if (!conn.equals(origConnection) || !query.equals(origQuery)) { |
||||||
|
if (StringUtils.isNotEmpty(origName)) { |
||||||
|
//新建数据集的origName为null,不用触发
|
||||||
|
StrategyEventsNotifier.modifyDataSet(DSMapping.ofServerDS(new DsNameTarget(origName))); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//配置变动事件
|
||||||
|
try { |
||||||
|
final StrategyConfig orig = tableData.getStrategyConfig(); |
||||||
|
saved.setStrategyConfig(strategyConfig.clone()); |
||||||
|
StrategyEventsNotifier.compareAndFireConfigEvents(orig, strategyConfig, DSMapping.ofServerDS(new DsNameTarget(saved.getDsName()))); |
||||||
|
} catch (CloneNotSupportedException e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.db; |
||||||
|
|
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
|
||||||
|
public enum StrategyConfigFrom { |
||||||
|
GLOBAL(0, Toolkit.i18nText("Fine-Design_ESD_Use_Global_Settings")), |
||||||
|
|
||||||
|
INDIVIDUAL(1, Toolkit.i18nText("Fine-Design_ESD_Use_Individual_Settings")); |
||||||
|
|
||||||
|
int index; |
||||||
|
|
||||||
|
String displayText; |
||||||
|
|
||||||
|
StrategyConfigFrom(int index, String displayText) { |
||||||
|
this.index = index; |
||||||
|
this.displayText = displayText; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public int getIndex() { |
||||||
|
return this.index; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String getDisplayText() { |
||||||
|
return this.displayText; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String toString() { |
||||||
|
return getDisplayText(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.db; |
||||||
|
|
||||||
|
import com.fr.data.impl.DBTableData; |
||||||
|
import com.fr.esd.core.strategy.config.StrategyConfig; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author rinoux |
||||||
|
* @version 10.0 |
||||||
|
* Created by rinoux on 2021/3/19 |
||||||
|
*/ |
||||||
|
public interface StrategyConfigHandler { |
||||||
|
|
||||||
|
StrategyConfig find(); |
||||||
|
|
||||||
|
void save(DBTableData saved, StrategyConfig config); |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.db; |
||||||
|
|
||||||
|
import com.fr.base.TableData; |
||||||
|
import com.fr.data.impl.DBTableData; |
||||||
|
import com.fr.design.data.DesignerStrategyConfigUtils; |
||||||
|
import com.fr.design.file.HistoryTemplateListCache; |
||||||
|
import com.fr.esd.core.strategy.config.StrategyConfig; |
||||||
|
import com.fr.esd.query.StrategicTableData; |
||||||
|
import com.fr.workspace.WorkContext; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author rinoux |
||||||
|
* @version 10.0 |
||||||
|
* Created by rinoux on 2021/3/19 |
||||||
|
*/ |
||||||
|
public class TemplateStrategyConfigHandler implements StrategyConfigHandler { |
||||||
|
|
||||||
|
DBTableData tableData; |
||||||
|
|
||||||
|
public TemplateStrategyConfigHandler(DBTableData tableData) { |
||||||
|
this.tableData = tableData; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public StrategyConfig find() { |
||||||
|
StrategyConfig strategyConfig = null; |
||||||
|
if (tableData != null) { |
||||||
|
//设置保存数据集的事件检查钩子
|
||||||
|
String tplPath = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getEditingFILE().getPath(); |
||||||
|
|
||||||
|
//新建模版此时不存在,不需要注册钩子
|
||||||
|
if (tableData.getXmlSavedHook() == null && WorkContext.getWorkResource().exist(tplPath)) { |
||||||
|
tableData.setXmlSavedHook(new DBTableDataSavedHook(tplPath, tableData)); |
||||||
|
} |
||||||
|
|
||||||
|
//获取当前的缓存配置,没有就创建一份
|
||||||
|
String dsName = tableData.getDsName(); |
||||||
|
|
||||||
|
//这里为了之前兼容插件创建的配置,缓存配置不在DBTableData,而是从模版attr读取
|
||||||
|
strategyConfig = DesignerStrategyConfigUtils.getStrategyConfig(dsName); |
||||||
|
} |
||||||
|
|
||||||
|
return strategyConfig; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void save(DBTableData saved, StrategyConfig config) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue