diff --git a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java index fe7b66aeca..ea50d88268 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java +++ b/designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java @@ -390,7 +390,6 @@ public class AlphaFineDialog extends UIDialog { */ private void rebuildList(String searchText) { resetContainer(); - if (searchText.startsWith(ADVANCED_SEARCH_MARK)) { if (searchText.startsWith(ACTION_MARK_SHORT) || searchText.startsWith(ACTION_MARK)) { storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length()); @@ -624,6 +623,7 @@ public class AlphaFineDialog extends UIDialog { private void dealWithMoreOrLessResult(int index, MoreModel selectedValue) { if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), selectedValue.getContent())) { selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowLess")); + rebuildShowMoreList(index, selectedValue); } else { selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowAll")); @@ -795,13 +795,32 @@ public class AlphaFineDialog extends UIDialog { * @param selectedValue */ private void rebuildShowMoreList(int index, MoreModel selectedValue) { - SearchResult moreResult = getMoreResult(selectedValue); if ((selectedValue).getContent().equals(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"))) { - for (int i = 0; i < moreResult.size(); i++) { - this.searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResult.get(i)); + splitLabel.setIcon(new ImageIcon(getClass().getResource(AlphaFineConstants.IMAGE_URL + "bigloading.gif"))); + if (this.searchWorker != null && !this.searchWorker.isDone()) { + this.searchWorker.cancel(true); + this.searchWorker = null; } + this.searchWorker = new SwingWorker() { + @Override + protected Object doInBackground() throws Exception { + for (int i = 0; i < getMoreResult(selectedValue).size(); i++) { + searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, getMoreResult(selectedValue).get(i)); + } + return null; + } + + @Override + protected void done() { + if (!isCancelled()) { + splitLabel.setIcon(null); + } + } + }; + this.searchWorker.execute(); + } else { - for (int i = 0; i < moreResult.size(); i++) { + for (int i = 0; i < getMoreResult(selectedValue).size(); i++) { this.searchListModel.remove(index + AlphaFineConstants.SHOW_SIZE + 1); } diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java index 22f4424c9f..8da604ab13 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java @@ -39,6 +39,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { private static FileSearchManager fileSearchManager = null; private SearchResult filterModelList; private SearchResult lessModelList; + private SearchResult moreModelList; private List fileNodes = null; //停止搜索 private boolean stopSearch = false; @@ -73,6 +74,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { public synchronized SearchResult getLessSearchResult(String searchText) { this.filterModelList = new SearchResult(); this.lessModelList = new SearchResult(); + this.moreModelList = new SearchResult(); searchText = dealWithSearchText(searchText); if (StringUtils.isBlank(searchText) || ComparatorUtils.equals(searchText, DS_NAME)) { lessModelList.add(new MoreModel(Inter.getLocText("FR-Designer_Templates"))); @@ -101,16 +103,20 @@ public class FileSearchManager implements AlphaFineSearchProvider { @Override public SearchResult getMoreSearchResult(String searchText) { + if (moreModelList != null && !moreModelList.isEmpty()) { + return moreModelList; + } this.filterModelList = new SearchResult(); this.lessModelList = new SearchResult(); + this.moreModelList = new SearchResult(); searchText = dealWithSearchText(searchText); Env env = FRContext.getCurrentEnv(); AlphaFineHelper.checkCancel(); isContainCpt = true; isContainFrm = true; doSearch(searchText, false, env); - lessModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size())); - return lessModelList; + moreModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size())); + return moreModelList; } private void doSearch(String searchText, boolean needMore, Env env) { @@ -193,7 +199,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { if (!AlphaFineHelper.getFilterResult().contains(model)) { filterModelList.add(model); } - if (filterModelList.size() > AlphaFineConstants.SHOW_SIZE && needMore) { + if(filterModelList.size() > AlphaFineConstants.SHOW_SIZE && needMore) { stopSearch = true; } isAlreadyContain = true; @@ -272,4 +278,12 @@ public class FileSearchManager implements AlphaFineSearchProvider { public void setContainFrm(boolean containFrm) { isContainFrm = containFrm; } + + public SearchResult getMoreModelList() { + return moreModelList; + } + + public void setMoreModelList(SearchResult moreModelList) { + this.moreModelList = moreModelList; + } } \ No newline at end of file diff --git a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java index 2978eee40e..17cd01f584 100644 --- a/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java +++ b/designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java @@ -15,6 +15,8 @@ import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; +import com.fr.plugin.basic.version.Version; +import com.fr.plugin.basic.version.VersionIntervalFactory; import com.fr.stable.StringUtils; import java.io.UnsupportedEncodingException; @@ -37,10 +39,18 @@ public class PluginSearchManager implements AlphaFineSearchProvider { } + private static boolean isCompatibleCurrentEnv(String envVersion){ + return VersionIntervalFactory.create(envVersion).contain(Version.currentEnvVersion()); + } + private static PluginModel getPluginModel(JSONObject object, boolean isFromCloud) { String name = object.optString("name"); String content = object.optString("description"); String pluginId = object.optString("pluginid"); + String envVersion = object.optString("envversion"); + if (!isCompatibleCurrentEnv(envVersion)) { + return null; + } int id = object.optInt("id"); int searchCount = object.optInt("searchCount"); String imageUrl = null; @@ -107,7 +117,7 @@ public class PluginSearchManager implements AlphaFineSearchProvider { for (int i = 0; i < jsonArray.length(); i++) { AlphaFineHelper.checkCancel(); PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false); - if (!AlphaFineHelper.getFilterResult().contains(cellModel)) { + if (cellModel != null && !AlphaFineHelper.getFilterResult().contains(cellModel)) { searchResult.add(cellModel); } }