Browse Source
* commit 'abb8af7fd1da6152e02b0dcc884ad2282e6229fe': REPORT-72635 - 数据连接面板为空的问题(含控制权限) 有些新类,没提交进去 REPORT-72635 - 数据连接面板为空的问题(含控制权限) 【问题原因】同步到10.0 【改动思路】同步到10.0 【review建议】无 REPORT-76370 提供一个数据连接前置检查接口&提交10.0 REPORT-76370 提供一个数据连接前置检查接口&提交10.0bugfix/10.0
superman
2 years ago
10 changed files with 445 additions and 46 deletions
@ -0,0 +1,57 @@ |
|||||||
|
package com.fr.design.data.datapane.auth; |
||||||
|
|
||||||
|
import com.fr.base.TableData; |
||||||
|
import com.fr.data.impl.Connection; |
||||||
|
import com.fr.data.impl.DBTableData; |
||||||
|
import com.fr.data.impl.NameDatabaseConnection; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.workspace.WorkContext; |
||||||
|
import com.fr.workspace.server.connection.DBConnectAuth; |
||||||
|
|
||||||
|
import java.util.Collection; |
||||||
|
import java.util.Collections; |
||||||
|
|
||||||
|
/** |
||||||
|
* 数据连接权限相关的工具类 |
||||||
|
* @author Yvan |
||||||
|
*/ |
||||||
|
public class TableDataAuthHelper { |
||||||
|
|
||||||
|
/** |
||||||
|
* 编辑数据集时是否需要检查权限 |
||||||
|
* @param tableData |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static boolean needCheckAuthWhenEdit(TableData tableData) { |
||||||
|
// 远程设计下,编辑DBTableData时需要判断权限
|
||||||
|
return !WorkContext.getCurrent().isLocal() && tableData instanceof DBTableData; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取无权限数据连接集合 |
||||||
|
* 远程下需要调用RPC,为耗时操作,谨慎使用 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static Collection<String> getNoAuthConnections() { |
||||||
|
// 获取无权限连接集合
|
||||||
|
Collection<String> noAuthConnections = WorkContext.getCurrent().get(DBConnectAuth.class).getNoAuthConnections(); |
||||||
|
return noAuthConnections == null ? Collections.emptyList() : noAuthConnections; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 通过数据集获取其数据连接的名称 |
||||||
|
* |
||||||
|
* 注意: |
||||||
|
* 1. Connection接口本身是不提供名称的,只有我们内部为了使用方便,将其包装成了NameDataBaseConnection |
||||||
|
* 如果不是NameDataBaseConnection类型,则无名称,因此这里只能用判断类型的方式获取名称 |
||||||
|
* 2. 仅支持DBTableData获取连接名 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String getConnectionNameByDBTableData(DBTableData tableData) { |
||||||
|
Connection database = tableData.getDatabase(); |
||||||
|
if (database instanceof NameDatabaseConnection) { |
||||||
|
return ((NameDatabaseConnection) database).getName(); |
||||||
|
} |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.loading; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 可切换的DBTableData对应的数据集面板,需要使用CardLayout布局 |
||||||
|
* 主要是给插件适配用的 |
||||||
|
* @author Yvan |
||||||
|
*/ |
||||||
|
public interface SwitchableTableDataPane { |
||||||
|
|
||||||
|
/** Loading面板 */ |
||||||
|
String LOADING_PANE_NAME = "Loading"; |
||||||
|
/** 内容面板 */ |
||||||
|
String CONTENT_PANE_NAME = "Content"; |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据面板名称切换面板 |
||||||
|
* @param paneName 面板名称 |
||||||
|
*/ |
||||||
|
void switchTo(String paneName); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.loading; |
||||||
|
|
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.CardLayout; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Yvan |
||||||
|
*/ |
||||||
|
public class TableDataLoadingPane extends BasicPane { |
||||||
|
|
||||||
|
/** Loading面板 */ |
||||||
|
public static final String LOADING_PANE_NAME = "Loading"; |
||||||
|
/** 无权限提示面板 */ |
||||||
|
public static final String NO_AUTH_PANE_NAME = "NoAuthority"; |
||||||
|
/** 错误提示面板 */ |
||||||
|
public static final String ERROR_NAME = "Error"; |
||||||
|
|
||||||
|
private CardLayout card; |
||||||
|
|
||||||
|
/** 加载中面板 */ |
||||||
|
private JPanel loadingPane; |
||||||
|
/** 错误提示面板 */ |
||||||
|
private JPanel errorPane; |
||||||
|
/** 数据连接无权限面板 */ |
||||||
|
private JPanel noAuthorityPane; |
||||||
|
|
||||||
|
public TableDataLoadingPane() { |
||||||
|
initPanes(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initPanes() { |
||||||
|
card = new CardLayout(); |
||||||
|
this.setLayout(card); |
||||||
|
loadingPane = new TipsPane(true); |
||||||
|
errorPane = new TipsPane(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Error")); |
||||||
|
noAuthorityPane = new TipsPane(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_No_Auth")); |
||||||
|
add(LOADING_PANE_NAME, loadingPane); |
||||||
|
add(NO_AUTH_PANE_NAME, noAuthorityPane); |
||||||
|
add(ERROR_NAME, errorPane); |
||||||
|
switchTo(LOADING_PANE_NAME); |
||||||
|
} |
||||||
|
|
||||||
|
public void switchTo(String panelName) { |
||||||
|
card.show(this, panelName); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Basic_DS-Database_Query"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.design.data.tabledata.tabledatapane.loading; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JProgressBar; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
|
||||||
|
/** |
||||||
|
* 提示面板,支持自定义提示,支持进度条配置可选 |
||||||
|
* @author Yvan |
||||||
|
*/ |
||||||
|
public class TipsPane extends JPanel { |
||||||
|
|
||||||
|
/** |
||||||
|
* 默认提示 |
||||||
|
*/ |
||||||
|
private static final String LOADING = Toolkit.i18nText("Fine-Design_Basic_Loading_And_Waiting"); |
||||||
|
|
||||||
|
public TipsPane () { |
||||||
|
this(LOADING, false); |
||||||
|
} |
||||||
|
|
||||||
|
public TipsPane (String tip) { |
||||||
|
this(tip, false); |
||||||
|
} |
||||||
|
|
||||||
|
public TipsPane (boolean needProgressBar) { |
||||||
|
this(LOADING, needProgressBar); |
||||||
|
} |
||||||
|
|
||||||
|
public TipsPane (String tips, boolean needProgressBar) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
UILabel tipsLabel = new UILabel(tips, SwingConstants.CENTER); |
||||||
|
this.add(tipsLabel, BorderLayout.CENTER); |
||||||
|
if (needProgressBar) { |
||||||
|
JProgressBar progressBar = new JProgressBar(); |
||||||
|
progressBar.setIndeterminate(true); |
||||||
|
this.add(progressBar, BorderLayout.SOUTH); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue