Browse Source

Pull request #8310: REPORT-68355 【迭代】【数据集管理优化】搜索关键字匹配数据列,数据列所在数据集没有展开

Merge in DESIGN/design from ~YVAN/design:feature/x to feature/x

* commit '72a13f4acd12ab715a7fbf29f179c32da1cd867e':
  REPORT-68355 【迭代】【数据集管理优化】搜索关键字匹配数据列,数据列所在数据集没有展开 【问题原因】之前把切换回工具栏的调用放在TableDataTreePane的refreshDockingView里又因为TableDataTreePane的每一次getInstance都会去调用一次refreshDockingView,搜索任务过程中会经常调用到TableDataTreePane.getInstance,所以造成了搜索状态上的紊乱 【改动思路】1. 扩展TreeSearchStatus,新增Not_In_Search_Mode,视为非搜索模式,其它的状态(搜索中,搜索中止,搜索完成等)统统视为搜索模式 2. 在需要退出搜索模式的地方(切换数据集Tab和新打开一个模板),加上退出的逻辑;不把逻辑放到refreshDockingView里 3. 部分代码质量问题 【review建议】上面改动的第二点,分布在需要退出的场景里,会显得比较松散,但是我没找到一个好的地方可以统一搞。有思路的可以帮忙提供下,感谢~
feature/x
Yvan 3 years ago
parent
commit
f3029b94d7
  1. 6
      designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java
  2. 26
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/TableDataTreeSearchManager.java
  3. 5
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/control/pre/TableDataPreSearchTask.java
  4. 12
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TableDataSearchRemindPane.java
  5. 28
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TreeSearchToolbarPane.java
  6. 2
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/searcher/TreeSearchStatus.java
  7. 4
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java

6
designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java

@ -588,9 +588,6 @@ public class TableDataTreePane extends BasicTableDataTreePane {
private void populate(TableDataSourceOP op) { private void populate(TableDataSourceOP op) {
this.op = op; this.op = op;
if (TableDataTreeSearchManager.getInstance().getTreeSearchStatus() == TreeSearchStatus.SEARCHING) {
TableDataTreeSearchManager.getInstance().switchBackToolBar();
}
tableDataTree.populate(op); tableDataTree.populate(op);
checkButtonEnabled(); checkButtonEnabled();
} }
@ -744,6 +741,9 @@ public class TableDataTreePane extends BasicTableDataTreePane {
if (op != null) { if (op != null) {
op.setDataMode(modeArray[buttonGroup.getSelectedIndex()]); op.setDataMode(modeArray[buttonGroup.getSelectedIndex()]);
addMenuDef.setEnabled(modeArray[buttonGroup.getSelectedIndex()] == TEMPLATE_TABLE_DATA); addMenuDef.setEnabled(modeArray[buttonGroup.getSelectedIndex()] == TEMPLATE_TABLE_DATA);
if (TableDataTreeSearchManager.getInstance().isInSearchMode()) {
TableDataTreeSearchManager.getInstance().outOfSearchMode();
}
refreshDockingView(); refreshDockingView();
} }

26
designer-base/src/main/java/com/fr/design/data/datapane/management/search/TableDataTreeSearchManager.java

@ -64,7 +64,7 @@ public class TableDataTreeSearchManager {
} }
private void init() { private void init() {
this.treeSearchStatus = TreeSearchStatus.SEARCH_NOT_BEGIN; this.treeSearchStatus = TreeSearchStatus.NOT_IN_SEARCH_MODE;
} }
private static class Holder { private static class Holder {
@ -194,11 +194,19 @@ public class TableDataTreeSearchManager {
/** /**
* 切换回工具栏 * 切换回工具栏
*/ */
public void switchBackToolBar() { public void restoreToolBarAndTreePane() {
setTreeSearchStatus(TreeSearchStatus.SEARCH_NOT_BEGIN); setTreeSearchStatus(TreeSearchStatus.NOT_IN_SEARCH_MODE);
if (treeSearcher != null) {
treeSearcher.afterSearch();
}
restoreTreePane();
}
public void restoreTreePane() {
lastSearchText = null; lastSearchText = null;
treeSearcher.afterSearch(); if (rendererHelper != null) {
rendererHelper.restore(getCurrentTableDataTree()); rendererHelper.restore(getCurrentTableDataTree());
}
} }
/** /**
@ -264,4 +272,12 @@ public class TableDataTreeSearchManager {
} }
return false; return false;
} }
public boolean isInSearchMode() {
return getTreeSearchStatus() != TreeSearchStatus.NOT_IN_SEARCH_MODE;
}
public void outOfSearchMode() {
restoreToolBarAndTreePane();
}
} }

5
designer-base/src/main/java/com/fr/design/data/datapane/management/search/control/pre/TableDataPreSearchTask.java

@ -1,9 +1,11 @@
package com.fr.design.data.datapane.management.search.control.pre; package com.fr.design.data.datapane.management.search.control.pre;
import com.fr.design.data.datapane.management.search.TableDataTreeSearchManager;
import com.fr.design.data.datapane.management.search.control.TreeSearchTask; import com.fr.design.data.datapane.management.search.control.TreeSearchTask;
import com.fr.design.data.datapane.management.search.control.common.TableDataSearchResult; import com.fr.design.data.datapane.management.search.control.common.TableDataSearchResult;
import com.fr.design.data.datapane.management.search.control.TreeSearchCallback; import com.fr.design.data.datapane.management.search.control.TreeSearchCallback;
import com.fr.design.data.datapane.management.search.control.TreeSearchResult; import com.fr.design.data.datapane.management.search.control.TreeSearchResult;
import com.fr.design.data.datapane.management.search.searcher.TreeSearchStatus;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
@ -27,6 +29,9 @@ public class TableDataPreSearchTask implements TreeSearchTask {
public void run() { public void run() {
TreeSearchResult result; TreeSearchResult result;
try { try {
if (TableDataTreeSearchManager.getInstance().getTreeSearchStatus() != TreeSearchStatus.SEARCH_NOT_BEGIN) {
return;
}
tableDataWrapper.calculateColumnNameList(); tableDataWrapper.calculateColumnNameList();
result = new TableDataSearchResult.Builder() result = new TableDataSearchResult.Builder()
.buildSuccess(true) .buildSuccess(true)

12
designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TableDataSearchRemindPane.java

@ -50,7 +50,7 @@ public class TableDataSearchRemindPane extends JPanel implements TreeSearchStatu
@Override @Override
public void updateTreeSearchChange(TreeSearchStatusChangeEvent event) { public void updateTreeSearchChange(TreeSearchStatusChangeEvent event) {
TreeSearchStatus status = event.getTreeSearchStatus(); TreeSearchStatus status = event.getTreeSearchStatus();
if (status == TreeSearchStatus.SEARCH_NOT_BEGIN) { if (status == TreeSearchStatus.SEARCH_NOT_BEGIN || status == TreeSearchStatus.NOT_IN_SEARCH_MODE) {
remindPane.onNotBegin(); remindPane.onNotBegin();
treePane.onNotBegin(); treePane.onNotBegin();
} else if (status == TreeSearchStatus.SEARCHING) { } else if (status == TreeSearchStatus.SEARCHING) {
@ -147,12 +147,12 @@ public class TableDataSearchRemindPane extends JPanel implements TreeSearchStatu
} }
} }
private class RemindPane extends JPanel implements TreeSearchStatusChange { private static class RemindPane extends JPanel implements TreeSearchStatusChange {
private static final String IN_SEARCHING = "Fine-Design_Tree_Search_In_Searching"; private static final String IN_SEARCHING = Toolkit.i18nText("Fine-Design_Tree_Search_In_Searching");
private static final String STOP_SEARCHING = "Fine-Design_Tree_Search_Stop_Search"; private static final String STOP_SEARCHING = Toolkit.i18nText("Fine-Design_Tree_Search_Stop_Search");
private static final String SEARCHING_STOPPED = "Fine-Design_Tree_Search_Search_Stopped"; private static final String SEARCHING_STOPPED = Toolkit.i18nText("Fine-Design_Tree_Search_Search_Stopped");
private static final String DONE_SEARCHING = "Fine-Design_Tree_Search_Search_Completed"; private static final String DONE_SEARCHING = Toolkit.i18nText("Fine-Design_Tree_Search_Search_Completed");
private UILabel textLabel; private UILabel textLabel;

28
designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TreeSearchToolbarPane.java

@ -5,6 +5,8 @@ import com.fr.design.DesignModelAdapter;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.datapane.TableDataTreePane;
import com.fr.design.data.datapane.management.search.TableDataTreeSearchManager; import com.fr.design.data.datapane.management.search.TableDataTreeSearchManager;
import com.fr.design.data.datapane.management.search.event.TreeSearchStatusChangeEvent;
import com.fr.design.data.datapane.management.search.event.TreeSearchStatusChangeListener;
import com.fr.design.data.datapane.management.search.searcher.TreeSearchStatus; import com.fr.design.data.datapane.management.search.searcher.TreeSearchStatus;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
@ -32,7 +34,7 @@ import java.awt.event.MouseEvent;
/** /**
* @author Yvan * @author Yvan
*/ */
public class TreeSearchToolbarPane extends Panel { public class TreeSearchToolbarPane extends Panel implements TreeSearchStatusChangeListener {
public static final String TOOLBAR_PANE = "toolbarPane"; public static final String TOOLBAR_PANE = "toolbarPane";
@ -85,6 +87,7 @@ public class TreeSearchToolbarPane extends Panel {
initContentPane(); initContentPane();
add(contentPane, BorderLayout.CENTER); add(contentPane, BorderLayout.CENTER);
setPreferredSize(new Dimension(240, 30)); setPreferredSize(new Dimension(240, 30));
TableDataTreeSearchManager.getInstance().registerTreeSearchStatusChangeListener(this);
} }
private void initContentPane() { private void initContentPane() {
@ -147,7 +150,7 @@ public class TreeSearchToolbarPane extends Panel {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
searchTextField.setText(StringUtils.EMPTY); searchTextField.setText(StringUtils.EMPTY);
TableDataTreeSearchManager.getInstance().switchBackToolBar(); TableDataTreeSearchManager.getInstance().outOfSearchMode();
switchPane(TOOLBAR_PANE); switchPane(TOOLBAR_PANE);
} }
}); });
@ -158,12 +161,10 @@ public class TreeSearchToolbarPane extends Panel {
} }
private void dealWithTextChange() { private void dealWithTextChange() {
// 判断搜索是否正在进行 if (StringUtils.isEmpty(searchTextField.getText()) && TableDataTreeSearchManager.getInstance().isInSearchMode()) {
if (StringUtils.isEmpty(searchTextField.getText()) && TableDataTreeSearchManager.getInstance().getTreeSearchStatus() != TreeSearchStatus.SEARCH_NOT_BEGIN) { // 如果是搜索模式下,看作是用户删除输入框文字,仅复原TableDataTreePane
TableDataTreeSearchManager.getInstance().setTreeSearchStatus(TreeSearchStatus.SEARCH_NOT_BEGIN); TableDataTreeSearchManager.getInstance().restoreTreePane();
DesignModelAdapter<?, ?> currentModelAdapter = DesignModelAdapter.getCurrentModelAdapter(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).refreshDockingView();
TableDataTreePane tableDataTreePane = (TableDataTreePane) TableDataTreePane.getInstance(currentModelAdapter);
tableDataTreePane.refreshDockingView();
} }
} }
@ -189,4 +190,15 @@ public class TreeSearchToolbarPane extends Panel {
public void setPlaceHolder(String placeHolder) { public void setPlaceHolder(String placeHolder) {
this.searchTextField.setPlaceholder(placeHolder); this.searchTextField.setPlaceholder(placeHolder);
} }
/**
* 根据搜索状态变化来调整自身面板的显示
*
* @param event
*/
@Override
public void updateTreeSearchChange(TreeSearchStatusChangeEvent event) {
TreeSearchStatus treeSearchStatus = event.getTreeSearchStatus();
switchPane(treeSearchStatus == TreeSearchStatus.NOT_IN_SEARCH_MODE ? TOOLBAR_PANE : SEARCH_PANE);
}
} }

2
designer-base/src/main/java/com/fr/design/data/datapane/management/search/searcher/TreeSearchStatus.java

@ -5,6 +5,8 @@ package com.fr.design.data.datapane.management.search.searcher;
*/ */
public enum TreeSearchStatus { public enum TreeSearchStatus {
NOT_IN_SEARCH_MODE,
/** /**
* 搜索未开始 * 搜索未开始
*/ */

4
designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java

@ -11,6 +11,7 @@ import com.fr.design.actions.UpdateAction;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.datapane.TableDataTreePane;
import com.fr.design.data.datapane.management.search.TableDataTreeSearchManager;
import com.fr.design.data.tabledata.ResponseDataSourceChange; import com.fr.design.data.tabledata.ResponseDataSourceChange;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.file.FileOperations; import com.fr.design.file.FileOperations;
@ -244,6 +245,9 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
DesignModelAdapter.setCurrentModelAdapter(jt.getModel()); DesignModelAdapter.setCurrentModelAdapter(jt.getModel());
fireDSChanged(); fireDSChanged();
if (TableDataTreeSearchManager.getInstance().isInSearchMode()) {
TableDataTreeSearchManager.getInstance().outOfSearchMode();
}
TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter());
HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt);
//处理自动新建的模板 //处理自动新建的模板

Loading…
Cancel
Save