hugh
4 years ago
19 changed files with 818 additions and 1 deletions
@ -1,3 +1,7 @@
|
||||
# demo-connection-provider |
||||
|
||||
创建数据源连接的demo |
||||
创建数据源连接的demo\ |
||||
demo生效后在设计器/决策平台的数据源管理页面会增加一个名为Demo Conn的数据源类型。\ |
||||
添加后设置一个key值,注:只有key1 key2 key3这三个key值可以链接成功。\ |
||||
添加完数据源连接,在模板数据集【注意不是服务器数据集】处可添加Demo Conn Data数据集\ |
||||
可以选择对应的数据源后预览得到对应的数据结果。 |
@ -0,0 +1,124 @@
|
||||
|
||||
apply plugin: 'java' |
||||
|
||||
[compileJava,compileTestJava]*.options*.encoding = 'UTF-8' |
||||
|
||||
ext { |
||||
/** |
||||
* 项目中依赖的jar的路径 |
||||
* 1.如果依赖的jar需要打包到zip中,放置在lib根目录下 |
||||
* 2.如果依赖的jar仅仅是编译时需要,防止在lib下子目录下即可 |
||||
*/ |
||||
libPath = "$projectDir/../webroot/WEB-INF/lib" |
||||
|
||||
/** |
||||
* 是否对插件的class进行加密保护,防止反编译 |
||||
*/ |
||||
guard = false |
||||
|
||||
def pluginInfo = getPluginInfo() |
||||
pluginPre = "fine-plugin" |
||||
pluginName = pluginInfo.id |
||||
pluginVersion = pluginInfo.version |
||||
|
||||
outputPath = "$projectDir/../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes" |
||||
} |
||||
|
||||
group = 'com.fr.plugin' |
||||
version = '10.0' |
||||
sourceCompatibility = '8' |
||||
|
||||
sourceSets { |
||||
main { |
||||
java.outputDir = file(outputPath) |
||||
output.resourcesDir = file(outputPath) |
||||
} |
||||
} |
||||
|
||||
ant.importBuild("encrypt.xml") |
||||
//定义ant变量 |
||||
ant.projectDir = projectDir |
||||
ant.references["compile.classpath"] = ant.path { |
||||
fileset(dir: libPath, includes: '**/*.jar') |
||||
fileset(dir: ".",includes:"**/*.jar" ) |
||||
} |
||||
|
||||
classes.dependsOn('clean') |
||||
|
||||
task copyFiles(type: Copy,dependsOn: 'classes'){ |
||||
from outputPath |
||||
into "$projectDir/classes" |
||||
} |
||||
|
||||
task preJar(type:Copy,dependsOn: guard ? 'compile_encrypt_javas' : 'compile_plain_javas'){ |
||||
from "$projectDir/classes" |
||||
into "$projectDir/transform-classes" |
||||
include "**/*.*" |
||||
} |
||||
jar.dependsOn("preJar") |
||||
|
||||
task makeJar(type: Jar,dependsOn: preJar){ |
||||
from fileTree(dir: "$projectDir/transform-classes") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
destinationDir = file("$buildDir/libs") |
||||
|
||||
doLast(){ |
||||
delete file("$projectDir/classes") |
||||
delete file("$projectDir/transform-classes") |
||||
} |
||||
} |
||||
|
||||
task copyFile(type: Copy,dependsOn: ["makeJar"]){ |
||||
from "$buildDir/libs" |
||||
from("$projectDir/lib") { |
||||
include "*.jar" |
||||
} |
||||
from "$projectDir/plugin.xml" |
||||
into file("$buildDir/temp/plugin") |
||||
} |
||||
|
||||
task zip(type:Zip,dependsOn:["copyFile"]){ |
||||
from "$buildDir/temp/plugin" |
||||
destinationDir file("$buildDir/install") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
} |
||||
|
||||
//控制build时包含哪些文件,排除哪些文件 |
||||
processResources { |
||||
// exclude everything |
||||
// 用*.css没效果 |
||||
// exclude '**/*.css' |
||||
// except this file |
||||
// include 'xx.xml' |
||||
} |
||||
|
||||
/*读取plugin.xml中的version*/ |
||||
def getPluginInfo(){ |
||||
def xmlFile = file("plugin.xml") |
||||
if (!xmlFile.exists()) { |
||||
return ["id":"none", "version":"1.0.0"] |
||||
} |
||||
def plugin = new XmlParser().parse(xmlFile) |
||||
def version = plugin.version[0].text() |
||||
def id = plugin.id[0].text() |
||||
return ["id":id,"version":version] |
||||
} |
||||
|
||||
repositories { |
||||
mavenLocal() |
||||
maven { |
||||
url = uri('http://mvn.finedevelop.com/repository/maven-public/') |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
//使用本地jar |
||||
implementation fileTree(dir: 'lib', include: ['**/*.jar']) |
||||
implementation fileTree(dir: libPath, include: ['**/*.jar']) |
||||
} |
||||
|
||||
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<project> |
||||
<target name="compile_encrypt_javas" depends="copyFiles"> |
||||
<echo message="加密文件"/> |
||||
<echo message="${projectDir}"/> |
||||
<taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask"> |
||||
<classpath refid="compile.classpath"/> |
||||
</taskdef> |
||||
<pretreatment baseDir="${projectDir}"/> |
||||
</target> |
||||
<target name="compile_plain_javas" depends="copyFiles"> |
||||
</target> |
||||
</project> |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||
<id>com.tptj.demo.hg.connection.v10</id> |
||||
<name><![CDATA[ connection demo ]]></name> |
||||
<active>yes</active> |
||||
<version>1.0</version> |
||||
<env-version>10.0</env-version> |
||||
<vendor>tptj</vendor> |
||||
<jartime>2019-07-18</jartime> |
||||
<description><![CDATA[ ]]></description> |
||||
<change-notes><![CDATA[]]></change-notes> |
||||
<main-package>com.tptj.demo.hg.connection</main-package> |
||||
<function-recorder class="com.tptj.demo.hg.connection.data.DemoData"/> |
||||
<extra-designer> |
||||
<ConnectionProvider class="com.tptj.demo.hg.connection.Demo"/> |
||||
<TableDataDefineProvider class="com.tptj.demo.hg.connection.DemoTableDataDefine"/> |
||||
</extra-designer> |
||||
<extra-decision> |
||||
<UniversalConnectionProvider class="com.tptj.demo.hg.connection.decision.Demo"/> |
||||
</extra-decision> |
||||
</plugin> |
@ -0,0 +1,34 @@
|
||||
package com.tptj.demo.hg.connection; |
||||
|
||||
import com.fr.data.impl.Connection; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.fun.impl.AbstractConnectionProvider; |
||||
import com.tptj.demo.hg.connection.conn.DemoConnection; |
||||
import com.tptj.demo.hg.connection.conn.DemoConnectionPane; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class Demo extends AbstractConnectionProvider { |
||||
@Override |
||||
public String nameForConnection() { |
||||
return "Demo Conn"; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForConnection() { |
||||
return "com/tptj/demo/hg/connection/images/icon.png"; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends Connection> classForConnection() { |
||||
return DemoConnection.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends BasicBeanPane<? extends Connection>> appearanceForConnection() { |
||||
return DemoConnectionPane.class; |
||||
} |
||||
} |
@ -0,0 +1,44 @@
|
||||
package com.tptj.demo.hg.connection; |
||||
|
||||
import com.fr.base.TableData; |
||||
import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; |
||||
import com.fr.design.fun.impl.AbstractTableDataDefineProvider; |
||||
import com.tptj.demo.hg.connection.data.DemoData; |
||||
import com.tptj.demo.hg.connection.data.DemoDataPane; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class DemoTableDataDefine extends AbstractTableDataDefineProvider { |
||||
@Override |
||||
public Class<? extends TableData> classForTableData() { |
||||
return DemoData.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends TableData> classForInitTableData() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends AbstractTableDataPane> appearanceForTableData() { |
||||
return DemoDataPane.class; |
||||
} |
||||
|
||||
@Override |
||||
public String nameForTableData() { |
||||
return "Demo Conn Data"; |
||||
} |
||||
|
||||
@Override |
||||
public String prefixForTableData() { |
||||
return "dcd"; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForTableData() { |
||||
return "com/tptj/demo/hg/connection/images/icon.png"; |
||||
} |
||||
} |
@ -0,0 +1,69 @@
|
||||
package com.tptj.demo.hg.connection.conn; |
||||
|
||||
import com.fanruan.api.conf.HolderKit; |
||||
import com.fanruan.api.data.open.BaseConnection; |
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.stable.xml.XMLPrintWriter; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
import com.fr.third.ibm.icu.impl.Assert; |
||||
import com.tptj.demo.hg.connection.store.Store; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class DemoConnection extends BaseConnection { |
||||
|
||||
private Conf<String> key = HolderKit.simple(StringKit.EMPTY); |
||||
|
||||
public String getKey() { |
||||
return key.get(); |
||||
} |
||||
|
||||
public void setKey(String key) { |
||||
this.key.set(key); |
||||
} |
||||
|
||||
@Override |
||||
public void testConnection() throws Exception { |
||||
Assert.assrt( Store.getInstance().contains(getKey()) ); |
||||
} |
||||
|
||||
@Override |
||||
public String connectMessage(boolean status) { |
||||
return I18nKit.getLocText(status?"Fine-Core_Datasource_Connection_Successfully":"Fine-Design_Database_Connection_Failed"); |
||||
} |
||||
|
||||
@Override |
||||
public String getDriver() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void readXML(XMLableReader reader) { |
||||
super.readXML(reader); |
||||
if (reader.isChildNode()) { |
||||
String tagName = reader.getTagName(); |
||||
if ("Attr".equals(tagName)) { |
||||
setKey(reader.getAttrAsString("key", StringKit.EMPTY)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void writeXML(XMLPrintWriter writer) { |
||||
super.writeXML(writer); |
||||
writer.startTAG("Attr").attr("key", getKey()).end(); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
DemoConnection cloned = (DemoConnection) super.clone(); |
||||
cloned.key = (Conf<String>) key.clone(); |
||||
return cloned; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,45 @@
|
||||
package com.tptj.demo.hg.connection.conn; |
||||
|
||||
import com.fanruan.api.design.ui.component.UITextField; |
||||
import com.fanruan.api.design.work.DatabaseConnectionPane; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class DemoConnectionPane extends DatabaseConnectionPane<DemoConnection> { |
||||
//hugh:因为mainPanel是在父类的构造中先调用的,所以我们定义的控件一定不要在这里赋值!切记
|
||||
private UITextField w_key; |
||||
|
||||
@Override |
||||
protected JPanel mainPanel() { |
||||
JPanel pane = new JPanel(); |
||||
w_key = new UITextField(); |
||||
pane.setLayout( new BorderLayout(4,4) ); |
||||
pane.add(w_key,BorderLayout.NORTH); |
||||
return pane; |
||||
} |
||||
|
||||
@Override |
||||
protected void populateSubDatabaseConnectionBean( DemoConnection conn ) { |
||||
if( null != conn ){ |
||||
w_key.setText(conn.getKey()); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected DemoConnection updateSubDatabaseConnectionBean() { |
||||
DemoConnection conn = new DemoConnection(); |
||||
conn.setKey( w_key.getText() ); |
||||
return conn; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "Demo Conn"; |
||||
} |
||||
} |
@ -0,0 +1,70 @@
|
||||
package com.tptj.demo.hg.connection.data; |
||||
|
||||
import com.fanruan.api.conf.HolderKit; |
||||
import com.fanruan.api.data.ConnectionKit; |
||||
import com.fanruan.api.data.open.BaseTableData; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.general.data.DataModel; |
||||
import com.fr.intelli.record.Focus; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.record.analyzer.EnableMetrics; |
||||
import com.fr.script.Calculator; |
||||
import com.fr.stable.xml.XMLPrintWriter; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
import com.tptj.demo.hg.connection.conn.DemoConnection; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
@EnableMetrics |
||||
public class DemoData extends BaseTableData { |
||||
private Conf<String> database = HolderKit.simple(StringKit.EMPTY); |
||||
|
||||
public String getDatabase() { |
||||
return database.get(); |
||||
} |
||||
|
||||
public void setDatabase( String database) { |
||||
this.database.set(database); |
||||
} |
||||
|
||||
@Override |
||||
@Focus(id = "com.tptj.demo.hg.connection.v10",text = "connection demo") |
||||
public DataModel createDataModel(Calculator calculator) { |
||||
DemoConnection conn = ConnectionKit.getConnection(getDatabase(),DemoConnection.class); |
||||
try { |
||||
conn.testConnection(); |
||||
}catch (Exception e){ |
||||
FineLoggerFactory.getLogger().error(e.getMessage(),e); |
||||
return DataModel.EMPTY_DATAMODEL; |
||||
} |
||||
return new DemoModel(conn); |
||||
} |
||||
|
||||
@Override |
||||
public void readXML(XMLableReader reader) { |
||||
super.readXML(reader); |
||||
if (reader.isChildNode()) { |
||||
String tagName = reader.getTagName(); |
||||
if ("Attr".equals(tagName)) { |
||||
setDatabase(reader.getAttrAsString("source", StringKit.EMPTY)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void writeXML(XMLPrintWriter writer) { |
||||
super.writeXML(writer); |
||||
writer.startTAG("Attr").attr("source", getDatabase()).end(); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
DemoData cloned = (DemoData) super.clone(); |
||||
cloned.database = (Conf<String>) database.clone(); |
||||
return cloned; |
||||
} |
||||
} |
@ -0,0 +1,66 @@
|
||||
package com.tptj.demo.hg.connection.data; |
||||
|
||||
import com.fanruan.api.design.work.BaseTableDataPane; |
||||
import com.fanruan.api.design.work.ConnectionComboBoxPanel; |
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.data.datapane.preview.PreviewTablePane; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.tptj.demo.hg.connection.conn.DemoConnection; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class DemoDataPane extends BaseTableDataPane<DemoData> { |
||||
private ConnectionComboBoxPanel w_connections; |
||||
public DemoDataPane(){ |
||||
setLayout(new BorderLayout(4, 4)); |
||||
w_connections = new ConnectionComboBoxPanel(DemoConnection.class); |
||||
add(w_connections, BorderLayout.NORTH); |
||||
UIButton preview = new UIButton(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png")); |
||||
preview.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
SwingUtilities.invokeLater(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
PreviewTablePane.previewTableData(DemoDataPane.this.updateBean()); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
add(TableLayoutHelper.createTableLayoutPane( |
||||
new Component[][] {{ |
||||
w_connections,preview |
||||
}}, |
||||
new double[] { TableLayout.PREFERRED }, |
||||
new double[] { TableLayout.FILL,TableLayout.PREFERRED } |
||||
),BorderLayout.NORTH); |
||||
} |
||||
@Override |
||||
public void populateBean(DemoData data) { |
||||
if( null != data ){ |
||||
w_connections.setSelectedItem( data.getDatabase() ); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public DemoData updateBean() { |
||||
DemoData data = new DemoData(); |
||||
data.setDatabase( w_connections.getSelectedItem() ); |
||||
return data; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "Demo Conn Data"; |
||||
} |
||||
} |
@ -0,0 +1,43 @@
|
||||
package com.tptj.demo.hg.connection.data; |
||||
|
||||
import com.fanruan.api.data.open.BaseDataModel; |
||||
import com.fanruan.api.err.TableDataException; |
||||
import com.tptj.demo.hg.connection.store.Data; |
||||
import com.tptj.demo.hg.connection.conn.DemoConnection; |
||||
import com.tptj.demo.hg.connection.store.Store; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class DemoModel extends BaseDataModel { |
||||
private Data data = Data.EMPTY; |
||||
public DemoModel( DemoConnection conn ){ |
||||
data = Store.getInstance().get( conn.getKey() ); |
||||
} |
||||
@Override |
||||
public int getColumnCount() throws TableDataException { |
||||
return data.getKey().length; |
||||
} |
||||
|
||||
@Override |
||||
public String getColumnName(int cIdx) throws TableDataException { |
||||
return data.getKey()[cIdx]; |
||||
} |
||||
|
||||
@Override |
||||
public int getRowCount() throws TableDataException { |
||||
return data.getRow().length; |
||||
} |
||||
|
||||
@Override |
||||
public Object getValueAt(int rIdx, int cIdx) throws TableDataException { |
||||
return data.getRow()[rIdx][cIdx]; |
||||
} |
||||
|
||||
@Override |
||||
public void release() throws Exception { |
||||
data = Data.EMPTY; |
||||
} |
||||
} |
@ -0,0 +1,62 @@
|
||||
package com.tptj.demo.hg.connection.decision; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.fun.impl.AbstractUniversalConnectionProvider; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.web.struct.Atom; |
||||
import com.fr.web.struct.Component; |
||||
import com.fr.web.struct.browser.RequestClient; |
||||
import com.fr.web.struct.category.ScriptPath; |
||||
import com.tptj.demo.hg.connection.conn.DemoConnection; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class WebDemo extends AbstractUniversalConnectionProvider<DemoConnection> { |
||||
|
||||
@Override |
||||
public String nameForConnection() { |
||||
return "demo_con"; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForConnection() { |
||||
return "/com/tptj/demo/hg/connection/images/icon.png"; |
||||
} |
||||
|
||||
@Override |
||||
public Class<DemoConnection> classForConnection() { |
||||
return DemoConnection.class; |
||||
} |
||||
|
||||
@Override |
||||
public Atom client() { |
||||
return new Component() { |
||||
@Override |
||||
public ScriptPath script(RequestClient client) { |
||||
return ScriptPath.build("com/tptj/demo/hg/connection/js/main.js"); |
||||
} |
||||
}; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject serialize(DemoConnection connection) { |
||||
return JSONObject.create().put("key",connection.getKey()); |
||||
} |
||||
|
||||
@Override |
||||
public DemoConnection deserialize(DemoConnection old, JSONObject config ){ |
||||
DemoConnection conn = new DemoConnection(); |
||||
conn.setKey(config.optString("key", StringKit.EMPTY)); |
||||
if( null != old ){ |
||||
conn.setId( old.getId() ); |
||||
conn.setCreator( old.getCreator() ); |
||||
} |
||||
return conn; |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,33 @@
|
||||
package com.tptj.demo.hg.connection.store; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
**/ |
||||
public class Data { |
||||
private String[] key = new String[0]; |
||||
private String[][] row = new String[0][0]; |
||||
public static final Data EMPTY = new Data(); |
||||
private Data(){} |
||||
public Data(String[] key, String[][] row) { |
||||
this.key = key; |
||||
this.row = row; |
||||
} |
||||
|
||||
public String[] getKey() { |
||||
return key; |
||||
} |
||||
|
||||
public void setKey(String[] key) { |
||||
this.key = key; |
||||
} |
||||
|
||||
public String[][] getRow() { |
||||
return row; |
||||
} |
||||
|
||||
public void setRow(String[][] row) { |
||||
this.row = row; |
||||
} |
||||
} |
@ -0,0 +1,57 @@
|
||||
package com.tptj.demo.hg.connection.store; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-31 |
||||
* 模拟数据源 |
||||
**/ |
||||
public class Store { |
||||
private Map<String, Data> store = new HashMap<String,Data>(3); |
||||
private static Store instance = null; |
||||
private Store(){ } |
||||
|
||||
public boolean contains(String key){ |
||||
return store.containsKey(key); |
||||
} |
||||
|
||||
public Data get(String key){ |
||||
return store.get(key); |
||||
} |
||||
|
||||
private void load(){ |
||||
store.put("key1",new Data(new String[]{"k1","k2","k3"}, |
||||
new String[][]{ |
||||
{"v11","v12","v13"}, |
||||
{"v21","v22","v23"}, |
||||
{"v31","v32","v33"} |
||||
} )); |
||||
store.put("key2",new Data(new String[]{"k4","k5"}, |
||||
new String[][]{ |
||||
{"n11","n12"}, |
||||
{"n21","n22"}, |
||||
{"n31","n32"} |
||||
} )); |
||||
store.put("key3",new Data(new String[]{"k6","k7","k3","k8"}, |
||||
new String[][]{ |
||||
{"x11","x12","x13","x14"}, |
||||
{"x21","x22","x23","x24"}, |
||||
{"x31","x32","x33","x34"} |
||||
} )); |
||||
} |
||||
|
||||
public static Store getInstance(){ |
||||
if( null == instance ){ |
||||
synchronized (Store.class){ |
||||
if( null == instance ){ |
||||
instance = new Store(); |
||||
instance.load(); |
||||
} |
||||
} |
||||
} |
||||
return instance; |
||||
} |
||||
} |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 382 B |
@ -0,0 +1,133 @@
|
||||
/** |
||||
* @author 秃破天际 |
||||
* @version 10.0 |
||||
* Created by 秃破天际 on 2021-03-29 |
||||
**/ |
||||
!(function () { |
||||
|
||||
//编辑配置
|
||||
var createEditLine = function(label,value,ref,action){ |
||||
return { |
||||
type: 'bi.left', |
||||
items: [ |
||||
{ |
||||
type: 'bi.label', |
||||
cls: 'bi-font-bold', |
||||
width: 100, |
||||
textAlign: 'left', |
||||
text: label |
||||
}, |
||||
{ |
||||
type: 'bi.text_editor', |
||||
width: 300, |
||||
allowBlank: true, |
||||
ref: ref, |
||||
value:value, |
||||
listeners: [{ |
||||
eventName: BI.FormulaEditor.EVENT_CHANGE, |
||||
action: action |
||||
}] |
||||
} |
||||
] |
||||
}; |
||||
} |
||||
var DemoEditName = 'dec.dcm.connection.plugin.demo.edit'; |
||||
var DemoEdit = BI.inherit(BI.Widget, { |
||||
props: { |
||||
value:{ |
||||
key: '' |
||||
}, |
||||
connectionName:'' |
||||
}, |
||||
render() { |
||||
var self = this; |
||||
var o = this.options; |
||||
return { |
||||
type: 'bi.vertical', |
||||
hgap: 15, |
||||
vgap: 10, |
||||
items: [ |
||||
createEditLine( |
||||
'数据源名称', |
||||
o.connectionName,//self._parent.options.formData.connectionName,
|
||||
function(_ref) { |
||||
self.name = _ref; |
||||
}, |
||||
//hugh:2021-04-02,截止目前的所有发布版本均不支持getName方法修改数据源连接名称,需要使用下面这种非常不友好的方式修改
|
||||
function () { |
||||
self._parent.options.formData.connectionName = this.getValue(); |
||||
} |
||||
), |
||||
createEditLine( |
||||
'key值', |
||||
o.value.key, |
||||
function(_ref) { |
||||
self.key = _ref; |
||||
}, |
||||
function () {} |
||||
) |
||||
] |
||||
}; |
||||
}, |
||||
getValue() { |
||||
return { |
||||
key: this.key.getValue() |
||||
}; |
||||
}, |
||||
//hugh:2021-04-02下个小版本应该就支持直接使用getName来返回要修改的数据源链接名称了
|
||||
getName(){ |
||||
return this.name.getValue(); |
||||
} |
||||
}); |
||||
BI.shortcut(DemoEditName, DemoEdit); |
||||
BI.constant('dec.constant.database.conf.connect.form.demo.edit', DemoEditName); |
||||
|
||||
//显示配置
|
||||
var DemoShowName = 'dec.dcm.connection.plugin.demo.show'; |
||||
var DemoShow = BI.inherit(BI.Widget, { |
||||
props: { |
||||
value: { |
||||
key: '' |
||||
} |
||||
}, |
||||
render() { |
||||
var o = this.options; |
||||
return { |
||||
type: 'bi.vertical', |
||||
hgap: 15, |
||||
vgap: 10, |
||||
items: [ |
||||
{ |
||||
type: 'bi.left', |
||||
items: [ |
||||
{ |
||||
type: 'bi.label', |
||||
cls: 'bi-font-bold', |
||||
width: 100, |
||||
textAlign: 'left', |
||||
text: 'Key值' |
||||
}, |
||||
{ |
||||
type: 'bi.label', |
||||
text: o.value.key |
||||
} |
||||
] |
||||
} |
||||
] |
||||
}; |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut(DemoShowName, DemoShow); |
||||
BI.constant('dec.constant.database.conf.connect.form.demo.show', DemoShowName); |
||||
//注册
|
||||
BI.config('dec.connection.provider.datebase', function(provider){ |
||||
provider.registerDatabaseType({ |
||||
text: 'Demo Conn', |
||||
databaseType: 'demo_con', |
||||
iconUrl: 'com/tptj/demo/hg/connection/images/demo.jpg', |
||||
edit: 'dec.dcm.connection.plugin.demo.edit', |
||||
show: 'dec.dcm.connection.plugin.demo.show', |
||||
}); |
||||
}); |
||||
})(); |
Loading…
Reference in new issue