帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

125 lines
6.6 KiB

package com.fanruan.boot.env.function;
import com.fanruan.boot.DatasourceComponent;
import com.fanruan.carina.Carina;
import com.fanruan.carina.annotions.DependsOn;
import com.fanruan.carina.annotions.FineComponent;
import com.fanruan.carina.annotions.Start;
import com.fanruan.carina.annotions.Stop;
import com.fanruan.carina.annotions.Supplemental;
import com.fanruan.config.impl.data.ConnectionConfigProviderFactory;
import com.fanruan.config.impl.data.ConnectionConfigWriter;
import com.fanruan.config.impl.data.ConnectionConfigWriterFactory;
import com.fanruan.config.impl.data.TableDataConfigProviderFactory;
import com.fanruan.data.ConnectionConfigWrapper;
import com.fanruan.datasource.connection.processor.ElasticSearchConnectionProcessor;
import com.fanruan.datasource.connection.processor.FTPConnectionProcessor;
import com.fanruan.datasource.connection.processor.LocalFileConnectionProcessor;
import com.fanruan.datasource.connection.processor.PublicDatasetConnectionProcessor;
import com.fanruan.datasource.connection.processor.SSHConnectionProcessor;
import com.fanruan.datasource.connection.processor.SapRfcConnectionProcessor;
import com.fanruan.datasource.connection.processor.kafka.KafkaConnectionProcessor;
import com.fanruan.datasource.connection.processor.mongo.MongoConnectionProcessor;
import com.fanruan.workplace.http.codec.SerializerRegister;
import com.fanruan.workplace.http.codec.SerializerRegisterGroup;
import com.fanruan.workplace.http.codec.xml.XmlableSerializer;
import com.fr.base.MultiParameterParser;
import com.fr.base.ParameterType;
import com.fr.base.ParameterTypeHandler;
import com.fr.base.TableData;
import com.fr.base.parameter.FormulaParameterParser;
import com.fr.base.parameter.TableColumnParameterParser;
import com.fr.data.driver.classloader.DriverClassLoaderHelper;
import com.fr.data.driver.classloader.impl.ChildFirstDriverClassLoader;
import com.fr.data.driver.classloader.impl.ChildOnlyDriverClassLoader;
import com.fr.data.driver.constants.DriverLoaderStrategies;
import com.fr.data.impl.Connection;
import com.fr.decision.webservice.v10.datasource.connection.processor.impl.ConnectionPluginProcessor;
import com.fr.decision.webservice.v10.datasource.connection.processor.impl.ConnectionProcessorFactory;
import com.fr.decision.webservice.v10.datasource.connection.processor.impl.JDBCConnectionProcessor;
import com.fr.decision.webservice.v10.datasource.connection.processor.impl.JDYConnectionProcessor;
import com.fr.decision.webservice.v10.datasource.connection.processor.impl.JNDIConnectionProcessor;
import com.fr.decision.webservice.v10.datasource.dataset.processor.impl.DataSetProcessorFactory;
import com.fr.design.data.datapane.connect.LocalConnectionSource;
import com.fr.design.data.tabledata.LocalTableDataSource;
import com.fr.file.TableDataConfigWrapper;
import com.fr.workspace.server.repository.connection.ConnectionWriterShell;
import com.fr.workspace.server.repository.connection.LocalConnectionShell;
import com.fr.workspace.server.repository.tabledata.LocalTableDataShell;
/**
* 设计器数据源组件
*
* @author Destiny.Lin
* @since 11.0
* Created on 2024/7/2
*/
@FineComponent(name = "design_function_datasource")
@DependsOn(dependencies = "design_function_update")
public class DesignDatasourceComponent extends DatasourceComponent {
/**
* prepare
*/
@Supplemental
public void prepare() {
super.prepare();
// 注册数据连接处理器
initConnectionProcessor();
DataSetProcessorFactory.init();
Carina.getApplicationContext().singleton(LocalConnectionShell.class).set(new LocalConnectionSource());
Carina.getApplicationContext().singleton(LocalTableDataShell.class).set(new LocalTableDataSource());
Carina.getApplicationContext().group(SerializerRegisterGroup.class).add(new SerializerRegister(Connection.class, XmlableSerializer.getInstance()));
Carina.getApplicationContext().group(SerializerRegisterGroup.class).add(new SerializerRegister(TableData.class, XmlableSerializer.getInstance()));
}
/**
* start
*/
@Start
public void start() {
// 服务器数据集与数据连接设计器这边先手动切为finedb存储,后续数据中心适配后再切为他们提供的wrapper
ConnectionConfigProviderFactory.registerConnectionConfigProvider(ConnectionConfigWrapper.getInstance());
TableDataConfigProviderFactory.getInstance().registerTableDataConfigProvider(new TableDataConfigWrapper());
registerDriverClassLoader();
ConnectionConfigWriterFactory.registerConnectionConfigWriter((ConnectionConfigWriter) ConnectionConfigProviderFactory.getConfigProvider());
Carina.getApplicationContext().singleton(ConnectionWriterShell.class).set(ConnectionConfigWriterFactory.getConfigWriter());
ParameterTypeHandler.getInstance().addParser(ParameterType.Multi.name(), new MultiParameterParser());
ParameterTypeHandler.getInstance().addParser(ParameterType.JSONArray.name(), new MultiParameterParser());
ParameterTypeHandler.getInstance().addParser(ParameterType.Formula.name(), new FormulaParameterParser());
ParameterTypeHandler.getInstance().addParser(ParameterType.TableColumn.name(), new TableColumnParameterParser());
}
private void registerDriverClassLoader() {
DriverClassLoaderHelper.INSTANCE.register(DriverLoaderStrategies.CHILD_FIRST, ChildFirstDriverClassLoader.class);
DriverClassLoaderHelper.INSTANCE.register(DriverLoaderStrategies.CHILD_ONLY, ChildOnlyDriverClassLoader.class);
}
/**
* stop
*/
@Stop
public void stop() {
}
/**
* 设计器当前没有更好的扫描手段,只能先手动注册了
*/
private void initConnectionProcessor() {
ConnectionProcessorFactory.register(JDBCConnectionProcessor.KEY);
ConnectionProcessorFactory.register(JNDIConnectionProcessor.KEY);
ConnectionProcessorFactory.register(ConnectionPluginProcessor.KEY);
ConnectionProcessorFactory.register(JDYConnectionProcessor.KEY);
ConnectionProcessorFactory.register(new KafkaConnectionProcessor());
ConnectionProcessorFactory.register(new MongoConnectionProcessor());
ConnectionProcessorFactory.register(new ElasticSearchConnectionProcessor());
ConnectionProcessorFactory.register(new FTPConnectionProcessor());
ConnectionProcessorFactory.register(new LocalFileConnectionProcessor());
ConnectionProcessorFactory.register(new PublicDatasetConnectionProcessor());
ConnectionProcessorFactory.register(new SapRfcConnectionProcessor());
ConnectionProcessorFactory.register(new SSHConnectionProcessor());
}
}