Browse Source

Merge pull request #1675 in BA/design from ~XIAOXIA/design:feature/10.0 to feature/10.0

* commit '77cfbde529d6d8a6dbca58b294184a12c176b404':
  代码质量
  代码质量
  9.0同步到10.0
  REPORT-5856 去除无效action
  REPORT-5856 插件管理插件新分类
  REPORT-6544 移除无用的打印信息
  插件搜索直接打开
  REPORT-6544 使用Lucene,重新实现RecentSearchManager
master
superman 7 years ago
parent
commit
abe1959f5b
  1. 7
      designer/src/com/fr/design/mainframe/alphafine/AlphaFineConstants.java
  2. 8
      designer/src/com/fr/design/mainframe/alphafine/AlphaFineHelper.java
  3. 8
      designer/src/com/fr/design/mainframe/alphafine/cell/CellModelHelper.java
  4. 77
      designer/src/com/fr/design/mainframe/alphafine/cell/model/PluginModel.java
  5. 148
      designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java
  6. 303
      designer/src/com/fr/design/mainframe/alphafine/search/manager/RecentSearchManager.java
  7. 6
      designer/src/com/fr/design/mainframe/alphafine/search/manager/fun/AlphaFineSearchProvider.java
  8. 10
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java
  9. 9
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java
  10. 178
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java
  11. 28
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java
  12. 205
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecentSearchManager.java
  13. 18
      designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java
  14. 14
      designer_base/src/com/fr/design/extra/PluginOperateUtils.java
  15. 75
      designer_base/src/com/fr/design/extra/PluginWebBridge.java
  16. 36
      designer_base/src/com/fr/design/extra/WebViewDlgHelper.java
  17. 17
      designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java
  18. 16
      designer_base/src/com/fr/design/mainframe/toolbar/UpdateActionManager.java

7
designer/src/com/fr/design/mainframe/alphafine/AlphaFineConstants.java

@ -70,9 +70,10 @@ public class AlphaFineConstants {
public static final String PLUGIN_SEARCH_URL = SiteCenter.getInstance().acquireUrlByKind("plugin.searchAPI"); public static final String PLUGIN_SEARCH_URL = SiteCenter.getInstance().acquireUrlByKind("plugin.searchAPI");
public static final String PLUGIN_URL = SiteCenter.getInstance().acquireUrlByKind("af.plugin"); public static final String PLUGIN_URL = SiteCenter.getInstance().acquireUrlByKind("af.pluginInfo");
public static final String REUSE_URL = SiteCenter.getInstance().acquireUrlByKind("af.reuseInfo");
public static final String REUSE_URL = SiteCenter.getInstance().acquireUrlByKind("af.reuse");
public static final String DOCUMENT_DOC_URL = SiteCenter.getInstance().acquireUrlByKind("af.doc_view"); public static final String DOCUMENT_DOC_URL = SiteCenter.getInstance().acquireUrlByKind("af.doc_view");
@ -87,4 +88,6 @@ public class AlphaFineConstants {
public static final String SEARCH_API = SiteCenter.getInstance().acquireUrlByKind("af.cloud_search"); public static final String SEARCH_API = SiteCenter.getInstance().acquireUrlByKind("af.cloud_search");
} }

8
designer/src/com/fr/design/mainframe/alphafine/AlphaFineHelper.java

@ -7,8 +7,8 @@ import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.cell.model.NoResultModel; import com.fr.design.mainframe.alphafine.cell.model.NoResultModel;
import com.fr.design.mainframe.alphafine.component.AlphaFineDialog; import com.fr.design.mainframe.alphafine.component.AlphaFineDialog;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.RecentSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.RecentSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.RecommendSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.RecommendSearchManager;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.ProcessCanceledException; import com.fr.general.ProcessCanceledException;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -89,8 +89,8 @@ public class AlphaFineHelper {
} }
public static List<AlphaCellModel> getFilterResult() { public static List<AlphaCellModel> getFilterResult() {
List<AlphaCellModel> recentList = RecentSearchManager.getRecentSearchManger().getRecentModelList(); List<AlphaCellModel> recentList = RecentSearchManager.getInstance().getRecentModelList();
List<AlphaCellModel> recommendList = RecommendSearchManager.getRecommendSearchManager().getRecommendModelList(); List<AlphaCellModel> recommendList = RecommendSearchManager.getInstance().getRecommendModelList();
SearchResult filterResult = new SearchResult(); SearchResult filterResult = new SearchResult();
filterResult.addAll(recentList); filterResult.addAll(recentList);
filterResult.addAll(recommendList); filterResult.addAll(recommendList);

8
designer/src/com/fr/design/mainframe/alphafine/cell/CellModelHelper.java

@ -2,10 +2,10 @@ package com.fr.design.mainframe.alphafine.cell;
import com.fr.design.mainframe.alphafine.CellType; import com.fr.design.mainframe.alphafine.CellType;
import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.search.manager.ActionSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.ActionSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.DocumentSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.DocumentSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.FileSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.FileSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.PluginSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.PluginSearchManager;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
/** /**

77
designer/src/com/fr/design/mainframe/alphafine/cell/model/PluginModel.java

@ -1,53 +1,48 @@
package com.fr.design.mainframe.alphafine.cell.model; package com.fr.design.mainframe.alphafine.cell.model;
import com.fr.base.FRContext;
import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineConstants;
import com.fr.design.mainframe.alphafine.CellType; import com.fr.design.mainframe.alphafine.CellType;
import com.fr.env.RemoteEnv;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.json.JSONException; import com.fr.json.JSONException;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.stable.StringUtils;
import java.awt.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/** /**
* Created by XiaXiang on 2017/4/20. * Created by XiaXiang on 2017/4/20.
*/ */
public class PluginModel extends AlphaCellModel { public class PluginModel extends AlphaCellModel {
private static final String PLUGIN_INFORMATION_URL = "http://shop.finereport.com/ShopServer?pg=plugin&pid=";
private static final String REUSE_INFORMATION_URL = "http://shop.finereport.com/reuses/";
private String pluginUrl;
private String imageUrl; private String imageUrl;
private String version; private String version;
private String jartime; private String jartime;
private String link; private String link;
private String informationUrl; private String informationUrl;
private int pluginId; private String pluginId;
private int id;
private int price; private int price;
public PluginModel(String name, String content, String imageUrl, String version, String jartime, String link, CellType type, int price, int pluginId, int serchCount) { public PluginModel(String name, String content, String imageUrl, String version, String jartime, String link, String pluginId, CellType type, int price, int id, int serchCount) {
this(name, content, imageUrl, version, jartime, link, type, price, pluginId); this(name, content, imageUrl, version, jartime, link, pluginId, type, price, id);
setSearchCount(serchCount); setSearchCount(serchCount);
} }
public PluginModel(String name, String content, String imageUrl, String version, String jartime, String link, CellType type, int price, int pluginId) { public PluginModel(String name, String content, String imageUrl, String version, String jartime, String link, String pluginId, CellType type, int price, int id) {
super(name, content); super(name, content);
this.link = link; this.link = link;
setType(type); setType(type);
this.pluginId = pluginId; this.id = id;
if (getType() == CellType.PLUGIN) {
this.pluginUrl = AlphaFineConstants.PLUGIN_URL + pluginId;
this.informationUrl = PLUGIN_INFORMATION_URL + this.pluginId;
} else {
this.pluginUrl = AlphaFineConstants.REUSE_URL + pluginId;
this.informationUrl = REUSE_INFORMATION_URL + this.pluginId;
}
this.imageUrl = imageUrl; this.imageUrl = imageUrl;
this.jartime = jartime; this.jartime = jartime;
this.version = version; this.version = version;
this.price = price; this.price = price;
this.pluginId = pluginId;
if (getType() == CellType.PLUGIN) {
this.informationUrl = AlphaFineConstants.PLUGIN_URL + id;
} else {
this.informationUrl = AlphaFineConstants.REUSE_URL + id;
}
} }
public String getImageUrl() { public String getImageUrl() {
@ -58,14 +53,6 @@ public class PluginModel extends AlphaCellModel {
this.imageUrl = imageUrl; this.imageUrl = imageUrl;
} }
public String getPluginUrl() {
return pluginUrl;
}
public void setPluginUrl(String pluginUrl) {
this.pluginUrl = pluginUrl;
}
public String getVersion() { public String getVersion() {
return version; return version;
} }
@ -103,7 +90,7 @@ public class PluginModel extends AlphaCellModel {
JSONObject object = JSONObject.create(); JSONObject object = JSONObject.create();
try { try {
JSONObject modelObject = JSONObject.create(); JSONObject modelObject = JSONObject.create();
modelObject.put("name", getName()).put("description", getContent()).put("pic", getImageUrl()).put("version", getVersion()).put("jartime", getJartime()).put("type", getType().getTypeValue()).put("price", getPrice()).put("id", getPluginId()).put("link", getLink()).put("searchCount", getSearchCount()); modelObject.put("name", getName()).put("description", getContent()).put("pic", getImageUrl()).put("version", getVersion()).put("jartime", getJartime()).put("id", getId()).put("pluginid", getPluginId()).put("type", getType().getTypeValue()).put("price", getPrice()).put("link", getLink()).put("searchCount", getSearchCount());
object.put("result", modelObject).put("cellType", getType().getTypeValue()); object.put("result", modelObject).put("cellType", getType().getTypeValue());
} catch (JSONException e) { } catch (JSONException e) {
FRLogger.getLogger().error(e.getMessage()); FRLogger.getLogger().error(e.getMessage());
@ -119,16 +106,12 @@ public class PluginModel extends AlphaCellModel {
@Override @Override
public void doAction() { public void doAction() {
try { if (StringUtils.isBlank(this.pluginId) || FRContext.getCurrentEnv() instanceof RemoteEnv) {
Desktop.getDesktop().browse(new URI(getPluginUrl())); return;
} catch (IOException e) {
FRLogger.getLogger().error(e.getMessage());
} catch (URISyntaxException e) {
FRLogger.getLogger().error(e.getMessage());
} }
WebViewDlgHelper.showPluginInStore(getName(), "[" + ModelToJson().optString("result") + "]");
} }
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {
@ -139,21 +122,21 @@ public class PluginModel extends AlphaCellModel {
} }
PluginModel that = (PluginModel) o; PluginModel that = (PluginModel) o;
return pluginUrl != null ? pluginUrl.equals(that.pluginUrl) : that.pluginUrl == null; return pluginId != null ? pluginId.equals(that.pluginId) : that.pluginId == null;
} }
@Override @Override
public int hashCode() { public int hashCode() {
return pluginUrl != null ? pluginUrl.hashCode() : 0; return pluginId != null ? pluginId.hashCode() : 0;
} }
public int getPluginId() { public int getId() {
return pluginId; return id;
} }
public void setPluginId(int pluginId) { public void setId(int id) {
this.pluginId = pluginId; this.id = id;
} }
public String getInformationUrl() { public String getInformationUrl() {
@ -163,4 +146,12 @@ public class PluginModel extends AlphaCellModel {
public void setInformationUrl(String informationUrl) { public void setInformationUrl(String informationUrl) {
this.informationUrl = informationUrl; this.informationUrl = informationUrl;
} }
public String getPluginId() {
return pluginId;
}
public void setPluginId(String pluginId) {
this.pluginId = pluginId;
}
} }

148
designer/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java

@ -23,12 +23,12 @@ import com.fr.design.mainframe.alphafine.preview.DocumentPreviewPane;
import com.fr.design.mainframe.alphafine.preview.FilePreviewPane; import com.fr.design.mainframe.alphafine.preview.FilePreviewPane;
import com.fr.design.mainframe.alphafine.preview.NoResultPane; import com.fr.design.mainframe.alphafine.preview.NoResultPane;
import com.fr.design.mainframe.alphafine.preview.PluginPreviewPane; import com.fr.design.mainframe.alphafine.preview.PluginPreviewPane;
import com.fr.design.mainframe.alphafine.search.manager.ActionSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.ActionSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.DocumentSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.DocumentSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.FileSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.FileSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.PluginSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.RecentSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.RecentSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.PluginSearchManager;
import com.fr.design.mainframe.alphafine.search.manager.RecommendSearchManager; import com.fr.design.mainframe.alphafine.search.manager.impl.RecommendSearchManager;
import com.fr.form.main.Form; import com.fr.form.main.Form;
import com.fr.form.main.FormIO; import com.fr.form.main.FormIO;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
@ -390,27 +390,9 @@ public class AlphaFineDialog extends UIDialog {
*/ */
private void rebuildList(String searchText) { private void rebuildList(String searchText) {
resetContainer(); resetContainer();
setStoreText(searchText);
if (searchText.startsWith(ADVANCED_SEARCH_MARK)) { if (searchText.startsWith(ADVANCED_SEARCH_MARK)) {
if (searchText.startsWith(ACTION_MARK_SHORT) || searchText.startsWith(ACTION_MARK)) { dealWithSearchText(searchText);
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
buildActionList(storeText);
} else if (searchText.startsWith(DOCUMENT_MARK_SHORT) || searchText.startsWith(DOCUMENT_MARK)) {
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
buildDocumentList(storeText);
} else if (searchText.startsWith(FILE_MARK_SHORT) || searchText.startsWith(FILE_MARK)) {
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
buildFileList(storeText);
} else if (searchText.startsWith(CPT_MARK) || searchText.startsWith(FRM_MARK)) {
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
buildFileList(searchText);
} else if (searchText.startsWith(DS_MARK)) {
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
buildFileList(DS_NAME + storeText);
} else if (searchText.startsWith(PLUGIN_MARK_SHORT) || searchText.startsWith(PLUGIN_MARK)) {
storeText = searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length());
buildPluginList(storeText);
}
} else { } else {
storeText = searchText.trim(); storeText = searchText.trim();
doNormalSearch(storeText); doNormalSearch(storeText);
@ -418,6 +400,36 @@ public class AlphaFineDialog extends UIDialog {
} }
/**
* 处理搜索字符串
* @param searchText
*/
private void dealWithSearchText(String searchText) {
if (searchText.startsWith(ACTION_MARK_SHORT) || searchText.startsWith(ACTION_MARK)) {
buildActionList(getStoreText(searchText));
} else if (searchText.startsWith(DOCUMENT_MARK_SHORT) || searchText.startsWith(DOCUMENT_MARK)) {
buildDocumentList(getStoreText(searchText));
} else if (searchText.startsWith(FILE_MARK_SHORT) || searchText.startsWith(FILE_MARK)) {
buildFileList(getStoreText(searchText));
} else if (searchText.startsWith(CPT_MARK) || searchText.startsWith(FRM_MARK)) {
buildFileList(searchText);
} else if (searchText.startsWith(DS_MARK)) {
buildFileList(DS_NAME + getStoreText(searchText));
} else if (searchText.startsWith(PLUGIN_MARK_SHORT) || searchText.startsWith(PLUGIN_MARK)) {
buildPluginList(getStoreText(searchText));
}
}
/**
* 截取字符串中关键词
* @param searchText
* @return
*/
private String getStoreText(String searchText) {
setStoreText(searchText.substring(searchText.indexOf(StringUtils.BLANK) + 1, searchText.length()));
return storeText;
}
/** /**
* 重置面板 * 重置面板
*/ */
@ -445,47 +457,35 @@ public class AlphaFineDialog extends UIDialog {
} }
private void buildDocumentList(final String searchText) { private void buildDocumentList(final String searchText) {
SearchResult documentModelList = DocumentSearchManager.getDocumentSearchManager().getLessSearchResult(searchText); addSearchResult(DocumentSearchManager.getInstance().getLessSearchResult(searchText));
for (AlphaCellModel object : documentModelList) {
searchListModel.addElement(object);
}
} }
private void buildFileList(final String searchText) { private void buildFileList(final String searchText) {
SearchResult fileModelList = FileSearchManager.getFileSearchManager().getLessSearchResult(searchText); addSearchResult(FileSearchManager.getInstance().getLessSearchResult(searchText));
for (AlphaCellModel object : fileModelList) {
AlphaFineHelper.checkCancel();
searchListModel.addElement(object);
}
} }
private void buildActionList(final String searchText) { private void buildActionList(final String searchText) {
SearchResult actionModelList = ActionSearchManager.getActionSearchManager().getLessSearchResult(searchText); addSearchResult(ActionSearchManager.getInstance().getLessSearchResult(searchText));
for (AlphaCellModel object : actionModelList) {
searchListModel.addElement(object);
}
} }
private void buildPluginList(final String searchText) { private void buildPluginList(final String searchText) {
SearchResult pluginModelList = PluginSearchManager.getPluginSearchManager().getLessSearchResult(searchText); addSearchResult(PluginSearchManager.getInstance().getLessSearchResult(searchText));
for (AlphaCellModel object : pluginModelList) {
searchListModel.addElement(object);
}
} }
private void buildRecommendList(final String searchText) { private void buildRecommendList(final String searchText) {
SearchResult recommendModelList = RecommendSearchManager.getRecommendSearchManager().getLessSearchResult(searchText); addSearchResult(RecommendSearchManager.getInstance().getLessSearchResult(searchText));
for (AlphaCellModel object : recommendModelList) {
searchListModel.addElement(object);
}
} }
private void buildRecentList(final String searchText) { private void buildRecentList(final String searchText) {
SearchResult recentModelList = RecentSearchManager.getRecentSearchManger().getLessSearchResult(searchText); addSearchResult(RecentSearchManager.getInstance().getLessSearchResult(searchText));
for (AlphaCellModel object : recentModelList) {
}
private synchronized void addSearchResult(SearchResult searchResult) {
for (AlphaCellModel object : searchResult) {
AlphaFineHelper.checkCancel();
searchListModel.addElement(object); searchListModel.addElement(object);
} }
} }
/** /**
@ -636,6 +636,7 @@ public class AlphaFineDialog extends UIDialog {
private void dealWithMoreOrLessResult(int index, MoreModel selectedValue) { private void dealWithMoreOrLessResult(int index, MoreModel selectedValue) {
if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), selectedValue.getContent())) { if (ComparatorUtils.equals(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), selectedValue.getContent())) {
selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowLess")); selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"));
rebuildShowMoreList(index, selectedValue); rebuildShowMoreList(index, selectedValue);
} else { } else {
selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowAll")); selectedValue.setContent(Inter.getLocText("FR-Designer_AlphaFine_ShowAll"));
@ -676,7 +677,9 @@ public class AlphaFineDialog extends UIDialog {
searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1); searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() + 1);
} else if (e.getKeyCode() == KeyEvent.VK_UP) { } else if (e.getKeyCode() == KeyEvent.VK_UP) {
searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() - 1); searchResultList.setSelectedIndex(searchResultList.getSelectedIndex() - 1);
} else escAlphaFineDialog(e); } else {
escAlphaFineDialog(e);
}
} }
}); });
@ -758,9 +761,8 @@ public class AlphaFineDialog extends UIDialog {
* @param cellModel * @param cellModel
*/ */
private void saveLocalHistory(AlphaCellModel cellModel) { private void saveLocalHistory(AlphaCellModel cellModel) {
RecentSearchManager recentSearchManager = RecentSearchManager.getRecentSearchManger(); RecentSearchManager searchManager = RecentSearchManager.getInstance();
recentSearchManager.addRecentModel(storeText, cellModel); searchManager.addModel(storeText, cellModel, cellModel.getSearchCount() + 1);
recentSearchManager.saveXMLFile();
sendDataToServer(storeText, cellModel); sendDataToServer(storeText, cellModel);
} }
@ -806,14 +808,34 @@ public class AlphaFineDialog extends UIDialog {
* @param index * @param index
* @param selectedValue * @param selectedValue
*/ */
private void rebuildShowMoreList(int index, MoreModel selectedValue) { private void rebuildShowMoreList(final int index, final MoreModel selectedValue) {
SearchResult moreResult = getMoreResult(selectedValue);
if ((selectedValue).getContent().equals(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"))) { if ((selectedValue).getContent().equals(Inter.getLocText("FR-Designer_AlphaFine_ShowLess"))) {
for (int i = 0; i < moreResult.size(); i++) { splitLabel.setIcon(new ImageIcon(getClass().getResource(AlphaFineConstants.IMAGE_URL + "bigloading.gif")));
this.searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResult.get(i)); if (this.searchWorker != null && !this.searchWorker.isDone()) {
this.searchWorker.cancel(true);
this.searchWorker = null;
} }
this.searchWorker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
SearchResult moreResults = getMoreResult(selectedValue);
for (int i = 0; i < moreResults.size(); i++) {
searchListModel.add(index + AlphaFineConstants.SHOW_SIZE + 1 + i, moreResults.get(i));
}
return null;
}
@Override
protected void done() {
if (!isCancelled()) {
splitLabel.setIcon(null);
}
}
};
this.searchWorker.execute();
} else { } 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); this.searchListModel.remove(index + AlphaFineConstants.SHOW_SIZE + 1);
} }
@ -824,16 +846,16 @@ public class AlphaFineDialog extends UIDialog {
SearchResult moreResult; SearchResult moreResult;
switch (selectedValue.getContentType()) { switch (selectedValue.getContentType()) {
case PLUGIN: case PLUGIN:
moreResult = PluginSearchManager.getPluginSearchManager().getMoreSearchResult(); moreResult = PluginSearchManager.getInstance().getMoreSearchResult(searchTextField.getText());
break; break;
case DOCUMENT: case DOCUMENT:
moreResult = DocumentSearchManager.getDocumentSearchManager().getMoreSearchResult(); moreResult = DocumentSearchManager.getInstance().getMoreSearchResult(searchTextField.getText());
break; break;
case FILE: case FILE:
moreResult = FileSearchManager.getFileSearchManager().getMoreSearchResult(); moreResult = FileSearchManager.getInstance().getMoreSearchResult(searchTextField.getText());
break; break;
case ACTION: case ACTION:
moreResult = ActionSearchManager.getActionSearchManager().getMoreSearchResult(); moreResult = ActionSearchManager.getInstance().getMoreSearchResult(searchTextField.getText());
break; break;
default: default:
moreResult = new SearchResult(); moreResult = new SearchResult();

303
designer/src/com/fr/design/mainframe/alphafine/search/manager/RecentSearchManager.java

@ -1,303 +0,0 @@
package com.fr.design.mainframe.alphafine.search.manager;
import com.fr.base.FRContext;
import com.fr.base.Utils;
import com.fr.design.mainframe.alphafine.AlphaFineConstants;
import com.fr.design.mainframe.alphafine.AlphaFineHelper;
import com.fr.design.mainframe.alphafine.CellType;
import com.fr.design.mainframe.alphafine.cell.CellModelHelper;
import com.fr.design.mainframe.alphafine.cell.model.ActionModel;
import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.toolbar.UpdateActionManager;
import com.fr.file.XMLFileManager;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.project.ProjectConstants;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLReadable;
import com.fr.stable.xml.XMLTools;
import com.fr.stable.xml.XMLableReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Created by XiaXiang on 2017/5/15.
*/
public class RecentSearchManager extends XMLFileManager implements AlphaFineSearchProcessor {
private static final String XML_TAG = "AlphaFineRecent";
private static final int MAX_SIZE = 3;
private static RecentSearchManager recentSearchManager = null;
private static File recentFile = null;
private SearchResult modelList;
private SearchResult recentModelList;
private Map<String, SearchResult> recentKVModelMap = new HashMap<>();
public synchronized static RecentSearchManager getRecentSearchManger() {
if (recentSearchManager == null) {
recentSearchManager = new RecentSearchManager();
try {
XMLTools.readFileXML(recentSearchManager, recentSearchManager.getRecentEnvFile());
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage(), e);
}
}
return recentSearchManager;
}
@Override
public void readXML(XMLableReader reader) {
if (reader.isAttr()) {
reader.readXMLObject(new XMLReadable() {
public void readXML(XMLableReader reader) {
if (reader.isChildNode()) {
String nodeName = reader.getTagName();
if (nodeName.equals("RecentModelList")) {
String key = reader.getAttrAsString("searchKey", StringUtils.EMPTY);
final SearchResult list = new SearchResult();
reader.readXMLObject(new XMLReadable() {
@Override
public void readXML(XMLableReader reader) {
readCellModel(reader, list);
}
}
);
recentKVModelMap.put(key, list);
}
}
}
});
}
}
private void readCellModel(XMLableReader reader, List<AlphaCellModel> list) {
if (reader.isChildNode()) {
String nodeName = reader.getTagName();
if (nodeName.equals("model")) {
String modelValue = reader.getAttrAsString("cellModel", StringUtils.EMPTY);
addModelToList(list, modelValue);
}
}
}
private void addModelToList(List<AlphaCellModel> list, String modelValue) {
try {
AlphaCellModel model = CellModelHelper.getModelFromJson(new JSONObject(modelValue));
if (model != null) {
list.add(model);
}
} catch (JSONException e) {
FRLogger.getLogger().error(e.getMessage());
}
}
@Override
public void writeXML(XMLPrintWriter writer) {
writer.startTAG(XML_TAG);
if (!recentKVModelMap.isEmpty()) {
for (String key : recentKVModelMap.keySet()) {
writer.startTAG("RecentModelList");
writer.attr("searchKey", key);
for (AlphaCellModel model : recentKVModelMap.get(key)) {
try {
String modelValue = model.ModelToJson().toString();
writer.startTAG("model");
writer.attr("cellModel", modelValue);
writer.end();
} catch (JSONException e) {
FRLogger.getLogger().error(e.getMessage());
}
}
writer.end();
}
}
writer.end();
}
@Override
public String fileName() {
return "AlphaFine_Recent.xml";
}
/**
* 获取xml
*
* @return
*/
private File getRecentFile() {
if (recentFile == null) {
recentFile = new File(ProductConstants.getEnvHome() + File.separator + fileName());
}
return recentFile;
}
private File getRecentEnvFile() {
File envFile = getRecentFile();
if (!envFile.exists()) {
createRecentFile(envFile);
}
return envFile;
}
/**
* 创建XML
*
* @param envFile
*/
private void createRecentFile(File envFile) {
try {
FileWriter fileWriter = new FileWriter(envFile);
StringReader stringReader = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><AlphaFineRecent></AlphaFineRecent>");
Utils.copyCharTo(stringReader, fileWriter);
stringReader.close();
fileWriter.close();
} catch (IOException e) {
FRContext.getLogger().error(e.getMessage(), e);
}
}
/**
* 保存XML到设计器安装目录
*/
public void saveXMLFile() {
File xmlFile = this.getRecentEnvFile();
if (xmlFile == null) {
return;
}
if (!xmlFile.getParentFile().exists()) {//建立目录.
StableUtils.mkdirs(xmlFile.getParentFile());
}
String tempName = xmlFile.getName() + ProjectConstants.TEMP_SUFFIX;
File tempFile = new File(xmlFile.getParentFile(), tempName);
writeTempFile(tempFile);
IOUtils.renameTo(tempFile, xmlFile);
}
private void writeTempFile(File tempFile) {
try {
OutputStream fout = new FileOutputStream(tempFile);
XMLTools.writeOutputStreamXML(this, fout);
fout.flush();
fout.close();
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage());
}
}
public List<AlphaCellModel> getRecentModelList() {
return recentModelList;
}
/**
* 根据搜索字段获取对应的model列表
*
* @param searchText
* @return
*/
private synchronized SearchResult getRecentModelList(String searchText) {
recentModelList = new SearchResult();
for (String key : recentKVModelMap.keySet()) {
AlphaFineHelper.checkCancel();
if (ComparatorUtils.equals(key, searchText)) {
recentModelList = recentKVModelMap.get(searchText);
SearchResult resultModelList = recentModelList;
Iterator<AlphaCellModel> modelIterator = resultModelList.iterator();
SearchResult searchResult = new SearchResult();
while (modelIterator.hasNext()) {
AlphaCellModel model = modelIterator.next();
if (model.getType() == CellType.ACTION && !UpdateActionManager.getUpdateActionManager().isEnable(((ActionModel) model).getAction())) {
continue;
} else {
searchResult.add(model);
}
}
Collections.sort(searchResult);
int size = searchResult.size();
if (size > MAX_SIZE) {
SearchResult result = new SearchResult();
result.addAll(searchResult.subList(0, MAX_SIZE));
return result;
}
return searchResult;
}
}
return recentModelList;
}
/**
* 将搜索结果加入到当前MAP中
*
* @param searchKey
* @param cellModel
*/
public void addRecentModel(String searchKey, AlphaCellModel cellModel) {
if (recentKVModelMap.keySet().contains(searchKey)) {
List<AlphaCellModel> cellModels = recentKVModelMap.get(searchKey);
int index = cellModels.indexOf(cellModel);
if (index >= 0) {
cellModels.get(index).addSearchCount();
} else {
cellModels.add(cellModel);
}
//trimToSize(cellModels);
} else {
SearchResult list = new SearchResult();
list.add(cellModel);
recentKVModelMap.put(searchKey, list);
}
}
private synchronized void trimToSize(List<AlphaCellModel> cellModels) {
if (cellModels.size() > AlphaFineConstants.MAX_FILE_SIZE) {
cellModels.remove(0);
}
}
@Override
public synchronized SearchResult getLessSearchResult(String searchText) {
this.modelList = new SearchResult();
recentModelList = getRecentModelList(searchText);
if (recentModelList != null && recentModelList.size() > 0) {
modelList.add(new MoreModel(Inter.getLocText("FR-Designer_AlphaFine_Latest")));
}
modelList.addAll(recentModelList);
return modelList;
}
@Override
public SearchResult getMoreSearchResult() {
return new SearchResult();
}
}

6
designer/src/com/fr/design/mainframe/alphafine/search/manager/AlphaFineSearchProcessor.java → designer/src/com/fr/design/mainframe/alphafine/search/manager/fun/AlphaFineSearchProvider.java

@ -1,11 +1,11 @@
package com.fr.design.mainframe.alphafine.search.manager; package com.fr.design.mainframe.alphafine.search.manager.fun;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
/** /**
* Created by XiaXiang on 2017/3/27. * Created by XiaXiang on 2017/3/27.
*/ */
public interface AlphaFineSearchProcessor { public interface AlphaFineSearchProvider {
/** /**
* 获取默认显示条数 * 获取默认显示条数
* *
@ -19,5 +19,5 @@ public interface AlphaFineSearchProcessor {
* *
* @return * @return
*/ */
SearchResult getMoreSearchResult(); SearchResult getMoreSearchResult(String searchText);
} }

10
designer/src/com/fr/design/mainframe/alphafine/search/manager/ActionSearchManager.java → designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java

@ -1,4 +1,4 @@
package com.fr.design.mainframe.alphafine.search.manager; package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineConstants;
@ -8,6 +8,7 @@ import com.fr.design.mainframe.alphafine.cell.model.ActionModel;
import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider;
import com.fr.design.mainframe.toolbar.UpdateActionManager; import com.fr.design.mainframe.toolbar.UpdateActionManager;
import com.fr.design.mainframe.toolbar.UpdateActionModel; import com.fr.design.mainframe.toolbar.UpdateActionModel;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
@ -20,13 +21,13 @@ import java.util.List;
/** /**
* Created by XiaXiang on 2017/3/27. * Created by XiaXiang on 2017/3/27.
*/ */
public class ActionSearchManager implements AlphaFineSearchProcessor { public class ActionSearchManager implements AlphaFineSearchProvider {
private static ActionSearchManager actionSearchManager = null; private static ActionSearchManager actionSearchManager = null;
private SearchResult filterModelList; private SearchResult filterModelList;
private SearchResult lessModelList; private SearchResult lessModelList;
private SearchResult moreModelList; private SearchResult moreModelList;
public synchronized static ActionSearchManager getActionSearchManager() { public synchronized static ActionSearchManager getInstance() {
if (actionSearchManager == null) { if (actionSearchManager == null) {
actionSearchManager = new ActionSearchManager(); actionSearchManager = new ActionSearchManager();
} }
@ -63,6 +64,7 @@ public class ActionSearchManager implements AlphaFineSearchProcessor {
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainAction()) { if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainAction()) {
List<UpdateActionModel> updateActions = UpdateActionManager.getUpdateActionManager().getUpdateActions(); List<UpdateActionModel> updateActions = UpdateActionManager.getUpdateActionManager().getUpdateActions();
for (UpdateActionModel updateActionModel : updateActions) { for (UpdateActionModel updateActionModel : updateActions) {
AlphaFineHelper.checkCancel();
if (StringUtils.isNotBlank(updateActionModel.getSearchKey())) { if (StringUtils.isNotBlank(updateActionModel.getSearchKey())) {
if (updateActionModel.getSearchKey().contains(searchText) && updateActionModel.getAction().isEnabled()) { if (updateActionModel.getSearchKey().contains(searchText) && updateActionModel.getAction().isEnabled()) {
filterModelList.add(new ActionModel(updateActionModel.getActionName(), updateActionModel.getParentName(), updateActionModel.getAction())); filterModelList.add(new ActionModel(updateActionModel.getActionName(), updateActionModel.getParentName(), updateActionModel.getAction()));
@ -91,7 +93,7 @@ public class ActionSearchManager implements AlphaFineSearchProcessor {
} }
@Override @Override
public SearchResult getMoreSearchResult() { public SearchResult getMoreSearchResult(String searchText) {
return moreModelList; return moreModelList;
} }
} }

9
designer/src/com/fr/design/mainframe/alphafine/search/manager/DocumentSearchManager.java → designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java

@ -1,4 +1,4 @@
package com.fr.design.mainframe.alphafine.search.manager; package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineConstants;
@ -7,6 +7,7 @@ import com.fr.design.mainframe.alphafine.CellType;
import com.fr.design.mainframe.alphafine.cell.model.DocumentModel; import com.fr.design.mainframe.alphafine.cell.model.DocumentModel;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
@ -18,12 +19,12 @@ import com.fr.stable.StringUtils;
/** /**
* Created by XiaXiang on 2017/3/27. * Created by XiaXiang on 2017/3/27.
*/ */
public class DocumentSearchManager implements AlphaFineSearchProcessor { public class DocumentSearchManager implements AlphaFineSearchProvider {
private static DocumentSearchManager documentSearchManager = null; private static DocumentSearchManager documentSearchManager = null;
private SearchResult lessModelList; private SearchResult lessModelList;
private SearchResult moreModelList; private SearchResult moreModelList;
public synchronized static DocumentSearchManager getDocumentSearchManager() { public synchronized static DocumentSearchManager getInstance() {
if (documentSearchManager == null) { if (documentSearchManager == null) {
documentSearchManager = new DocumentSearchManager(); documentSearchManager = new DocumentSearchManager();
@ -106,7 +107,7 @@ public class DocumentSearchManager implements AlphaFineSearchProcessor {
} }
@Override @Override
public SearchResult getMoreSearchResult() { public SearchResult getMoreSearchResult(String searchText) {
return moreModelList; return moreModelList;
} }

178
designer/src/com/fr/design/mainframe/alphafine/search/manager/FileSearchManager.java → designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java

@ -1,4 +1,4 @@
package com.fr.design.mainframe.alphafine.search.manager; package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.base.Env; import com.fr.base.Env;
import com.fr.base.FRContext; import com.fr.base.FRContext;
@ -6,24 +6,21 @@ import com.fr.design.DesignerEnvManager;
import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineConstants;
import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.AlphaFineHelper;
import com.fr.design.mainframe.alphafine.CellType; import com.fr.design.mainframe.alphafine.CellType;
import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.cell.model.FileModel; import com.fr.design.mainframe.alphafine.cell.model.FileModel;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider;
import com.fr.file.filetree.FileNode; import com.fr.file.filetree.FileNode;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.InputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -31,7 +28,7 @@ import java.util.List;
/** /**
* Created by XiaXiang on 2017/3/27. * Created by XiaXiang on 2017/3/27.
*/ */
public class FileSearchManager implements AlphaFineSearchProcessor { public class FileSearchManager implements AlphaFineSearchProvider {
private static final int MARK_LENGTH = 6; private static final int MARK_LENGTH = 6;
private static final String DS_NAME = "dsname=\""; private static final String DS_NAME = "dsname=\"";
private static final String FRM_PREFIX = "k:frm "; private static final String FRM_PREFIX = "k:frm ";
@ -40,12 +37,15 @@ public class FileSearchManager implements AlphaFineSearchProcessor {
private SearchResult filterModelList; private SearchResult filterModelList;
private SearchResult lessModelList; private SearchResult lessModelList;
private SearchResult moreModelList; private SearchResult moreModelList;
private String searchText;
private List<FileNode> fileNodes = null; private List<FileNode> fileNodes = null;
//停止搜索
private boolean stopSearch = false;
//隐藏的搜索功能,可根据特殊的字符标记判断搜索分类 //隐藏的搜索功能,可根据特殊的字符标记判断搜索分类
private boolean isContainCpt = true; private boolean isContainCpt = true;
private boolean isContainFrm = true; private boolean isContainFrm = true;
public synchronized static FileSearchManager getFileSearchManager() { public synchronized static FileSearchManager getInstance() {
init(); init();
return fileSearchManager; return fileSearchManager;
} }
@ -73,51 +73,71 @@ public class FileSearchManager implements AlphaFineSearchProcessor {
this.filterModelList = new SearchResult(); this.filterModelList = new SearchResult();
this.lessModelList = new SearchResult(); this.lessModelList = new SearchResult();
this.moreModelList = new SearchResult(); this.moreModelList = new SearchResult();
if (searchText.startsWith(FRM_PREFIX)) { this.searchText = dealWithSearchText(searchText);
isContainCpt = false; if (StringUtils.isBlank(this.searchText) || ComparatorUtils.equals(this.searchText, DS_NAME)) {
searchText = searchText.substring(MARK_LENGTH, searchText.length());
} else if (searchText.startsWith(CPT_PREFIX)) {
isContainFrm = false;
searchText = searchText.substring(MARK_LENGTH, searchText.length());
}
if (StringUtils.isBlank(searchText) || ComparatorUtils.equals(searchText, DS_NAME)) {
lessModelList.add(new MoreModel(Inter.getLocText("FR-Designer_Templates"))); lessModelList.add(new MoreModel(Inter.getLocText("FR-Designer_Templates")));
return lessModelList; return lessModelList;
} }
Env env = FRContext.getCurrentEnv(); Env env = FRContext.getCurrentEnv();
fileNodes = new ArrayList<>(); fileNodes = new ArrayList<>();
fileNodes = listTpl(env, ProjectConstants.REPORTLETS_NAME, true); fileNodes = listTpl(env, ProjectConstants.REPORTLETS_NAME, true);
AlphaFineHelper.checkCancel(); AlphaFineHelper.checkCancel();
isContainCpt = true; isContainCpt = true;
isContainFrm = true; isContainFrm = true;
for (FileNode node : fileNodes) { doSearch(this.searchText, true, env);
boolean isAlreadyContain = false; if (stopSearch) {
String fileEnvPath = node.getEnvPath(); lessModelList.add(0, new MoreModel(Inter.getLocText("FR-Designer_Templates"), Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), true, CellType.FILE));
String filePath = StableUtils.pathJoin(env.getPath(), fileEnvPath); lessModelList.addAll(filterModelList.subList(0, AlphaFineConstants.SHOW_SIZE));
isAlreadyContain = searchFile(searchText, node, isAlreadyContain); stopSearch = false;
searchFileContent(searchText, node, isAlreadyContain, filePath); return this.lessModelList;
}
if (filterModelList.isEmpty()) {
return new SearchResult();
}
lessModelList.add(0, new MoreModel(Inter.getLocText("FR-Designer_Templates"), Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), false, CellType.FILE));
lessModelList.addAll(filterModelList);
return lessModelList;
}
@Override
public SearchResult getMoreSearchResult(String searchText) {
if (moreModelList != null && !moreModelList.isEmpty()) {
return moreModelList;
} }
SearchResult result = new SearchResult(); this.filterModelList = new SearchResult();
for (AlphaCellModel object : filterModelList) { this.moreModelList = new SearchResult();
if (!AlphaFineHelper.getFilterResult().contains(object)) { Env env = FRContext.getCurrentEnv();
result.add(object); AlphaFineHelper.checkCancel();
isContainCpt = true;
isContainFrm = true;
doSearch(this.searchText, false, env);
moreModelList.addAll(filterModelList.subList(AlphaFineConstants.SHOW_SIZE, filterModelList.size()));
return moreModelList;
}
private void doSearch(String searchText, boolean needMore, Env env) {
for (FileNode node : fileNodes) {
boolean isAlreadyContain = false;
isAlreadyContain = searchFile(searchText, node, isAlreadyContain, needMore);
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainFileContent() && node.getLock() == null) {
searchFileContent(env, searchText, node, isAlreadyContain, needMore);
}
if (filterModelList.size() > AlphaFineConstants.SHOW_SIZE && stopSearch) {
return;
} }
} }
if (result.isEmpty()) { }
return lessModelList;
} else if (result.size() < AlphaFineConstants.SHOW_SIZE + 1) {
lessModelList.add(0, new MoreModel(Inter.getLocText("FR-Designer_Templates")));
lessModelList.addAll(result);
} else {
lessModelList.add(0, new MoreModel(Inter.getLocText("FR-Designer_Templates"), Inter.getLocText("FR-Designer_AlphaFine_ShowAll"), true, CellType.FILE));
lessModelList.addAll(result.subList(0, AlphaFineConstants.SHOW_SIZE));
moreModelList.addAll(result.subList(AlphaFineConstants.SHOW_SIZE, result.size()));
}
return this.lessModelList; private String dealWithSearchText(String searchText) {
if (searchText.startsWith(FRM_PREFIX)) {
isContainCpt = false;
searchText = searchText.substring(MARK_LENGTH, searchText.length());
} else if (searchText.startsWith(CPT_PREFIX)) {
isContainFrm = false;
searchText = searchText.substring(MARK_LENGTH, searchText.length());
}
return searchText;
} }
/** /**
@ -126,35 +146,36 @@ public class FileSearchManager implements AlphaFineSearchProcessor {
* @param searchText * @param searchText
* @param node * @param node
* @param isAlreadyContain * @param isAlreadyContain
* @param filePath
*/ */
private void searchFileContent(String searchText, FileNode node, boolean isAlreadyContain, String filePath) { private void searchFileContent(Env env, String searchText, FileNode node, boolean isAlreadyContain, boolean needMore) {
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainFileContent()) { try {
InputStream inputStream = env.readBean(node.getEnvPath().substring(ProjectConstants.REPORTLETS_NAME.length() + 1), ProjectConstants.REPORTLETS_NAME);
try { InputStreamReader isr = new InputStreamReader(inputStream, "UTF-8");
InputStreamReader isr = new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8"); BufferedReader reader = new BufferedReader(isr);
BufferedReader reader = new BufferedReader(isr); String line;
String line; int columnNumber;
int columnNumber; boolean isFoundInContent = false;
boolean isFoundInContent = false; while ((line = reader.readLine()) != null) {
while ((line = reader.readLine()) != null) { columnNumber = line.toLowerCase().indexOf(searchText);
columnNumber = line.toLowerCase().indexOf(searchText); if (columnNumber != -1) {
if (columnNumber != -1) { isFoundInContent = true;
isFoundInContent = true; break;
break;
}
} }
if (isFoundInContent && !isAlreadyContain) { }
FileModel model = new FileModel(node.getName(), node.getEnvPath()); if (isFoundInContent && !isAlreadyContain) {
this.filterModelList.add(model); FileModel model = new FileModel(node.getName(), node.getEnvPath());
if (!AlphaFineHelper.getFilterResult().contains(model)) {
AlphaFineHelper.checkCancel();
filterModelList.add(model);
}
if (this.filterModelList.size() > AlphaFineConstants.SHOW_SIZE && needMore) {
stopSearch = true;
} }
isr.close();
reader.close();
} catch (FileNotFoundException e) {
FRLogger.getLogger().error(e.getMessage());
} catch (IOException e) {
FRLogger.getLogger().error(e.getMessage());
} }
isr.close();
reader.close();
} catch (Exception e) {
FRLogger.getLogger().error("file read error: " + e.getMessage());
} }
} }
@ -166,22 +187,23 @@ public class FileSearchManager implements AlphaFineSearchProcessor {
* @param isAlreadyContain * @param isAlreadyContain
* @return * @return
*/ */
private boolean searchFile(String searchText, FileNode node, boolean isAlreadyContain) { private boolean searchFile(String searchText, FileNode node, boolean isAlreadyContain, boolean needMore) {
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainTemplate()) { if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainTemplate()) {
if (node.getName().toLowerCase().contains(searchText)) { if (node.getName().toLowerCase().contains(searchText)) {
FileModel model = new FileModel(node.getName(), node.getEnvPath()); FileModel model = new FileModel(node.getName(), node.getEnvPath());
this.filterModelList.add(model); if (!AlphaFineHelper.getFilterResult().contains(model)) {
AlphaFineHelper.checkCancel();
filterModelList.add(model);
}
if (filterModelList.size() > AlphaFineConstants.SHOW_SIZE && needMore) {
stopSearch = true;
}
isAlreadyContain = true; isAlreadyContain = true;
} }
} }
return isAlreadyContain; return isAlreadyContain;
} }
@Override
public SearchResult getMoreSearchResult() {
return moreModelList;
}
/** /**
* 获取工作目录下所有符合要求的模板 * 获取工作目录下所有符合要求的模板
* *
@ -252,4 +274,20 @@ public class FileSearchManager implements AlphaFineSearchProcessor {
public void setContainFrm(boolean containFrm) { public void setContainFrm(boolean containFrm) {
isContainFrm = containFrm; isContainFrm = containFrm;
} }
public SearchResult getMoreModelList() {
return moreModelList;
}
public void setMoreModelList(SearchResult moreModelList) {
this.moreModelList = moreModelList;
}
public String getSearchText() {
return searchText;
}
public void setSearchText(String searchText) {
this.searchText = searchText;
}
} }

28
designer/src/com/fr/design/mainframe/alphafine/search/manager/PluginSearchManager.java → designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java

@ -1,4 +1,4 @@
package com.fr.design.mainframe.alphafine.search.manager; package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineConstants;
@ -7,6 +7,7 @@ import com.fr.design.mainframe.alphafine.CellType;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.cell.model.PluginModel; import com.fr.design.mainframe.alphafine.cell.model.PluginModel;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.general.Inter; import com.fr.general.Inter;
@ -14,6 +15,8 @@ import com.fr.general.http.HttpClient;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONException; import com.fr.json.JSONException;
import com.fr.json.JSONObject; 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 com.fr.stable.StringUtils;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
@ -22,13 +25,13 @@ import java.net.URLEncoder;
/** /**
* Created by XiaXiang on 2017/3/27. * Created by XiaXiang on 2017/3/27.
*/ */
public class PluginSearchManager implements AlphaFineSearchProcessor { public class PluginSearchManager implements AlphaFineSearchProvider {
private static PluginSearchManager pluginSearchManager = null; private static PluginSearchManager pluginSearchManager = null;
private SearchResult lessModelList; private SearchResult lessModelList;
private SearchResult moreModelList; private SearchResult moreModelList;
public synchronized static PluginSearchManager getPluginSearchManager() { public synchronized static PluginSearchManager getInstance() {
if (pluginSearchManager == null) { if (pluginSearchManager == null) {
pluginSearchManager = new PluginSearchManager(); pluginSearchManager = new PluginSearchManager();
} }
@ -36,16 +39,25 @@ public class PluginSearchManager implements AlphaFineSearchProcessor {
} }
private static boolean isCompatibleCurrentEnv(String envVersion){
return VersionIntervalFactory.create(envVersion).contain(Version.currentEnvVersion());
}
private static PluginModel getPluginModel(JSONObject object, boolean isFromCloud) { private static PluginModel getPluginModel(JSONObject object, boolean isFromCloud) {
String name = object.optString("name"); String name = object.optString("name");
String content = object.optString("description"); String content = object.optString("description");
int pluginId = object.optInt("id"); 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"); int searchCount = object.optInt("searchCount");
String imageUrl = null; String imageUrl = null;
try { try {
imageUrl = isFromCloud ? AlphaFineConstants.PLUGIN_IMAGE_URL + URLEncoder.encode(object.optString("pic").toString().substring(AlphaFineConstants.PLUGIN_IMAGE_URL.length()), "utf8") : object.optString("pic"); imageUrl = isFromCloud ? AlphaFineConstants.PLUGIN_IMAGE_URL + URLEncoder.encode(object.optString("pic").toString().substring(AlphaFineConstants.PLUGIN_IMAGE_URL.length()), "utf8") : object.optString("pic");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
FRLogger.getLogger().error(e.getMessage()); FRLogger.getLogger().error("plugin icon error: " + e.getMessage());
} }
String version = null; String version = null;
String jartime = null; String jartime = null;
@ -59,7 +71,7 @@ public class PluginSearchManager implements AlphaFineSearchProcessor {
type = CellType.REUSE; type = CellType.REUSE;
} }
int price = object.optInt("price"); int price = object.optInt("price");
return new PluginModel(name, content, imageUrl, version, jartime, link, type, price, pluginId, searchCount); return new PluginModel(name, content, imageUrl, version, jartime, link, pluginId, type, price, id, searchCount);
} }
/** /**
@ -105,7 +117,7 @@ public class PluginSearchManager implements AlphaFineSearchProcessor {
for (int i = 0; i < jsonArray.length(); i++) { for (int i = 0; i < jsonArray.length(); i++) {
AlphaFineHelper.checkCancel(); AlphaFineHelper.checkCancel();
PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false); PluginModel cellModel = getPluginModel(jsonArray.optJSONObject(i), false);
if (!AlphaFineHelper.getFilterResult().contains(cellModel)) { if (cellModel != null && !AlphaFineHelper.getFilterResult().contains(cellModel)) {
searchResult.add(cellModel); searchResult.add(cellModel);
} }
} }
@ -137,7 +149,7 @@ public class PluginSearchManager implements AlphaFineSearchProcessor {
} }
@Override @Override
public SearchResult getMoreSearchResult() { public SearchResult getMoreSearchResult(String searchText) {
return this.moreModelList; return this.moreModelList;
} }
} }

205
designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecentSearchManager.java

@ -0,0 +1,205 @@
package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.design.actions.UpdateAction;
import com.fr.design.mainframe.alphafine.CellType;
import com.fr.design.mainframe.alphafine.cell.CellModelHelper;
import com.fr.design.mainframe.alphafine.cell.model.ActionModel;
import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider;
import com.fr.design.mainframe.toolbar.UpdateActionManager;
import com.fr.general.Inter;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.log.FRLoggerFactory;
import com.fr.stable.ProductConstants;
import com.fr.third.org.apache.lucene.analysis.Analyzer;
import com.fr.third.org.apache.lucene.analysis.standard.StandardAnalyzer;
import com.fr.third.org.apache.lucene.document.Document;
import com.fr.third.org.apache.lucene.document.Field;
import com.fr.third.org.apache.lucene.document.IntField;
import com.fr.third.org.apache.lucene.document.StringField;
import com.fr.third.org.apache.lucene.index.DirectoryReader;
import com.fr.third.org.apache.lucene.index.IndexReader;
import com.fr.third.org.apache.lucene.index.IndexWriter;
import com.fr.third.org.apache.lucene.index.IndexWriterConfig;
import com.fr.third.org.apache.lucene.index.Term;
import com.fr.third.org.apache.lucene.search.IndexSearcher;
import com.fr.third.org.apache.lucene.search.Query;
import com.fr.third.org.apache.lucene.search.ScoreDoc;
import com.fr.third.org.apache.lucene.search.Sort;
import com.fr.third.org.apache.lucene.search.SortField;
import com.fr.third.org.apache.lucene.search.TermQuery;
import com.fr.third.org.apache.lucene.search.TopFieldDocs;
import com.fr.third.org.apache.lucene.store.Directory;
import com.fr.third.org.apache.lucene.store.FSDirectory;
import com.fr.third.org.apache.lucene.util.Version;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* Created by XiaXiang on 2018/1/22.
*/
public class RecentSearchManager implements AlphaFineSearchProvider {
private static final int MAX_SIZE = 3;
private static RecentSearchManager recentSearchManager = null;
IndexReader indexReader = null;
IndexSearcher indexSearcher = null;
//索引存储路径
private String path = ProductConstants.getEnvHome() + File.separator + "searchIndex";
//分词器,暂时先用这个
private Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
// 存储目录
private Directory directory = null;
private IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);
private IndexWriter indexWriter = null;
private SearchResult recentModelList;
private SearchResult modelList;
public synchronized static RecentSearchManager getInstance() {
if (recentSearchManager == null) {
recentSearchManager = new RecentSearchManager();
}
return recentSearchManager;
}
@Override
public SearchResult getLessSearchResult(String searchText) {
this.modelList = new SearchResult();
recentModelList = getRecentModelList(searchText);
if (recentModelList != null && recentModelList.size() > 0) {
modelList.add(new MoreModel(Inter.getLocText("FR-Designer_AlphaFine_Latest")));
}
modelList.addAll(recentModelList);
return modelList;
}
@Override
public SearchResult getMoreSearchResult(String searchText) {
return new SearchResult();
}
public synchronized SearchResult getRecentModelList(String searchText) {
return searchBySort(searchText);
}
public List<AlphaCellModel> getRecentModelList() {
return recentModelList;
}
/**
* 初始化indexWriter
*/
private void initWriter() {
if (indexWriter == null) {
try {
directory = FSDirectory.open(new File(path));
} catch (IOException e) {
FRLoggerFactory.getLogger().error("cannot open directory " + path);
}
try {
indexWriter = new IndexWriter(directory, config);
} catch (IOException e) {
FRLoggerFactory.getLogger().error("not privilege to write to" + path);
}
}
}
/**
* 初始化indexReader
*/
private void initReader() {
if (indexReader == null) {
try {
directory = FSDirectory.open(new File(path));
indexReader = DirectoryReader.open(directory);
} catch (IOException e) {
FRLoggerFactory.getLogger().error("not privilege to read " + path);
}
indexSearcher = new IndexSearcher(indexReader);
}
}
/**
* 添加模型
* @param searchKey
* @param cellModel
* @param searchCount
*/
public void addModel(String searchKey, AlphaCellModel cellModel, int searchCount) {
try {
initWriter();
Document doc = new Document();
doc.add(new StringField("searchKey", searchKey, Field.Store.YES));
doc.add(new StringField("cellModel", cellModel.ModelToJson().toString(), Field.Store.YES));
doc.add(new IntField("searchCount", searchCount, Field.Store.YES));
writeDoc(doc);
} catch (JSONException e) {
FRLoggerFactory.getLogger().error("add document error: " + e.getMessage());
}
}
/**
* 写文档建立索引
* @param doc
*/
private void writeDoc(Document doc) {
try {
indexWriter.addDocument(doc);
indexWriter.commit();
indexWriter.close();
} catch (IOException e) {
FRLoggerFactory.getLogger().error("write document error: " + e.getMessage());
}
}
/**
* 按序搜索
* @param key
* @return
*/
private synchronized SearchResult searchBySort(String key) {
recentModelList = new SearchResult();
try {
initReader();
IndexSearcher searcher = new IndexSearcher(indexReader);
//构建排序字段
SortField[] sortField = new SortField[1];
sortField[0] = new SortField("searchCount", SortField.Type.INT, true);
Sort sortKey = new Sort(sortField);
String searchField = "searchKey";
Term term = new Term(searchField, key);
Query query = new TermQuery(term);
TopFieldDocs docs = searcher.search(query, MAX_SIZE, sortKey);
ScoreDoc[] scores = docs.scoreDocs;
this.recentModelList = new SearchResult();
//遍历结果
for (ScoreDoc scoreDoc : scores) {
Document document = searcher.doc(scoreDoc.doc);
AlphaCellModel model = CellModelHelper.getModelFromJson(new JSONObject(document.get("cellModel")));
if (model.getType() == CellType.ACTION) {
UpdateAction action = UpdateActionManager.getUpdateActionManager().getActionByName(model.getName());
if (action != null) {
((ActionModel) model).setAction(action);
recentModelList.add(model);
}
} else {
recentModelList.add(model);
}
}
} catch (Exception e) {
FRLoggerFactory.getLogger().error("local search error: " + e.getMessage());
return recentModelList;
}
return recentModelList;
}
}

18
designer/src/com/fr/design/mainframe/alphafine/search/manager/RecommendSearchManager.java → designer/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java

@ -1,7 +1,6 @@
package com.fr.design.mainframe.alphafine.search.manager; package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.mainframe.SiteCenterToken;
import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineConstants;
import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.AlphaFineHelper;
import com.fr.design.mainframe.alphafine.CellType; import com.fr.design.mainframe.alphafine.CellType;
@ -10,6 +9,7 @@ import com.fr.design.mainframe.alphafine.cell.model.ActionModel;
import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel;
import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel;
import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.model.SearchResult;
import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
@ -25,12 +25,12 @@ import java.util.List;
/** /**
* Created by XiaXiang on 2017/3/31. * Created by XiaXiang on 2017/3/31.
*/ */
public class RecommendSearchManager implements AlphaFineSearchProcessor { public class RecommendSearchManager implements AlphaFineSearchProvider {
private static RecommendSearchManager recommendSearchManager = null; private static RecommendSearchManager recommendSearchManager = null;
private SearchResult modelList; private SearchResult modelList;
private SearchResult recommendModelList; private SearchResult recommendModelList;
public synchronized static RecommendSearchManager getRecommendSearchManager() { public synchronized static RecommendSearchManager getInstance() {
if (recommendSearchManager == null) { if (recommendSearchManager == null) {
recommendSearchManager = new RecommendSearchManager(); recommendSearchManager = new RecommendSearchManager();
} }
@ -44,14 +44,12 @@ public class RecommendSearchManager implements AlphaFineSearchProcessor {
this.recommendModelList = new SearchResult(); this.recommendModelList = new SearchResult();
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainRecommend()) { if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isContainRecommend()) {
String result; String result;
String url = AlphaFineConstants.SEARCH_API + CodeUtils.cjkEncode(searchText); HttpClient httpClient = new HttpClient(AlphaFineConstants.SEARCH_API + CodeUtils.cjkEncode(searchText));
url = String.format("%s?token=%s", url, SiteCenterToken.generateToken());
HttpClient httpClient = new HttpClient(url);
httpClient.asGet(); httpClient.asGet();
if (!httpClient.isServerAlive()) { if (!httpClient.isServerAlive()) {
return getNoConnectList(); return getNoConnectList();
} }
httpClient.setTimeout(5000); httpClient.setTimeout(3000);
result = httpClient.getResponseText(); result = httpClient.getResponseText();
AlphaFineHelper.checkCancel(); AlphaFineHelper.checkCancel();
try { try {
@ -93,7 +91,7 @@ public class RecommendSearchManager implements AlphaFineSearchProcessor {
* @return * @return
*/ */
private boolean alreadyContain(AlphaCellModel cellModel) { private boolean alreadyContain(AlphaCellModel cellModel) {
return RecentSearchManager.getRecentSearchManger().getRecentModelList().contains(cellModel) || this.recommendModelList.contains(cellModel); return RecentSearchManager.getInstance().getRecentModelList().contains(cellModel) || this.recommendModelList.contains(cellModel);
} }
private SearchResult getNoConnectList() { private SearchResult getNoConnectList() {
@ -104,7 +102,7 @@ public class RecommendSearchManager implements AlphaFineSearchProcessor {
} }
@Override @Override
public SearchResult getMoreSearchResult() { public SearchResult getMoreSearchResult(String searchText) {
return new SearchResult(); return new SearchResult();
} }

14
designer_base/src/com/fr/design/extra/PluginOperateUtils.java

@ -122,7 +122,7 @@ public class PluginOperateUtils {
return resultArray.toString(); return resultArray.toString();
} }
public static void dealParams(StringBuilder url, String category, String seller, String fee) { public static void dealParams(StringBuilder url, String category, String seller, String fee, String scope) {
if (StringUtils.isNotBlank(category)) { if (StringUtils.isNotBlank(category)) {
url.append("cid=").append(category.split("-")[1]); url.append("cid=").append(category.split("-")[1]);
} else { } else {
@ -152,6 +152,18 @@ public class PluginOperateUtils {
url.append("&fee=").append(StringUtils.EMPTY); url.append("&fee=").append(StringUtils.EMPTY);
} }
} }
if (StringUtils.isNotBlank(scope)) {
switch (scope.split("-")[1]) {
case "universal":
url.append("&scope=").append(1);
break;
case "program":
url.append("&scope=").append(2);
break;
default:
url.append("&scope=").append(StringUtils.EMPTY);
}
}
} }
public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) { public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) {

75
designer_base/src/com/fr/design/extra/PluginWebBridge.java

@ -54,6 +54,7 @@ public class PluginWebBridge {
private static final String THREAD_NAME_TEMPLATE = "pluginbridge-thread-%s"; private static final String THREAD_NAME_TEMPLATE = "pluginbridge-thread-%s";
private static final String ACTION = "action"; private static final String ACTION = "action";
private static final String KEYWORD = "keyword"; private static final String KEYWORD = "keyword";
private static final String PLUGIN_INFO = "pluginInfo";
private static final int COREPOOLSIZE = 3; private static final int COREPOOLSIZE = 3;
private static final int MAXPOOLSIZE = 5; private static final int MAXPOOLSIZE = 5;
@ -72,20 +73,7 @@ public class PluginWebBridge {
new LinkedBlockingQueue<Runnable>(COREPOOLSIZE), new LinkedBlockingQueue<Runnable>(COREPOOLSIZE),
new ThreadFactoryBuilder().setNameFormat(THREAD_NAME_TEMPLATE).build()); new ThreadFactoryBuilder().setNameFormat(THREAD_NAME_TEMPLATE).build());
/** private PluginWebBridge() {
* 动作枚举
*/
public enum ACTIONS {
SEARCH("search");
private String context;
ACTIONS(String context) {
this.context = context;
}
public String getContext() {
return context;
}
} }
public static PluginWebBridge getHelper() { public static PluginWebBridge getHelper() {
@ -106,9 +94,6 @@ public class PluginWebBridge {
return helper; return helper;
} }
private PluginWebBridge() {
}
/** /**
* 获取打开动作配置 * 获取打开动作配置
* *
@ -155,12 +140,26 @@ public class PluginWebBridge {
* *
* @param keyword 关键词 * @param keyword 关键词
*/ */
public void openWithSearch(String keyword) { public void openWithSearch(String keyword) {
HashMap<String, Object> map = new HashMap<String, Object>(2); HashMap<String, Object> map = new HashMap<String, Object>(2);
map.put(KEYWORD, keyword); map.put(KEYWORD, keyword);
setRunConfig(ACTIONS.SEARCH, map); setRunConfig(ACTIONS.SEARCH, map);
} }
/**
* 根据插件信息跳转到应用中心
*
* @param keyword
* @param pluginInfo
*/
public void showResultInStore(String keyword, String pluginInfo) {
HashMap<String, Object> map = new HashMap<>();
map.put(KEYWORD, keyword);
map.put(PLUGIN_INFO, pluginInfo);
setRunConfig(ACTIONS.SHOW_RESULT, map);
}
public void setEngine(WebEngine webEngine) { public void setEngine(WebEngine webEngine) {
this.webEngine = webEngine; this.webEngine = webEngine;
} }
@ -182,7 +181,6 @@ public class PluginWebBridge {
PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback);
} }
/** /**
* 从磁盘上选择插件安装包进行安装 * 从磁盘上选择插件安装包进行安装
* *
@ -204,7 +202,6 @@ public class PluginWebBridge {
PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback);
} }
/** /**
* 从插件服务器上更新选中的插件 * 从插件服务器上更新选中的插件
* *
@ -342,17 +339,31 @@ public class PluginWebBridge {
* @param callback 回调函数 * @param callback 回调函数
*/ */
public void getPluginFromStore(String category, String seller, String fee, final JSObject callback) { public void getPluginFromStore(String category, String seller, String fee, final JSObject callback) {
Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(category, seller, fee)); Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(category, seller, fee, ""));
threadPoolExecutor.submit(task); threadPoolExecutor.submit(task);
} }
/**
* 根据条件获取在线插件
*
* @param info 插件信息
* @param callback 回调函数
*/
public void getPluginFromStoreNew(String info, final JSObject callback) {
try {
Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(new JSONObject(info)));
threadPoolExecutor.submit(task);
} catch (JSONException e) {
FRLogger.getLogger().error(e.getMessage());
}
}
public void getPluginPrefix(final JSObject callback) { public void getPluginPrefix(final JSObject callback) {
Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginPrefixExecutor()); Task<Void> task = new PluginTask<>(webEngine, callback, new GetPluginPrefixExecutor());
threadPoolExecutor.submit(task); threadPoolExecutor.submit(task);
} }
/** /**
* 在线获取插件分类 * 在线获取插件分类
* *
@ -487,9 +498,6 @@ public class PluginWebBridge {
} }
} }
/*-------------------------------登录部分的处理----------------------------------*/
/** /**
* 注册页面 * 注册页面
*/ */
@ -501,6 +509,9 @@ public class PluginWebBridge {
} }
} }
/*-------------------------------登录部分的处理----------------------------------*/
/** /**
* 忘记密码 * 忘记密码
*/ */
@ -577,4 +588,20 @@ public class PluginWebBridge {
return true; return true;
} }
/**
* 动作枚举
*/
public enum ACTIONS {
SEARCH("search"), SHOW_RESULT("showResult");
private String context;
ACTIONS(String context) {
this.context = context;
}
public String getContext() {
return context;
}
}
} }

36
designer_base/src/com/fr/design/extra/WebViewDlgHelper.java

@ -5,6 +5,7 @@ import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.UIDialog; import com.fr.design.dialog.UIDialog;
import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.general.CommonIOUtils;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.IOUtils; import com.fr.general.IOUtils;
@ -22,9 +23,7 @@ import javax.swing.SwingWorker;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.IOException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -94,27 +93,17 @@ public class WebViewDlgHelper {
public static void checkAndCopyMainFile(String indexPath, String mainJsPath) { public static void checkAndCopyMainFile(String indexPath, String mainJsPath) {
File file = new File(indexPath); File file = new File(indexPath);
if (!file.exists()) { if (!file.exists()) {
copyMainFile(indexPath, mainJsPath); copyMainFile(mainJsPath);
} }
} }
/** /**
* 將script文件夹中的plugin.html文件复制到webreport下 * 將script文件夹中的plugin.html文件复制到webreport下
*/ */
public static void copyMainFile(String indexPath, String mainJsPath) { private static void copyMainFile(String mainJsPath) {
try { try {
File mainJsFile = new File(mainJsPath); CommonIOUtils.copy(new File(mainJsPath), new File(installHome));
int byteread = 0; } catch (IOException e) {
if (mainJsFile.exists()) {
InputStream inStream = new FileInputStream(mainJsPath);
FileOutputStream fs = new FileOutputStream(indexPath);
byte[] buffer = new byte[BYTES_NUM];
while ((byteread = inStream.read(buffer)) != -1) {
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage()); FRContext.getLogger().error(e.getMessage());
} }
} }
@ -129,6 +118,17 @@ public class WebViewDlgHelper {
createPluginDialog(); createPluginDialog();
} }
/**
* 以关键词打开设计器商店显示搜索结果
*
* @param keyword
* @param data
*/
public static void showPluginInStore(String keyword, String data) {
PluginWebBridge.getHelper().showResultInStore(keyword, data);
createPluginDialog();
}
public static void createLoginDialog() { public static void createLoginDialog() {
if (StableUtils.getMajorJavaVersion() == VERSION_8) { if (StableUtils.getMajorJavaVersion() == VERSION_8) {
File file = new File(StableUtils.pathJoin(installHome, "scripts")); File file = new File(StableUtils.pathJoin(installHome, "scripts"));
@ -230,7 +230,7 @@ public class WebViewDlgHelper {
if (get()) { if (get()) {
String relativePath = "/scripts/plugin.html"; String relativePath = "/scripts/plugin.html";
IOUtils.unzip(new File(StableUtils.pathJoin(PluginConstants.DOWNLOAD_PATH, PluginConstants.TEMP_FILE)), installHome); IOUtils.unzip(new File(StableUtils.pathJoin(PluginConstants.DOWNLOAD_PATH, PluginConstants.TEMP_FILE)), installHome);
copyMainFile(StableUtils.pathJoin(installHome, "plugin.html"), StableUtils.pathJoin(installHome, relativePath)); copyMainFile(StableUtils.pathJoin(installHome, relativePath));
// TODO: 2017/4/17 删除之前存放在安装目录下的script // TODO: 2017/4/17 删除之前存放在安装目录下的script
PluginStoreConstants.refreshProps(); // 下载完刷新一下版本号等 PluginStoreConstants.refreshProps(); // 下载完刷新一下版本号等
JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.INFORMATION_MESSAGE);

17
designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java

@ -20,11 +20,20 @@ public class GetPluginFromStoreExecutor implements Executor {
private String category; private String category;
private String seller; private String seller;
private String fee; private String fee;
private String scope;
public GetPluginFromStoreExecutor(String category, String seller, String fee) { public GetPluginFromStoreExecutor(JSONObject info) {
this.category = info.optString("category");
this.fee = info.optString("fee");
this.seller = info.optString("seller");
this.scope = info.optString("scope");
}
public GetPluginFromStoreExecutor(String category, String seller, String fee, String scope) {
this.category = category; this.category = category;
this.seller = seller; this.seller = seller;
this.fee = fee; this.fee = fee;
this.scope = scope;
} }
@Override @Override
@ -44,7 +53,7 @@ public class GetPluginFromStoreExecutor implements Executor {
@Override @Override
public void run(Process<String> process) { public void run(Process<String> process) {
String plistUrl = SiteCenter.getInstance().acquireUrlByKind("shop.plugin.plist") + "?"; String plistUrl = SiteCenter.getInstance().acquireUrlByKind("shop.plugin.plist") + "?";
boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee); boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee) && StringUtils.isEmpty(scope);
if (getRecommend) { if (getRecommend) {
result = PluginOperateUtils.getRecommendPlugins(); result = PluginOperateUtils.getRecommendPlugins();
return; return;
@ -53,7 +62,7 @@ public class GetPluginFromStoreExecutor implements Executor {
if (StringUtils.isNotBlank(plistUrl)) { if (StringUtils.isNotBlank(plistUrl)) {
StringBuilder url = new StringBuilder(); StringBuilder url = new StringBuilder();
url.append(plistUrl); url.append(plistUrl);
PluginOperateUtils.dealParams(url, category, seller, fee); PluginOperateUtils.dealParams(url, category, seller, fee, scope);
try { try {
HttpClient httpClient = new HttpClient(url.toString()); HttpClient httpClient = new HttpClient(url.toString());
httpClient.asGet(); httpClient.asGet();
@ -66,7 +75,7 @@ public class GetPluginFromStoreExecutor implements Executor {
FRLogger.getLogger().error(e.getMessage()); FRLogger.getLogger().error(e.getMessage());
} }
} else { } else {
result = PluginConstants.CONNECTION_404; result = PluginConstants.CONNECTION_404;
} }
} }
} }

16
designer_base/src/com/fr/design/mainframe/toolbar/UpdateActionManager.java

@ -27,12 +27,18 @@ public class UpdateActionManager {
this.updateActions = updateActions; this.updateActions = updateActions;
} }
public boolean isEnable(UpdateAction updateAction) { /**
* 根据action name获取action对象
*
* @param name
* @return
*/
public UpdateAction getActionByName(String name) {
for (UpdateActionModel action : updateActions) { for (UpdateActionModel action : updateActions) {
if (ComparatorUtils.equals(updateAction.getName(), action.getActionName()) && action.getAction().isEnabled()) { if (ComparatorUtils.equals(name, action.getActionName()) && action.getAction().isEnabled()) {
return true; return action.getAction();
} }
} }
return false; return null;
} }
} }
Loading…
Cancel
Save