提交 e70f400d 编写于 作者: O o2sword

全局设计搜索之script脚本搜索3

上级 d49e6b79
......@@ -27,6 +27,7 @@ import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.set.ListOrderedSet;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.slf4j.helpers.MessageFormatter;
......@@ -548,4 +549,40 @@ public class StringTools {
}
return sb.toString();
}
}
\ No newline at end of file
/**
* 文本搜索
* @param keyword 搜索关键字
* @param content 文本
* @param caseSensitive 大小写敏感
* @param matchWholeWord 是否全字匹配
* @param matchRegExp 正则表达式搜索
* @return
*/
public static boolean matchKeyword(String keyword, String content, Boolean caseSensitive, Boolean matchWholeWord, Boolean matchRegExp){
if(StringUtils.isBlank(keyword) || StringUtils.isBlank(content)){
return false;
}
if(BooleanUtils.isTrue(matchRegExp)){
Pattern pattern = Pattern.compile(keyword);
Matcher matcher = pattern.matcher(content);
return matcher.find();
}else if(BooleanUtils.isTrue(matchWholeWord)){
if(BooleanUtils.isTrue(caseSensitive)) {
Pattern pattern = Pattern.compile("\\b(" + keyword + ")\\b");
Matcher matcher = pattern.matcher(content);
return matcher.find();
}else{
Pattern pattern = Pattern.compile("\\b(" + keyword + ")\\b", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(content);
return matcher.find();
}
}else{
if(BooleanUtils.isTrue(caseSensitive)) {
return (content.indexOf(keyword) > -1);
}else{
return (content.toLowerCase().indexOf(keyword.toLowerCase()) > -1);
}
}
}
}
......@@ -12,8 +12,10 @@ import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.StringTools;
import com.x.cms.core.entity.AppInfo;
import com.x.cms.core.entity.element.Script;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -32,6 +34,7 @@ class ActionManagerList extends BaseAction {
}else{
wos = emc.fetchIn(Script.class, Wo.copier, Script.appId_FIELDNAME, wi.getAppIdList());
}
final List<Wo> resWos = new ArrayList<>();
wos.stream().forEach(wo -> {
try {
AppInfo appInfo = emc.find( wo.getAppId(), AppInfo.class );
......@@ -40,17 +43,65 @@ class ActionManagerList extends BaseAction {
}
} catch (Exception e) {
}
if(StringUtils.isNotBlank(wi.getKeyword())){
if(StringTools.matchKeyword(wi.getKeyword(), wo.getText(), wi.getCaseSensitive(), wi.getMatchWholeWord(), wi.getMatchRegExp())){
resWos.add(wo);
}
}else{
resWos.add(wo);
}
});
result.setData(wos);
result.setCount((long)wos.size());
wos.clear();
result.setData(resWos);
result.setCount((long)resWos.size());
return result;
}
}
public static class Wi extends GsonPropertyObject{
@FieldDescribe("搜索关键字.")
private String keyword;
@FieldDescribe("是否区分大小写.")
private Boolean caseSensitive;
@FieldDescribe("是否全字匹配.")
private Boolean matchWholeWord;
@FieldDescribe("是否正则表达式匹配.")
private Boolean matchRegExp;
@FieldDescribe("应用ID列表.")
private List<String> appIdList = new ArrayList<>();
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public Boolean getCaseSensitive() {
return caseSensitive;
}
public void setCaseSensitive(Boolean caseSensitive) {
this.caseSensitive = caseSensitive;
}
public Boolean getMatchWholeWord() {
return matchWholeWord;
}
public void setMatchWholeWord(Boolean matchWholeWord) {
this.matchWholeWord = matchWholeWord;
}
public Boolean getMatchRegExp() {
return matchRegExp;
}
public void setMatchRegExp(Boolean matchRegExp) {
this.matchRegExp = matchRegExp;
}
public List<String> getAppIdList() {
return appIdList;
}
......
......@@ -12,8 +12,10 @@ import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.StringTools;
import com.x.portal.core.entity.Portal;
import com.x.portal.core.entity.Script;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -32,6 +34,7 @@ class ActionManagerList extends BaseAction {
}else{
wos = emc.fetchIn(Script.class, Wo.copier, Script.portal_FIELDNAME, wi.getAppIdList());
}
final List<Wo> resWos = new ArrayList<>();
wos.stream().forEach(wo -> {
try {
Portal portal = emc.find(wo.getPortal(), Portal.class);
......@@ -41,17 +44,65 @@ class ActionManagerList extends BaseAction {
}
} catch (Exception e) {
}
if(StringUtils.isNotBlank(wi.getKeyword())){
if(StringTools.matchKeyword(wi.getKeyword(), wo.getText(), wi.getCaseSensitive(), wi.getMatchWholeWord(), wi.getMatchRegExp())){
resWos.add(wo);
}
}else{
resWos.add(wo);
}
});
result.setData(wos);
result.setCount((long)wos.size());
wos.clear();
result.setData(resWos);
result.setCount((long)resWos.size());
return result;
}
}
public static class Wi extends GsonPropertyObject {
public static class Wi extends GsonPropertyObject{
@FieldDescribe("搜索关键字.")
private String keyword;
@FieldDescribe("是否区分大小写.")
private Boolean caseSensitive;
@FieldDescribe("是否全字匹配.")
private Boolean matchWholeWord;
@FieldDescribe("是否正则表达式匹配.")
private Boolean matchRegExp;
@FieldDescribe("应用ID列表.")
private List<String> appIdList = new ArrayList<>();
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public Boolean getCaseSensitive() {
return caseSensitive;
}
public void setCaseSensitive(Boolean caseSensitive) {
this.caseSensitive = caseSensitive;
}
public Boolean getMatchWholeWord() {
return matchWholeWord;
}
public void setMatchWholeWord(Boolean matchWholeWord) {
this.matchWholeWord = matchWholeWord;
}
public Boolean getMatchRegExp() {
return matchRegExp;
}
public void setMatchRegExp(Boolean matchRegExp) {
this.matchRegExp = matchRegExp;
}
public List<String> getAppIdList() {
return appIdList;
}
......
......@@ -12,8 +12,10 @@ import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.StringTools;
import com.x.processplatform.core.entity.element.Application;
import com.x.processplatform.core.entity.element.Script;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -32,6 +34,7 @@ class ActionManagerList extends BaseAction {
}else{
wos = emc.fetchIn(Script.class, Wo.copier, Script.application_FIELDNAME, wi.getAppIdList());
}
final List<Wo> resWos = new ArrayList<>();
wos.stream().forEach(wo -> {
try {
Application app = emc.find(wo.getApplication(), Application.class);
......@@ -41,17 +44,65 @@ class ActionManagerList extends BaseAction {
}
} catch (Exception e) {
}
if(StringUtils.isNotBlank(wi.getKeyword())){
if(StringTools.matchKeyword(wi.getKeyword(), wo.getText(), wi.getCaseSensitive(), wi.getMatchWholeWord(), wi.getMatchRegExp())){
resWos.add(wo);
}
}else{
resWos.add(wo);
}
});
result.setData(wos);
result.setCount((long)wos.size());
wos.clear();
result.setData(resWos);
result.setCount((long)resWos.size());
return result;
}
}
public static class Wi extends GsonPropertyObject {
public static class Wi extends GsonPropertyObject{
@FieldDescribe("搜索关键字.")
private String keyword;
@FieldDescribe("是否区分大小写.")
private Boolean caseSensitive;
@FieldDescribe("是否全字匹配.")
private Boolean matchWholeWord;
@FieldDescribe("是否正则表达式匹配.")
private Boolean matchRegExp;
@FieldDescribe("应用ID列表.")
private List<String> appIdList = new ArrayList<>();
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public Boolean getCaseSensitive() {
return caseSensitive;
}
public void setCaseSensitive(Boolean caseSensitive) {
this.caseSensitive = caseSensitive;
}
public Boolean getMatchWholeWord() {
return matchWholeWord;
}
public void setMatchWholeWord(Boolean matchWholeWord) {
this.matchWholeWord = matchWholeWord;
}
public Boolean getMatchRegExp() {
return matchRegExp;
}
public void setMatchRegExp(Boolean matchRegExp) {
this.matchRegExp = matchRegExp;
}
public List<String> getAppIdList() {
return appIdList;
}
......
......@@ -11,6 +11,7 @@ import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.SortTools;
import com.x.base.core.project.tools.StringTools;
import com.x.base.core.project.x_cms_assemble_control;
import com.x.base.core.project.x_portal_assemble_designer;
import com.x.base.core.project.x_processplatform_assemble_designer;
......@@ -86,11 +87,15 @@ class ActionSearch extends BaseAction {
List<ScriptWo> swList = new ArrayList<>();
if(moduleMap.containsKey(moduleType)) {
try {
Map<String, List<String>> map = new HashMap<>();
Map<String, Object> map = new HashMap<>();
map.put("appIdList", moduleMap.get(moduleType));
map.put("keyword", wi.getKeyword());
map.put("caseSensitive", wi.getCaseSensitive());
map.put("matchWholeWord", wi.getMatchWholeWord());
map.put("matchRegExp", wi.getMatchRegExp());
List<WrapScript> scriptList = ThisApplication.context().applications().postQuery(applicationClass,
Applications.joinQueryUri("script", "list", "manager"), map).getDataAsList(WrapScript.class);
logger.print("设计搜索关联{}的脚本个数:{}", moduleType, scriptList.size());
logger.print("设计搜索关联{}的匹配脚本个数:{}", moduleType, scriptList.size());
getScriptSearchRes(wi, moduleType, swList, scriptList);
} catch (Exception e) {
logger.error(e);
......@@ -110,7 +115,7 @@ class ActionSearch extends BaseAction {
private void getScriptSearchRes(final Wi wi, String moduleType, List<ScriptWo> swList, List<WrapScript> scriptList){
if (!ListTools.isEmpty(scriptList)){
for (WrapScript script:scriptList) {
if (keywordMatch(wi.getKeyword(), script.getText(), wi.getCaseSensitive(), wi.getMatchWholeWord(), wi.getMatchRegExp())){
if (StringTools.matchKeyword(wi.getKeyword(), script.getText(), wi.getCaseSensitive(), wi.getMatchWholeWord(), wi.getMatchRegExp())){
List<Integer> list = patternLines(script.getId()+"-"+script.getUpdateTime().getTime(),
wi.getKeyword(), script.getText(), wi.getCaseSensitive(), wi.getMatchWholeWord(), wi.getMatchRegExp());
if (!ListTools.isEmpty(list)){
......
......@@ -4,6 +4,7 @@ import com.x.base.core.project.config.Config;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.base.core.project.tools.DefaultCharset;
import com.x.base.core.project.tools.FileTools;
import com.x.base.core.project.tools.StringTools;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -17,33 +18,6 @@ import java.util.regex.Pattern;
abstract class BaseAction extends StandardJaxrsAction {
protected boolean keywordMatch(String keyword, String content, Boolean caseSensitive, Boolean matchWholeWord, Boolean matchRegExp){
if(StringUtils.isBlank(keyword) || StringUtils.isBlank(content)){
return false;
}
if(BooleanUtils.isTrue(matchRegExp)){
Pattern pattern = Pattern.compile(keyword);
Matcher matcher = pattern.matcher(content);
return matcher.find();
}else if(BooleanUtils.isTrue(matchWholeWord)){
if(BooleanUtils.isTrue(caseSensitive)) {
Pattern pattern = Pattern.compile("\\b(" + keyword + ")\\b");
Matcher matcher = pattern.matcher(content);
return matcher.find();
}else{
Pattern pattern = Pattern.compile("\\b(" + keyword + ")\\b", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(content);
return matcher.find();
}
}else{
if(BooleanUtils.isTrue(caseSensitive)) {
return (content.indexOf(keyword) > -1);
}else{
return (content.toLowerCase().indexOf(keyword.toLowerCase()) > -1);
}
}
}
protected List<Integer> patternLines(String id, String keyword, String content, Boolean caseSensitive, Boolean matchWholeWord, Boolean matchRegExp){
List<Integer> list = new ArrayList<>();
File file = readFile(id, content);
......@@ -56,7 +30,7 @@ abstract class BaseAction extends StandardJaxrsAction {
byte[] bytes = tmp.getBytes("ISO8859-1");
String lineStr = new String(bytes);
if(StringUtils.isNotBlank(lineStr) && lineStr.length()>=keyword.length()){
if(keywordMatch(keyword, lineStr, caseSensitive, matchWholeWord, matchRegExp)){
if(StringTools.matchKeyword(keyword, lineStr, caseSensitive, matchWholeWord, matchRegExp)){
list.add(curReadLine);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册