|
|
|
@ -13,6 +13,8 @@ import com.fr.design.ExtraDesignClassManager;
|
|
|
|
|
import com.fr.design.data.MapCompareUtils; |
|
|
|
|
import com.fr.design.data.datapane.preview.ConnectionInfoBeanHelper; |
|
|
|
|
import com.fr.design.dialog.BasicDialog; |
|
|
|
|
import com.fr.design.dialog.FineJOptionPane; |
|
|
|
|
import com.fr.design.editlock.EditLockUtils; |
|
|
|
|
import com.fr.design.fun.ConnectionProvider; |
|
|
|
|
import com.fr.design.gui.controlpane.JListControlPane; |
|
|
|
|
import com.fr.design.gui.controlpane.NameObjectCreator; |
|
|
|
@ -25,18 +27,21 @@ import com.fr.general.NameObject;
|
|
|
|
|
import com.fr.license.database.DBTypes; |
|
|
|
|
import com.fr.license.database.DataBaseTypePointManager; |
|
|
|
|
import com.fr.license.exception.DataBaseNotSupportedException; |
|
|
|
|
import com.fr.locale.InterProviderFactory; |
|
|
|
|
import com.fr.log.FineLoggerFactory; |
|
|
|
|
import com.fr.report.LockItem; |
|
|
|
|
import com.fr.stable.ArrayUtils; |
|
|
|
|
import com.fr.stable.Nameable; |
|
|
|
|
import com.fr.stable.StringUtils; |
|
|
|
|
import com.fr.stable.core.PropertyChangeAdapter; |
|
|
|
|
import com.fr.workspace.WorkContext; |
|
|
|
|
import com.fr.workspace.engine.exception.DriverUnExistException; |
|
|
|
|
import com.fr.workspace.server.database.DataBaseTypeOperator; |
|
|
|
|
import com.fr.workspace.server.entity.connection.ConnectionBean; |
|
|
|
|
import com.fr.workspace.server.repository.connection.ConnectionRepository; |
|
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
|
|
|
|
|
|
|
import javax.swing.SwingWorker; |
|
|
|
|
import javax.swing.*; |
|
|
|
|
import java.awt.Window; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Arrays; |
|
|
|
@ -345,18 +350,23 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void alterConnections(List<ConnectionInfoBean> addConnections, List<String> removedConnNames, List<ConnectionInfoBean> updateConnection) throws Exception { |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
for (ConnectionInfoBean bean : addConnections) { |
|
|
|
|
// 处理新增 connections
|
|
|
|
|
processConnections(addConnections, bean -> { |
|
|
|
|
ConnectionRepository.getInstance().add(bean); |
|
|
|
|
} |
|
|
|
|
for (ConnectionInfoBean bean : updateConnection) { |
|
|
|
|
}, "add"); |
|
|
|
|
|
|
|
|
|
// 处理更新 connections
|
|
|
|
|
processConnections(updateConnection, bean -> { |
|
|
|
|
ConnectionRepository.getInstance().update(bean); |
|
|
|
|
} |
|
|
|
|
for (String name : removedConnNames) { |
|
|
|
|
}, "update"); |
|
|
|
|
|
|
|
|
|
// 处理移除 connections
|
|
|
|
|
processConnections(removedConnNames, name -> { |
|
|
|
|
ConnectionRepository.getInstance().delete(new ConnectionInfoBean(name)); |
|
|
|
|
} |
|
|
|
|
// hades:远程环境时,由于时直接RPC调用远程修改,因此设计器本地配置需要失效
|
|
|
|
|
}, "delete"); |
|
|
|
|
|
|
|
|
|
// 远程环境处理逻辑
|
|
|
|
|
if (!WorkContext.getCurrent().isLocal()) { |
|
|
|
|
EventDispatcher.fire(RemoteConfigEvent.EDIT, "ConnectionConfig"); |
|
|
|
|
} |
|
|
|
@ -366,18 +376,46 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private <T> void processConnections(List<T> connections, ThrowingConsumer<T> action, String actionType) throws Exception { |
|
|
|
|
for (T item : connections) { |
|
|
|
|
try { |
|
|
|
|
action.accept(item); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
String errorConnectionName = (item instanceof ConnectionInfoBean) |
|
|
|
|
? ((ConnectionInfoBean) item).getConnectionName() |
|
|
|
|
: item.toString(); |
|
|
|
|
if (e instanceof DriverUnExistException) { |
|
|
|
|
throw new DriverUnExistException(InterProviderFactory.getProvider().getLocText("Fine-Core_Data_Connection") + errorConnectionName |
|
|
|
|
+ InterProviderFactory.getProvider().getLocText("Fine-Core_Driver_Not_Found")); |
|
|
|
|
} |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@FunctionalInterface |
|
|
|
|
interface ThrowingConsumer<T> { |
|
|
|
|
void accept(T t) throws Exception; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void showDialog(Window parent) { |
|
|
|
|
final Map<String, Connection> connectionMap = ConnectionInfoBeanHelper.createConnectionMap(ConnectionRepository.getInstance().getAll()); |
|
|
|
|
final ConnectionManagerPane connectionManagerPane = new ConnectionManagerPane() { |
|
|
|
|
@Override |
|
|
|
|
public void complete() { |
|
|
|
|
populate(connectionMap); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
final BasicDialog connectionListDialog = connectionManagerPane.showLargeWindow(parent, null); |
|
|
|
|
connectionListDialog.addDialogActionListener(new ConnectionListDialogActionAdapter(connectionManagerPane, connectionListDialog, connectionMap)); |
|
|
|
|
connectionListDialog.setVisible(true); |
|
|
|
|
try { |
|
|
|
|
final Map<String, Connection> connectionMap = ConnectionInfoBeanHelper.createConnectionMap(ConnectionRepository.getInstance().getAll()); |
|
|
|
|
final ConnectionManagerPane connectionManagerPane = new ConnectionManagerPane() { |
|
|
|
|
@Override |
|
|
|
|
public void complete() { |
|
|
|
|
populate(connectionMap); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
final BasicDialog connectionListDialog = connectionManagerPane.showLargeWindow(parent, null); |
|
|
|
|
connectionListDialog.addDialogActionListener(new ConnectionListDialogActionAdapter(connectionManagerPane, connectionListDialog, connectionMap)); |
|
|
|
|
connectionListDialog.setVisible(true); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
|
|
|
FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Remote_Data_Error"), |
|
|
|
|
Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE); |
|
|
|
|
EditLockUtils.unlock(LockItem.CONNECTION); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|