Merge branch 'master' of https://github.com/codelibs/fess
This commit is contained in:
commit
0ce4323508
49 changed files with 699 additions and 413 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -20,3 +20,4 @@
|
|||
.idea
|
||||
.DS_Store
|
||||
/plugins/
|
||||
/tomcat.8080/
|
||||
|
|
12
pom.xml
12
pom.xml
|
@ -434,6 +434,18 @@
|
|||
<version>56.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- suggest library -->
|
||||
<dependency>
|
||||
<groupId>org.codelibs.fess</groupId>
|
||||
<artifactId>fess-suggest</artifactId>
|
||||
<version>2.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codelibs</groupId>
|
||||
<artifactId>lucene-analyzers-kuromoji-ipadic-neologd</artifactId>
|
||||
<version>4.10.4-20150501</version>
|
||||
</dependency>
|
||||
|
||||
<!-- fileupload -->
|
||||
<dependency>
|
||||
<!-- TODO remove? -->
|
||||
|
|
|
@ -504,7 +504,7 @@ public class JsonApiManager extends BaseApiManager {
|
|||
|
||||
}
|
||||
|
||||
protected void writeJsonResponse(final int status, final String body, final String errMsg) {
|
||||
public static void writeJsonResponse(final int status, final String body, final String errMsg) {
|
||||
final String callback = LaRequestUtil.getRequest().getParameter("callback");
|
||||
final boolean isJsonp = StringUtil.isNotBlank(callback);
|
||||
|
||||
|
@ -538,11 +538,11 @@ public class JsonApiManager extends BaseApiManager {
|
|||
|
||||
}
|
||||
|
||||
protected String escapeCallbackName(final String callbackName) {
|
||||
protected static String escapeCallbackName(final String callbackName) {
|
||||
return "/**/" + callbackName.replaceAll("[^0-9a-zA-Z_\\$\\.]", StringUtil.EMPTY);
|
||||
}
|
||||
|
||||
protected String escapeJson(final Object obj) {
|
||||
protected static String escapeJson(final Object obj) {
|
||||
if (obj == null) {
|
||||
return "null";
|
||||
}
|
||||
|
@ -583,7 +583,7 @@ public class JsonApiManager extends BaseApiManager {
|
|||
return buf.toString();
|
||||
}
|
||||
|
||||
protected String escapeJsonString(final String str) {
|
||||
protected static String escapeJsonString(final String str) {
|
||||
|
||||
final StringWriter out = new StringWriter(str.length() * 2);
|
||||
int sz;
|
||||
|
@ -653,7 +653,7 @@ public class JsonApiManager extends BaseApiManager {
|
|||
return out.toString();
|
||||
}
|
||||
|
||||
private String hex(final char ch) {
|
||||
private static String hex(final char ch) {
|
||||
return Integer.toHexString(ch).toUpperCase();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,15 @@ import javax.servlet.ServletException;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.fess.api.BaseApiManager;
|
||||
import org.codelibs.fess.api.json.JsonApiManager;
|
||||
import org.codelibs.fess.helper.SuggestHelper;
|
||||
import org.codelibs.fess.suggest.entity.SuggestItem;
|
||||
import org.codelibs.fess.suggest.request.suggest.SuggestRequestBuilder;
|
||||
import org.codelibs.fess.suggest.request.suggest.SuggestResponse;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -34,16 +42,143 @@ public class SuggestApiManager extends BaseApiManager {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(final HttpServletRequest request) {
|
||||
return false; // TODO remove
|
||||
// final String servletPath = request.getServletPath();
|
||||
// return servletPath.startsWith(pathPrefix);
|
||||
public boolean matches(HttpServletRequest request) {
|
||||
final String servletPath = request.getServletPath();
|
||||
return servletPath.startsWith(pathPrefix);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) throws IOException,
|
||||
ServletException {
|
||||
throw new UnsupportedOperationException("TODO");
|
||||
public void process(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||
int status = 0;
|
||||
String errMsg = StringUtil.EMPTY;
|
||||
final StringBuilder buf = new StringBuilder(255);
|
||||
|
||||
try {
|
||||
|
||||
final RequestParameter parameter = RequestParameter.parse(request);
|
||||
|
||||
final SuggestHelper suggestHelper = ComponentUtil.getSuggestHelper();
|
||||
final SuggestRequestBuilder builder = suggestHelper.suggester().suggest();
|
||||
builder.setQuery(parameter.getQuery());
|
||||
for (final String field : parameter.getFields()) {
|
||||
builder.addField(field);
|
||||
}
|
||||
builder.setSize(parameter.getNum());
|
||||
|
||||
final SuggestResponse suggestResponse = builder.execute().getResponse();
|
||||
|
||||
buf.append("\"result\":{");
|
||||
|
||||
buf.append("\"index\":\"").append(suggestResponse.getIndex()).append('\"');
|
||||
|
||||
buf.append(",\"took\":\"").append(suggestResponse.getTookMs()).append('\"');
|
||||
|
||||
buf.append(",\"total\":\"").append(suggestResponse.getTotal()).append('\"');
|
||||
|
||||
buf.append(",\"num\":\"").append(suggestResponse.getNum()).append('\"');
|
||||
|
||||
if (!suggestResponse.getItems().isEmpty()) {
|
||||
buf.append(",\"hits\":[");
|
||||
|
||||
boolean first = true;
|
||||
for (final SuggestItem item : suggestResponse.getItems()) {
|
||||
if (!first) {
|
||||
buf.append(',');
|
||||
}
|
||||
first = false;
|
||||
|
||||
buf.append("{\"text\":\"").append(item.getText()).append('\"');
|
||||
buf.append(",\"tags\":[");
|
||||
for (int i = 0; i < item.getTags().length; i++) {
|
||||
if (i > 0) {
|
||||
buf.append(',');
|
||||
}
|
||||
buf.append('\"').append(item.getTags()[i]).append('\"');
|
||||
}
|
||||
buf.append(']');
|
||||
|
||||
buf.append(",\"roles\":[");
|
||||
for (int i = 0; i < item.getRoles().length; i++) {
|
||||
if (i > 0) {
|
||||
buf.append(',');
|
||||
}
|
||||
buf.append('\"').append(item.getRoles()[i]).append('\"');
|
||||
}
|
||||
buf.append(']');
|
||||
|
||||
buf.append(",\"fields\":[");
|
||||
for (int i = 0; i < item.getFields().length; i++) {
|
||||
if (i > 0) {
|
||||
buf.append(',');
|
||||
}
|
||||
buf.append('\"').append(item.getFields()[i]).append('\"');
|
||||
}
|
||||
buf.append(']');
|
||||
|
||||
buf.append('}');
|
||||
}
|
||||
buf.append(']');
|
||||
}
|
||||
|
||||
buf.append('}');
|
||||
} catch (final Exception e) {
|
||||
status = 1;
|
||||
errMsg = e.getMessage();
|
||||
if (errMsg == null) {
|
||||
errMsg = e.getClass().getName();
|
||||
}
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Failed to process a suggest request.", e);
|
||||
}
|
||||
}
|
||||
|
||||
JsonApiManager.writeJsonResponse(status, buf.toString(), errMsg);
|
||||
}
|
||||
|
||||
protected static class RequestParameter {
|
||||
private final String query;
|
||||
|
||||
private final String[] fields;
|
||||
|
||||
private final int num;
|
||||
|
||||
protected RequestParameter(final String query, final String[] fields, final int num) {
|
||||
this.query = query;
|
||||
this.fields = fields;
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
protected static RequestParameter parse(final HttpServletRequest request) {
|
||||
final String query = request.getParameter("query");
|
||||
final String fieldsStr = request.getParameter("fields");
|
||||
final String[] fields;
|
||||
if (StringUtils.isNotBlank(fieldsStr)) {
|
||||
fields = fieldsStr.split(",");
|
||||
} else {
|
||||
fields = new String[0];
|
||||
}
|
||||
|
||||
final String numStr = request.getParameter("num");
|
||||
final int num;
|
||||
if (StringUtils.isNotBlank(numStr) && StringUtils.isNumeric(numStr)) {
|
||||
num = Integer.parseInt(numStr);
|
||||
} else {
|
||||
num = 10;
|
||||
}
|
||||
|
||||
return new RequestParameter(query, fields, num);
|
||||
}
|
||||
|
||||
protected String getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
protected String[] getFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
protected int getNum() {
|
||||
return num;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ import org.codelibs.fess.helper.SystemHelper;
|
|||
import org.codelibs.fess.util.ComponentUtil;
|
||||
import org.dbflute.cbean.result.ListResultBean;
|
||||
import org.dbflute.cbean.result.PagingResultBean;
|
||||
import org.dbflute.optional.OptionalEntity;
|
||||
import org.lastaflute.di.core.SingletonLaContainer;
|
||||
|
||||
public class FailureUrlService implements Serializable {
|
||||
|
@ -71,17 +72,8 @@ public class FailureUrlService implements Serializable {
|
|||
return failureUrlList;
|
||||
}
|
||||
|
||||
public FailureUrl getFailureUrl(final Map<String, String> keys) {
|
||||
final FailureUrl failureUrl = failureUrlBhv.selectEntity(cb -> {
|
||||
cb.query().docMeta().setId_Equal(keys.get("id"));
|
||||
setupEntityCondition(cb, keys);
|
||||
}).orElse(null);
|
||||
if (failureUrl == null) {
|
||||
// TODO exception?
|
||||
return null;
|
||||
}
|
||||
|
||||
return failureUrl;
|
||||
public OptionalEntity<FailureUrl> getFailureUrl(final String id) {
|
||||
return failureUrlBhv.selectByPK(id);
|
||||
}
|
||||
|
||||
public void store(final FailureUrl failureUrl) {
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.codelibs.fess.es.config.exbhv.JobLogBhv;
|
|||
import org.codelibs.fess.es.config.exentity.JobLog;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
import org.dbflute.cbean.result.PagingResultBean;
|
||||
import org.dbflute.optional.OptionalEntity;
|
||||
|
||||
public class JobLogService implements Serializable {
|
||||
|
||||
|
@ -57,17 +58,8 @@ public class JobLogService implements Serializable {
|
|||
return jobLogList;
|
||||
}
|
||||
|
||||
public JobLog getJobLog(final Map<String, String> keys) {
|
||||
final JobLog jobLog = jobLogBhv.selectEntity(cb -> {
|
||||
cb.query().docMeta().setId_Equal(keys.get("id"));
|
||||
setupEntityCondition(cb, keys);
|
||||
}).orElse(null);//TODO
|
||||
if (jobLog == null) {
|
||||
// TODO exception?
|
||||
return null;
|
||||
}
|
||||
|
||||
return jobLog;
|
||||
public OptionalEntity<JobLog> getJobLog(final String id) {
|
||||
return jobLogBhv.selectByPK(id);
|
||||
}
|
||||
|
||||
public void store(final JobLog jobLog) {
|
||||
|
|
|
@ -195,7 +195,7 @@ public class AdminBoostdocumentruleAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
boostDocumentRuleService.getBoostDocumentRule(id).ifPresent(entity -> {
|
||||
|
|
|
@ -137,10 +137,10 @@ public class AdminCrawlingsessionAction extends FessAdminAction {
|
|||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Confirm
|
||||
// Details
|
||||
// -------
|
||||
@Execute
|
||||
public HtmlResponse confirmpage(final int crudMode, final String id) {
|
||||
public HtmlResponse details(final int crudMode, final String id) {
|
||||
verifyCrudMode(crudMode, CrudMode.DETAILS);
|
||||
return asHtml(path_AdminCrawlingsession_DetailsJsp).useForm(EditForm.class, op -> {
|
||||
op.setup(form -> {
|
||||
|
@ -163,7 +163,7 @@ public class AdminCrawlingsessionAction extends FessAdminAction {
|
|||
// -------------
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toIndexHtml());
|
||||
final String id = form.id;
|
||||
crawlingSessionService.getCrawlingSession(id).alwaysPresent(entity -> {
|
||||
|
|
|
@ -290,7 +290,7 @@ public class AdminDictKuromojiAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
kuromojiService.getKuromojiItem(form.dictId, form.id).ifPresent(entity -> {
|
||||
kuromojiService.delete(form.dictId, entity);
|
||||
|
|
|
@ -323,7 +323,7 @@ public class AdminDictSynonymAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
synonymService.getSynonymItem(form.dictId, form.id).ifPresent(entity -> {
|
||||
synonymService.delete(form.dictId, entity);
|
||||
|
|
|
@ -15,21 +15,19 @@
|
|||
*/
|
||||
package org.codelibs.fess.app.web.admin.failureurl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.app.pager.FailureUrlPager;
|
||||
import org.codelibs.fess.app.service.FailureUrlService;
|
||||
import org.codelibs.fess.app.web.CrudMode;
|
||||
import org.codelibs.fess.app.web.base.FessAdminAction;
|
||||
import org.codelibs.fess.es.config.exentity.FailureUrl;
|
||||
import org.codelibs.fess.helper.SystemHelper;
|
||||
import org.lastaflute.web.Execute;
|
||||
import org.lastaflute.web.callback.ActionRuntime;
|
||||
import org.lastaflute.web.response.HtmlResponse;
|
||||
import org.lastaflute.web.response.render.RenderData;
|
||||
import org.lastaflute.web.validation.VaErrorHook;
|
||||
|
||||
/**
|
||||
* @author codelibs
|
||||
|
@ -60,14 +58,14 @@ public class AdminFailureurlAction extends FessAdminAction {
|
|||
// Search Execute
|
||||
// ==============
|
||||
@Execute
|
||||
public HtmlResponse index(final FailureUrlSearchForm form) {
|
||||
public HtmlResponse index(final SearchForm form) {
|
||||
return asHtml(path_AdminFailureurl_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
});
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse list(final Integer pageNumber, final FailureUrlSearchForm form) {
|
||||
public HtmlResponse list(final Integer pageNumber, final SearchForm form) {
|
||||
failureUrlPager.setCurrentPageNumber(pageNumber);
|
||||
return asHtml(path_AdminFailureurl_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
|
@ -75,15 +73,15 @@ public class AdminFailureurlAction extends FessAdminAction {
|
|||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse search(final FailureUrlSearchForm form) {
|
||||
copyBeanToBean(form.searchParams, failureUrlPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
|
||||
public HtmlResponse search(final SearchForm form) {
|
||||
copyBeanToBean(form, failureUrlPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
|
||||
return asHtml(path_AdminFailureurl_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
});
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse reset(final FailureUrlSearchForm form) {
|
||||
public HtmlResponse reset(final SearchForm form) {
|
||||
failureUrlPager.clear();
|
||||
return asHtml(path_AdminFailureurl_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
|
@ -91,30 +89,37 @@ public class AdminFailureurlAction extends FessAdminAction {
|
|||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse back(final FailureUrlSearchForm form) {
|
||||
public HtmlResponse back(final SearchForm form) {
|
||||
return asHtml(path_AdminFailureurl_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
});
|
||||
}
|
||||
|
||||
protected void searchPaging(final RenderData data, final FailureUrlSearchForm form) {
|
||||
protected void searchPaging(final RenderData data, final SearchForm form) {
|
||||
data.register("failureUrlItems", failureUrlService.getFailureUrlList(failureUrlPager)); // page navi
|
||||
|
||||
// restore from pager
|
||||
copyBeanToBean(failureUrlPager, form.searchParams, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
|
||||
copyBeanToBean(failureUrlPager, form, op -> op.include("id"));
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Confirm
|
||||
// Details
|
||||
// -------
|
||||
@Execute
|
||||
public HtmlResponse confirmpage(final int crudMode, final String id, final FailureUrlEditForm form) {
|
||||
// TODO
|
||||
// form.crudMode = crudMode;
|
||||
// form.id = id;
|
||||
// verifyCrudMode(form, CrudMode.CONFIRM);
|
||||
loadFailureUrl(form);
|
||||
return asHtml(path_AdminFailureurl_DetailsJsp);
|
||||
public HtmlResponse details(final int crudMode, final String id) {
|
||||
verifyCrudMode(crudMode, CrudMode.DETAILS);
|
||||
return asHtml(path_AdminFailureurl_DetailsJsp).useForm(EditForm.class, op -> {
|
||||
op.setup(form -> {
|
||||
failureUrlService.getFailureUrl(id).ifPresent(entity -> {
|
||||
copyBeanToBean(entity, form, copyOp -> {
|
||||
copyOp.excludeNull();
|
||||
});
|
||||
form.crudMode = crudMode;
|
||||
}).orElse(() -> {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), toIndexHtml());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
|
@ -122,40 +127,39 @@ public class AdminFailureurlAction extends FessAdminAction {
|
|||
// -------------
|
||||
|
||||
@Execute
|
||||
public HtmlResponse delete(final FailureUrlEditForm form) {
|
||||
// TODO verifyCrudMode(form, CrudMode.DELETE);
|
||||
failureUrlService.delete(getFailureUrl(form));
|
||||
saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toIndexHtml());
|
||||
String id = form.id;
|
||||
failureUrlService.getFailureUrl(id).alwaysPresent(entity -> {
|
||||
failureUrlService.delete(entity);
|
||||
saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
|
||||
});
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse deleteall(final FailureUrlEditForm form) {
|
||||
public HtmlResponse deleteall(final EditForm form) {
|
||||
validate(form, messages -> {}, toIndexHtml());
|
||||
failureUrlService.deleteAll(failureUrlPager);
|
||||
saveInfo(messages -> messages.addSuccessFailureUrlDeleteAll(GLOBAL));
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// Assist Logic
|
||||
// Small Helper
|
||||
// ============
|
||||
|
||||
protected void loadFailureUrl(final FailureUrlEditForm form) {
|
||||
copyBeanToBean(getFailureUrl(form), form, op -> op.exclude("crudMode"));
|
||||
}
|
||||
|
||||
protected FailureUrl getFailureUrl(final FailureUrlEditForm form) {
|
||||
final FailureUrl failureUrl = failureUrlService.getFailureUrl(createKeyMap(form));
|
||||
if (failureUrl == null) {
|
||||
// TODO
|
||||
protected void verifyCrudMode(final int crudMode, final int expectedMode) {
|
||||
if (crudMode != expectedMode) {
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(crudMode));
|
||||
}, toIndexHtml());
|
||||
}
|
||||
return failureUrl;
|
||||
}
|
||||
|
||||
protected Map<String, String> createKeyMap(final FailureUrlEditForm form) {
|
||||
final Map<String, String> keys = new HashMap<String, String>();
|
||||
keys.put("id", form.id);
|
||||
return keys;
|
||||
protected VaErrorHook toIndexHtml() {
|
||||
return () -> {
|
||||
return asHtml(path_AdminJoblog_IndexJsp);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,11 +19,16 @@ import java.io.Serializable;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.validation.constraints.Digits;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import org.lastaflute.web.validation.Required;
|
||||
|
||||
/**
|
||||
* @author codelibs
|
||||
* @author Keiichi Watanabe
|
||||
*/
|
||||
public class FailureUrlEditForm implements Serializable {
|
||||
public class EditForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
@ -31,12 +36,12 @@ public class FailureUrlEditForm implements Serializable {
|
|||
|
||||
public String fileConfigName;
|
||||
|
||||
//@Digits(integer=10, fraction=0)
|
||||
@Digits(integer = 10, fraction = 0)
|
||||
public String pageNumber;
|
||||
|
||||
public Map<String, String> searchParams = new HashMap<String, String>();
|
||||
|
||||
//@Digits(integer=10, fraction=0)
|
||||
@Digits(integer = 10, fraction = 0)
|
||||
// TODO necessary?
|
||||
public int crudMode;
|
||||
|
||||
|
@ -44,29 +49,28 @@ public class FailureUrlEditForm implements Serializable {
|
|||
return pageNumber;
|
||||
}
|
||||
|
||||
//@Required(target = "confirmfromupdate,update,delete")
|
||||
//@Maxbytelength(maxbytelength = 1000)
|
||||
@Required
|
||||
@Size(max = 1000)
|
||||
public String id;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
@Required
|
||||
public String url;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
@Required
|
||||
public String threadName;
|
||||
|
||||
public String errorName;
|
||||
|
||||
public String errorLog;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
//@Digits(integer=10, fraction=0)
|
||||
@Required
|
||||
@Digits(integer = 10, fraction = 0)
|
||||
public String errorCount;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
//@DateType(datePattern = Constants.DEFAULT_DATETIME_FORMAT)
|
||||
@Required
|
||||
public String lastAccessTime;
|
||||
|
||||
//@Maxbytelength(maxbytelength = 1000)
|
||||
@Size(max = 1000)
|
||||
public String configId;
|
||||
|
||||
public void initialize() {
|
||||
|
@ -80,4 +84,4 @@ public class FailureUrlEditForm implements Serializable {
|
|||
configId = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -23,9 +23,11 @@ import java.util.Map;
|
|||
* @author codelibs
|
||||
* @author Keiichi Watanabe
|
||||
*/
|
||||
public class FailureUrlSearchForm implements Serializable {
|
||||
public class SearchForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public String id;
|
||||
|
||||
public Map<String, String> searchParams = new HashMap<String, String>();
|
||||
}
|
||||
}
|
|
@ -217,7 +217,7 @@ public class AdminFileauthenticationAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
fileAuthenticationService.getFileAuthentication(id).ifPresent(entity -> {
|
||||
|
|
|
@ -200,7 +200,7 @@ public class AdminGroupAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
groupService.getGroup(id).ifPresent(entity -> {
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
*/
|
||||
package org.codelibs.fess.app.web.admin.joblog;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.codelibs.fess.Constants;
|
||||
|
@ -25,7 +22,6 @@ import org.codelibs.fess.app.pager.JobLogPager;
|
|||
import org.codelibs.fess.app.service.JobLogService;
|
||||
import org.codelibs.fess.app.web.CrudMode;
|
||||
import org.codelibs.fess.app.web.base.FessAdminAction;
|
||||
import org.codelibs.fess.es.config.exentity.JobLog;
|
||||
import org.codelibs.fess.helper.SystemHelper;
|
||||
import org.lastaflute.web.Execute;
|
||||
import org.lastaflute.web.callback.ActionRuntime;
|
||||
|
@ -63,14 +59,14 @@ public class AdminJoblogAction extends FessAdminAction {
|
|||
// Search Execute
|
||||
// ==============
|
||||
@Execute
|
||||
public HtmlResponse index(final JobLogSearchForm form) {
|
||||
public HtmlResponse index(final SearchForm form) {
|
||||
return asHtml(path_AdminJoblog_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
});
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse list(final Integer pageNumber, final JobLogSearchForm form) {
|
||||
public HtmlResponse list(final Integer pageNumber, final SearchForm form) {
|
||||
jobLogPager.setCurrentPageNumber(pageNumber);
|
||||
return asHtml(path_AdminJoblog_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
|
@ -78,15 +74,15 @@ public class AdminJoblogAction extends FessAdminAction {
|
|||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse search(final JobLogSearchForm form) {
|
||||
copyBeanToBean(form.searchParams, jobLogPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
|
||||
public HtmlResponse search(final SearchForm form) {
|
||||
copyBeanToBean(form, jobLogPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
|
||||
return asHtml(path_AdminJoblog_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
});
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse reset(final JobLogSearchForm form) {
|
||||
public HtmlResponse reset(final SearchForm form) {
|
||||
jobLogPager.clear();
|
||||
return asHtml(path_AdminJoblog_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
|
@ -94,17 +90,17 @@ public class AdminJoblogAction extends FessAdminAction {
|
|||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse back(final JobLogSearchForm form) {
|
||||
public HtmlResponse back(final SearchForm form) {
|
||||
return asHtml(path_AdminJoblog_IndexJsp).renderWith(data -> {
|
||||
searchPaging(data, form);
|
||||
});
|
||||
}
|
||||
|
||||
protected void searchPaging(final RenderData data, final JobLogSearchForm form) {
|
||||
protected void searchPaging(final RenderData data, final SearchForm form) {
|
||||
data.register("jobLogItems", jobLogService.getJobLogList(jobLogPager)); // page navi
|
||||
|
||||
// restore from pager
|
||||
copyBeanToBean(jobLogPager, form.searchParams, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
|
||||
copyBeanToBean(jobLogPager, form, op -> op.include("id"));
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
|
@ -114,69 +110,81 @@ public class AdminJoblogAction extends FessAdminAction {
|
|||
// Entry Page
|
||||
// ----------
|
||||
@Execute(token = TxToken.SAVE)
|
||||
public HtmlResponse deletepage(final int crudMode, final String id, final JobLogEditForm form) {
|
||||
form.crudMode = crudMode;
|
||||
form.id = id;
|
||||
verifyCrudMode(form, CrudMode.DELETE);
|
||||
loadJobLog(form);
|
||||
return asHtml(path_AdminJoblog_DetailsJsp);
|
||||
public HtmlResponse deletepage(final int crudMode, final String id) {
|
||||
verifyCrudMode(crudMode, CrudMode.DELETE);
|
||||
return asHtml(path_AdminJoblog_DetailsJsp).useForm(EditForm.class, op -> {
|
||||
op.setup(form -> {
|
||||
jobLogService.getJobLog(id).ifPresent(entity -> {
|
||||
copyBeanToBean(entity, form, copyOp -> {
|
||||
copyOp.excludeNull();
|
||||
});
|
||||
}).orElse(() -> {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), toIndexHtml());
|
||||
});
|
||||
form.crudMode = crudMode;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@Execute(token = TxToken.SAVE)
|
||||
public HtmlResponse deletefromconfirm(final JobLogEditForm form) {
|
||||
public HtmlResponse deletefromconfirm(final EditForm form) {
|
||||
form.crudMode = CrudMode.DELETE;
|
||||
loadJobLog(form);
|
||||
validate(form, messages -> {}, toIndexHtml());
|
||||
String id = form.id;
|
||||
jobLogService.getJobLog(id).ifPresent(entity -> {
|
||||
copyBeanToBean(entity, form, op -> {});
|
||||
}).orElse(() -> {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), toIndexHtml());
|
||||
});
|
||||
return asHtml(path_AdminJoblog_DetailsJsp);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Confirm
|
||||
// Details
|
||||
// -------
|
||||
@Execute
|
||||
public HtmlResponse confirmpage(final int crudMode, final String id, final JobLogEditForm form) {
|
||||
form.crudMode = crudMode;
|
||||
form.id = id;
|
||||
verifyCrudMode(form, CrudMode.DETAILS);
|
||||
loadJobLog(form);
|
||||
return asHtml(path_AdminJoblog_DetailsJsp);
|
||||
public HtmlResponse details(final int crudMode, final String id) {
|
||||
verifyCrudMode(crudMode, CrudMode.DETAILS);
|
||||
return asHtml(path_AdminJoblog_DetailsJsp).useForm(EditForm.class, op -> {
|
||||
op.setup(form -> {
|
||||
jobLogService.getJobLog(id).ifPresent(entity -> {
|
||||
copyBeanToBean(entity, form, copyOp -> {
|
||||
copyOp.excludeNull();
|
||||
});
|
||||
form.crudMode = crudMode;
|
||||
}).orElse(() -> {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), toIndexHtml());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Actually Crud
|
||||
// -------------
|
||||
@Execute
|
||||
public HtmlResponse delete(final JobLogEditForm form) {
|
||||
verifyCrudMode(form, CrudMode.DELETE);
|
||||
jobLogService.delete(getJobLog(form));
|
||||
saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toIndexHtml());
|
||||
String id = form.id;
|
||||
jobLogService.getJobLog(id).alwaysPresent(entity -> {
|
||||
jobLogService.delete(entity);
|
||||
saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
|
||||
});
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// Assist Logic
|
||||
// ============
|
||||
protected void loadJobLog(final JobLogEditForm form) {
|
||||
copyBeanToBean(getJobLog(form), form, op -> op.exclude("crudMode"));
|
||||
}
|
||||
|
||||
protected JobLog getJobLog(final JobLogEditForm form) {
|
||||
final JobLog jobLog = jobLogService.getJobLog(createKeyMap(form));
|
||||
return jobLog;
|
||||
}
|
||||
|
||||
protected Map<String, String> createKeyMap(final JobLogEditForm form) {
|
||||
final Map<String, String> keys = new HashMap<String, String>();
|
||||
keys.put("id", form.id);
|
||||
return keys;
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// Small Helper
|
||||
// ============
|
||||
protected void verifyCrudMode(final JobLogEditForm form, final int expectedMode) {
|
||||
if (form.crudMode != expectedMode) {
|
||||
protected void verifyCrudMode(final int crudMode, final int expectedMode) {
|
||||
if (crudMode != expectedMode) {
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(form.crudMode));
|
||||
messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(crudMode));
|
||||
}, toIndexHtml());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,42 +17,44 @@ package org.codelibs.fess.app.web.admin.joblog;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.Digits;
|
||||
|
||||
import org.lastaflute.web.validation.Required;
|
||||
|
||||
/**
|
||||
* @author codelibs
|
||||
* @author Shunji Makino
|
||||
*/
|
||||
public class JobLogEditForm implements Serializable {
|
||||
public class EditForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
//@Digits(integer=10, fraction=0)
|
||||
@Digits(integer = 10, fraction = 0)
|
||||
public int crudMode;
|
||||
|
||||
//@Required(target = "confirmfromupdate,update,delete")
|
||||
//@Digits(integer=19, fraction=0)
|
||||
@Required
|
||||
@Digits(integer = 19, fraction = 0)
|
||||
public String id;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
@Required
|
||||
public String jobName;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
@Required
|
||||
public String jobStatus;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
@Required
|
||||
public String target;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
@Required
|
||||
public String scriptType;
|
||||
|
||||
public String scriptData;
|
||||
|
||||
public String scriptResult;
|
||||
|
||||
//@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete")
|
||||
//@DateType(datePattern = Constants.DEFAULT_DATETIME_FORMAT)
|
||||
@Required
|
||||
public String startTime;
|
||||
|
||||
//@DateType(datePattern = Constants.DEFAULT_DATETIME_FORMAT)
|
||||
public String endTime;
|
||||
|
||||
public void initialize() {
|
||||
|
@ -66,4 +68,4 @@ public class JobLogEditForm implements Serializable {
|
|||
startTime = null;
|
||||
endTime = null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -16,16 +16,14 @@
|
|||
package org.codelibs.fess.app.web.admin.joblog;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author codelibs
|
||||
* @author Shunji Makino
|
||||
*/
|
||||
public class JobLogSearchForm implements Serializable {
|
||||
public class SearchForm implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Map<String, String> searchParams = new HashMap<String, String>();
|
||||
}
|
||||
public String id;
|
||||
}
|
|
@ -196,7 +196,7 @@ public class AdminOverlappinghostAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
overlappingHostService.getOverlappingHost(id).ifPresent(entity -> {
|
||||
|
|
|
@ -197,7 +197,7 @@ public class AdminPathmappingAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
pathMappingService.getPathMapping(id).ifPresent(entity -> {
|
||||
|
|
|
@ -219,7 +219,7 @@ public class AdminRequestheaderAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
requestHeaderService.getRequestHeader(id).ifPresent(entity -> {
|
||||
|
|
|
@ -200,7 +200,7 @@ public class AdminRoleAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
roleService.getRole(id).ifPresent(entity -> {
|
||||
|
|
|
@ -196,7 +196,7 @@ public class AdminRoletypeAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
roleTypeService.getRoleType(id).ifPresent(entity -> {
|
||||
|
|
|
@ -200,7 +200,7 @@ public class AdminScheduledjobAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
scheduledJobService.getScheduledJob(id).ifPresent(entity -> {
|
||||
|
|
|
@ -245,7 +245,7 @@ public class AdminSuggestbadwordAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
suggestBadWordService.getSuggestBadWord(id).ifPresent(entity -> {
|
||||
|
|
|
@ -245,7 +245,7 @@ public class AdminSuggestelevatewordAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
suggestElevateWordService.getSuggestElevateWord(id).ifPresent(entity -> {
|
||||
|
|
|
@ -230,7 +230,7 @@ public class AdminUserAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
userService.getUser(id).ifPresent(entity -> {
|
||||
|
|
|
@ -218,7 +218,7 @@ public class AdminWebauthenticationAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
webAuthenticationService.getWebAuthentication(id).ifPresent(entity -> {
|
||||
|
|
|
@ -209,7 +209,7 @@ public class AdminWebconfigAction extends FessAdminAction {
|
|||
|
||||
@Execute
|
||||
public HtmlResponse delete(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.DELETE);
|
||||
verifyCrudMode(form.crudMode, CrudMode.DETAILS);
|
||||
validate(form, messages -> {}, toEditHtml());
|
||||
final String id = form.id;
|
||||
webConfigService.getWebConfig(id).ifPresent(entity -> {
|
||||
|
|
|
@ -41,12 +41,19 @@ public class QueryContext {
|
|||
|
||||
private final Set<String> highlightedQuerySet = new HashSet<>();
|
||||
|
||||
private final Map<String, List<String>> fieldLogMap = new HashMap<>();
|
||||
private Map<String, List<String>> fieldLogMap;
|
||||
|
||||
public QueryContext(final String queryString) {
|
||||
this.queryString = queryString;
|
||||
LaRequestUtil.getOptionalRequest().ifPresent(request -> {
|
||||
request.setAttribute(Constants.HIGHLIGHT_QUERIES, highlightedQuerySet);
|
||||
@SuppressWarnings("unchecked")
|
||||
final Map<String, List<String>> existFieldLogMap = (Map<String, List<String>>) request.getAttribute(Constants.FIELD_LOGS);
|
||||
if (existFieldLogMap != null) {
|
||||
fieldLogMap = existFieldLogMap;
|
||||
} else {
|
||||
fieldLogMap = new HashMap<>();
|
||||
}
|
||||
request.setAttribute(Constants.FIELD_LOGS, fieldLogMap);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -190,6 +190,8 @@ public class SearchLogHelper {
|
|||
|
||||
if (!searchLogList.isEmpty()) {
|
||||
storeSearchLogList(searchLogList);
|
||||
final SuggestHelper suggestHelper = ComponentUtil.getSuggestHelper();
|
||||
suggestHelper.indexFromSearchLog(searchLogList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
*/
|
||||
package org.codelibs.fess.helper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
@ -25,9 +24,13 @@ import javax.annotation.PostConstruct;
|
|||
import javax.annotation.Resource;
|
||||
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.fess.es.client.FessEsClient;
|
||||
import org.codelibs.fess.es.config.exbhv.SuggestBadWordBhv;
|
||||
import org.codelibs.fess.es.config.exbhv.SuggestElevateWordBhv;
|
||||
import org.codelibs.fess.es.config.exentity.SuggestBadWord;
|
||||
import org.codelibs.fess.es.log.exentity.SearchFieldLog;
|
||||
import org.codelibs.fess.es.log.exentity.SearchLog;
|
||||
import org.codelibs.fess.suggest.Suggester;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -40,34 +43,68 @@ public class SuggestHelper {
|
|||
@Resource
|
||||
protected SuggestBadWordBhv suggestBadWordBhv;
|
||||
|
||||
public String badwordFileDir = "./solr/core1/conf/";
|
||||
@Resource
|
||||
protected FessEsClient fessEsClient;
|
||||
|
||||
@Resource
|
||||
protected FieldHelper fieldHelper;
|
||||
|
||||
public String[] contentFieldNames = { "_default" };
|
||||
|
||||
public String[] tagFieldNames = { "label" };
|
||||
|
||||
public String[] roleFieldNames = { "role" };
|
||||
|
||||
private static final String TEXT_SEP = " ";
|
||||
|
||||
protected Suggester suggester;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
final Thread th = new Thread(() -> {
|
||||
// TODO replace with Elasticsearch
|
||||
/*
|
||||
while (true) {
|
||||
final PingResponse response = searchService.ping();
|
||||
final int status = response.getStatus();
|
||||
if (status == 0) {
|
||||
if (logger.isInfoEnabled()) {
|
||||
logger.info("Solr server was availabled. Refresh suggest words.");
|
||||
}
|
||||
refreshWords();
|
||||
break;
|
||||
}
|
||||
try {
|
||||
Thread.sleep(1 * 1000);
|
||||
} catch (final InterruptedException e) {
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
*/
|
||||
});
|
||||
fessEsClient.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet();
|
||||
suggester = Suggester.builder().build(fessEsClient, fieldHelper.docIndex);
|
||||
suggester.createIndexIfNothing();
|
||||
});
|
||||
th.start();
|
||||
}
|
||||
|
||||
public Suggester suggester() {
|
||||
return suggester;
|
||||
}
|
||||
|
||||
public void indexFromSearchLog(final List<SearchLog> searchLogList) {
|
||||
for (final SearchLog searchLog : searchLogList) {
|
||||
// TODO if(getHitCount == 0) continue;
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final List<String> fields = new ArrayList<>();
|
||||
final List<String> tags = new ArrayList<>();
|
||||
final List<String> roles = new ArrayList<>();
|
||||
|
||||
for (final SearchFieldLog searchFieldLog : searchLog.getSearchFieldLogList()) {
|
||||
final String name = searchFieldLog.getName();
|
||||
if (isContentField(name)) {
|
||||
if (sb.length() > 0) {
|
||||
sb.append(TEXT_SEP);
|
||||
}
|
||||
sb.append(searchFieldLog.getValue());
|
||||
fields.add(name);
|
||||
} else if (isTagField(name)) {
|
||||
tags.add(searchFieldLog.getValue());
|
||||
} else if (isRoleField(name)) {
|
||||
roles.add(searchFieldLog.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (sb.length() > 0) {
|
||||
suggester.indexer().indexFromSearchWord(sb.toString(), fields.toArray(new String[fields.size()]),
|
||||
tags.toArray(new String[tags.size()]), roles.toArray(new String[roles.size()]), 1);
|
||||
}
|
||||
}
|
||||
suggester.refresh();
|
||||
}
|
||||
|
||||
public void refreshWords() {
|
||||
deleteAllBadWord();
|
||||
storeAllElevateWords();
|
||||
|
@ -143,6 +180,7 @@ public class SuggestHelper {
|
|||
// suggestService.commit();
|
||||
}
|
||||
|
||||
/*
|
||||
public void updateSolrBadwordFile() {
|
||||
suggestBadWordBhv.selectList(cb -> {
|
||||
cb.query().matchAll();
|
||||
|
@ -179,4 +217,32 @@ public class SuggestHelper {
|
|||
// }
|
||||
// }
|
||||
}
|
||||
*/
|
||||
|
||||
protected boolean isContentField(final String field) {
|
||||
for (final String contentField : contentFieldNames) {
|
||||
if (contentField.equals(field)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean isTagField(final String field) {
|
||||
for (final String tagField : tagFieldNames) {
|
||||
if (tagField.equals(field)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean isRoleField(final String field) {
|
||||
for (final String roleField : roleFieldNames) {
|
||||
if (roleField.equals(field)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2501,8 +2501,14 @@ public class FessLabels extends ActionMessages {
|
|||
/** The key of the message: Last Access */
|
||||
public static final String LABELS_failure_url_last_access_time = "{labels.failure_url_last_access_time}";
|
||||
|
||||
/** The key of the message: Confirm */
|
||||
public static final String LABELS_failure_url_link_confirm = "{labels.failure_url_link_confirm}";
|
||||
/** The key of the message: List */
|
||||
public static final String LABELS_failure_url_link_list = "{labels.failure_url_link_list}";
|
||||
|
||||
/** The key of the message: Details */
|
||||
public static final String LABELS_failure_url_link_details = "{labels.failure_url_link_details}";
|
||||
|
||||
/** The key of the message: Delete */
|
||||
public static final String LABELS_failure_url_link_delete = "{labels.failure_url_link_delete}";
|
||||
|
||||
/** The key of the message: Delete All */
|
||||
public static final String LABELS_failure_url_delete_all_link = "{labels.failure_url_delete_all_link}";
|
||||
|
@ -2517,7 +2523,7 @@ public class FessLabels extends ActionMessages {
|
|||
public static final String LABELS_failure_url_error_count = "{labels.failure_url_error_count}";
|
||||
|
||||
/** The key of the message: Failure URL Details */
|
||||
public static final String LABELS_failure_url_title_confirm = "{labels.failure_url_title_confirm}";
|
||||
public static final String LABELS_failure_url_title_details = "{labels.failure_url_title_details}";
|
||||
|
||||
/** The key of the message: ID */
|
||||
public static final String LABELS_failure_url_id = "{labels.failure_url_id}";
|
||||
|
@ -2971,11 +2977,11 @@ public class FessLabels extends ActionMessages {
|
|||
/** The key of the message: Job Log List */
|
||||
public static final String LABELS_joblog_title_list = "{labels.joblog_title_list}";
|
||||
|
||||
/** The key of the message: Delete All */
|
||||
public static final String LABELS_joblog_delete_all_link = "{labels.joblog_delete_all_link}";
|
||||
/** The key of the message: Delete */
|
||||
public static final String LABELS_joblog_delete_link = "{labels.joblog_delete_link}";
|
||||
|
||||
/** The key of the message: Do you really want to delete all? */
|
||||
public static final String LABELS_joblog_delete_all_confirmation = "{labels.joblog_delete_all_confirmation}";
|
||||
/** The key of the message: Do you really want to delete? */
|
||||
public static final String LABELS_joblog_delete_confirmation = "{labels.joblog_delete_confirmation}";
|
||||
|
||||
/** The key of the message: Dictionary List */
|
||||
public static final String LABELS_dict_configuration = "{labels.dict_configuration}";
|
||||
|
|
|
@ -41,6 +41,7 @@ import org.codelibs.fess.helper.PathMappingHelper;
|
|||
import org.codelibs.fess.helper.QueryHelper;
|
||||
import org.codelibs.fess.helper.SambaHelper;
|
||||
import org.codelibs.fess.helper.SearchLogHelper;
|
||||
import org.codelibs.fess.helper.SuggestHelper;
|
||||
import org.codelibs.fess.helper.SystemHelper;
|
||||
import org.codelibs.fess.helper.UserAgentHelper;
|
||||
import org.codelibs.fess.helper.UserInfoHelper;
|
||||
|
@ -280,4 +281,7 @@ public final class ComponentUtil {
|
|||
return SingletonLaContainerFactory.getContainer().hasComponentDef(QUERY_HELPER);
|
||||
}
|
||||
|
||||
public static SuggestHelper getSuggestHelper() {
|
||||
return getComponent(SuggestHelper.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -240,7 +240,4 @@
|
|||
<arg>"Mozilla/5.0 (compatible; Fess/" + org.codelibs.fess.Constants.FESS_VERSION + "; +http://fess.codelibs.org/bot.html)"</arg>
|
||||
</component>
|
||||
|
||||
<component name="suggestHelper" class="org.codelibs.fess.helper.SuggestHelper">
|
||||
</component>
|
||||
|
||||
</components>
|
||||
|
|
|
@ -144,4 +144,6 @@
|
|||
<property name="roleSeparator">","</property>
|
||||
-->
|
||||
</component>
|
||||
<component name="suggestHelper" class="org.codelibs.fess.helper.SuggestHelper">
|
||||
</component>
|
||||
</components>
|
||||
|
|
|
@ -852,12 +852,14 @@ labels.failure_url_search_error_count=Error Count
|
|||
labels.failure_url_search_error_name=Type
|
||||
labels.failure_url_url=URL
|
||||
labels.failure_url_last_access_time=Last Access
|
||||
labels.failure_url_link_confirm=Confirm
|
||||
labels.failure_url_link_list=List
|
||||
labels.failure_url_link_details=Details
|
||||
labels.failure_url_link_delete=Delete
|
||||
labels.failure_url_delete_all_link=Delete All
|
||||
labels.failure_url_delete_all_confirmation=Do you really want to delete all?
|
||||
labels.failure_url_delete_all_cancel=Cancel
|
||||
labels.failure_url_error_count=Error Count
|
||||
labels.failure_url_title_confirm=Failure URL Details
|
||||
labels.failure_url_title_details=Failure URL Details
|
||||
labels.failure_url_id=ID
|
||||
labels.failure_url_thread_name=Thread Name
|
||||
labels.failure_url_error_name=Type
|
||||
|
@ -1012,8 +1014,8 @@ labels.joblog_target=Target
|
|||
labels.joblog_title_confirm=Confirm Job Log
|
||||
labels.joblog_title_details=Job Log Details
|
||||
labels.joblog_title_list=Job Log List
|
||||
labels.joblog_delete_all_link=Delete All
|
||||
labels.joblog_delete_all_confirmation=Do you really want to delete all?
|
||||
labels.joblog_delete_link=Delete
|
||||
labels.joblog_delete_confirmation=Do you really want to delete?
|
||||
labels.dict_configuration=Dictionary List
|
||||
labels.dict_list_title=Dictionary List
|
||||
labels.dict_list_link=Dictionaries
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary" name="search"
|
||||
value="<la:message key="labels.crawling_session_search" />">
|
||||
<i class="fa fa-search"></i>
|
||||
<la:message key="labels.crawling_session_search" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-secondary" name="reset"
|
||||
|
@ -66,131 +67,128 @@
|
|||
</la:form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="data-wrapper">
|
||||
<%-- List --%>
|
||||
<c:if test="${crawlingSessionPager.allRecordCount == 0}">
|
||||
<div class="row top10">
|
||||
<div class="col-sm-12">
|
||||
<p class="callout callout-info">
|
||||
<la:message key="labels.list_could_not_find_crud_table" />
|
||||
</p>
|
||||
</div>
|
||||
<%-- List --%>
|
||||
<c:if test="${crawlingSessionPager.allRecordCount == 0}">
|
||||
<div class="row top10">
|
||||
<div class="col-sm-12">
|
||||
<p class="callout callout-info">
|
||||
<la:message key="labels.list_could_not_find_crud_table" />
|
||||
</p>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${crawlingSessionPager.allRecordCount > 0}">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<table class="table table-bordered table-striped dataTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><la:message
|
||||
key="labels.crawling_session_session_id" /></th>
|
||||
<th><la:message
|
||||
key="labels.crawling_session_created_time" /></th>
|
||||
</div>
|
||||
</c:if>
|
||||
<c:if test="${crawlingSessionPager.allRecordCount > 0}">
|
||||
<div class="row top10">
|
||||
<div class="col-sm-12">
|
||||
<table class="table table-bordered table-striped dataTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><la:message
|
||||
key="labels.crawling_session_session_id" /></th>
|
||||
<th><la:message
|
||||
key="labels.crawling_session_created_time" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="data" varStatus="s"
|
||||
items="${crawlingSessionItems}">
|
||||
<tr class="${s.index % 2 == 0 ? 'row1' : 'row2'}"
|
||||
data-href="${contextPath}/admin/crawlingsession/details/4/${f:u(data.id)}">
|
||||
<td>${f:h(data.sessionId)}</td>
|
||||
<td><fmt:formatDate
|
||||
value="${fe:date(data.createdTime)}"
|
||||
pattern="yyyy-MM-dd'T'HH:mm:ss" /></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="data" varStatus="s"
|
||||
items="${crawlingSessionItems}">
|
||||
<tr class="${s.index % 2 == 0 ? 'row1' : 'row2'}"
|
||||
data-href="${contextPath}/admin/crawlingsession/details/4/${f:u(data.id)}">
|
||||
<td>${f:h(data.sessionId)}</td>
|
||||
<td><fmt:formatDate
|
||||
value="${fe:date(data.createdTime)}"
|
||||
pattern="yyyy-MM-dd'T'HH:mm:ss" /></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<%-- Paging Info --%>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">
|
||||
<span><la:message
|
||||
key="labels.pagination_page_guide_msg"
|
||||
arg0="${f:h(crawlingSessionPager.currentPageNumber)}"
|
||||
arg1="${f:h(crawlingSessionPager.allPageCount)}"
|
||||
arg2="${f:h(crawlingSessionPager.allRecordCount)}" /></span>
|
||||
</div>
|
||||
<div class="col-sm-7">
|
||||
<%-- Paging Navigation --%>
|
||||
<ul class="pagination pagination-sm no-margin pull-right">
|
||||
<c:if test="${crawlingSessionPager.existPrePage}">
|
||||
<li class="prev"><la:link
|
||||
href="list/${crawlingSessionPager.currentPageNumber - 1}">
|
||||
<la:message key="labels.crud_link_prev_page" />
|
||||
</la:link></li>
|
||||
</c:if>
|
||||
<c:if test="${!crawlingSessionPager.existPrePage}">
|
||||
<li class="prev disabled"><a href="#"><la:message
|
||||
key="labels.crud_link_prev_page" /></a></li>
|
||||
</c:if>
|
||||
<c:forEach var="p" varStatus="s"
|
||||
items="${crawlingSessionPager.pageNumberList}">
|
||||
<li
|
||||
<c:if test="${p == crawlingSessionPager.currentPageNumber}">class="active"</c:if>><la:link
|
||||
href="list/${p}">${p}</la:link></li>
|
||||
</c:forEach>
|
||||
<c:if test="${crawlingSessionPager.existNextPage}">
|
||||
<li class="next"><la:link
|
||||
href="list/${crawlingSessionPager.currentPageNumber + 1}">
|
||||
<la:message key="labels.crud_link_next_page" />
|
||||
</la:link></li>
|
||||
</c:if>
|
||||
<c:if test="${!crawlingSessionPager.existNextPage}">
|
||||
<li class="next disabled"><a href="#"><la:message
|
||||
key="labels.crud_link_next_page" /></a></li>
|
||||
</c:if>
|
||||
</ul>
|
||||
</div>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 center">
|
||||
<button type="button" class="btn btn-danger"
|
||||
data-toggle="modal" data-target="#confirmToDeleteAll">
|
||||
<la:message key="labels.crawling_session_delete_all_link" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal modal-danger fade" id="confirmToDeleteAll"
|
||||
tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<la:message
|
||||
key="labels.crawling_session_delete_all_link" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<la:message
|
||||
key="labels.crawling_session_delete_all_confirmation" />
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline pull-left"
|
||||
data-dismiss="modal">
|
||||
<la:message
|
||||
key="labels.crawling_session_delete_all_cancel" />
|
||||
</button>
|
||||
<la:link href="deleteall" styleClass="btn btn-outline"
|
||||
data-dismiss="modal">
|
||||
<la:message
|
||||
key="labels.crawling_session_delete_all_link" />
|
||||
</la:link>
|
||||
</div>
|
||||
</div>
|
||||
<%-- Paging Info --%>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">
|
||||
<span><la:message
|
||||
key="labels.pagination_page_guide_msg"
|
||||
arg0="${f:h(crawlingSessionPager.currentPageNumber)}"
|
||||
arg1="${f:h(crawlingSessionPager.allPageCount)}"
|
||||
arg2="${f:h(crawlingSessionPager.allRecordCount)}" /></span>
|
||||
</div>
|
||||
<div class="col-sm-7">
|
||||
<%-- Paging Navigation --%>
|
||||
<ul class="pagination pagination-sm no-margin pull-right">
|
||||
<c:if test="${crawlingSessionPager.existPrePage}">
|
||||
<li class="prev"><la:link
|
||||
href="list/${crawlingSessionPager.currentPageNumber - 1}">
|
||||
<la:message key="labels.crud_link_prev_page" />
|
||||
</la:link></li>
|
||||
</c:if>
|
||||
<c:if test="${!crawlingSessionPager.existPrePage}">
|
||||
<li class="prev disabled"><a href="#"><la:message
|
||||
key="labels.crud_link_prev_page" /></a></li>
|
||||
</c:if>
|
||||
<c:forEach var="p" varStatus="s"
|
||||
items="${crawlingSessionPager.pageNumberList}">
|
||||
<li
|
||||
<c:if test="${p == crawlingSessionPager.currentPageNumber}">class="active"</c:if>><la:link
|
||||
href="list/${p}">${p}</la:link></li>
|
||||
</c:forEach>
|
||||
<c:if test="${crawlingSessionPager.existNextPage}">
|
||||
<li class="next"><la:link
|
||||
href="list/${crawlingSessionPager.currentPageNumber + 1}">
|
||||
<la:message key="labels.crud_link_next_page" />
|
||||
</la:link></li>
|
||||
</c:if>
|
||||
<c:if test="${!crawlingSessionPager.existNextPage}">
|
||||
<li class="next disabled"><a href="#"><la:message
|
||||
key="labels.crud_link_next_page" /></a></li>
|
||||
</c:if>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 center">
|
||||
<button type="button" class="btn btn-danger"
|
||||
data-toggle="modal" data-target="#confirmToDeleteAll">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crawling_session_delete_all_link" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal modal-danger fade" id="confirmToDeleteAll"
|
||||
tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<la:message key="labels.crawling_session_delete_all_link" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<la:message
|
||||
key="labels.crawling_session_delete_all_confirmation" />
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline pull-left"
|
||||
data-dismiss="modal">
|
||||
<la:message
|
||||
key="labels.crawling_session_delete_all_cancel" />
|
||||
</button>
|
||||
<la:link href="deleteall" styleClass="btn btn-outline"
|
||||
data-dismiss="modal">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crawling_session_delete_all_link" />
|
||||
</la:link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<!-- /.data-wrapper -->
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
<!-- /.box-body -->
|
||||
</div>
|
||||
|
|
|
@ -31,10 +31,7 @@
|
|||
<la:hidden property="crudMode" />
|
||||
<c:if test="${crudMode==2 || crudMode==3 || crudMode==4}">
|
||||
<la:hidden property="id" />
|
||||
<la:hidden property="versionNo" />
|
||||
</c:if>
|
||||
<la:hidden property="createdBy" />
|
||||
<la:hidden property="createdTime" />
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div
|
||||
|
@ -52,7 +49,7 @@
|
|||
<la:message key="labels.failure_url_link_delete" />
|
||||
</c:if>
|
||||
<c:if test="${crudMode == 4}">
|
||||
<la:message key="labels.failure_url_link_confirm" />
|
||||
<la:message key="labels.failure_url_link_details" />
|
||||
</c:if>
|
||||
</h3>
|
||||
<div class="btn-group pull-right">
|
||||
|
@ -146,11 +143,44 @@
|
|||
value="<la:message key="labels.crud_button_back" />">
|
||||
<la:message key="labels.crud_button_back" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-danger"
|
||||
name="deletefromconfirm"
|
||||
<button type="button" class="btn btn-danger" name="delete"
|
||||
data-toggle="modal" data-target="#confirmToDelete"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
<div class="modal modal-danger fade" id="confirmToDelete"
|
||||
tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<la:message key="labels.crud_title_delete" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<la:message key="labels.crud_delete_confirmation" />
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline pull-left"
|
||||
data-dismiss="modal">
|
||||
<la:message key="labels.crud_button_cancel" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-outline btn-danger"
|
||||
name="delete"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -13,10 +13,7 @@
|
|||
<jsp:param name="menuCategoryType" value="log" />
|
||||
<jsp:param name="menuType" value="failureUrl" />
|
||||
</jsp:include>
|
||||
|
||||
<div class="content-wrapper">
|
||||
|
||||
<%-- Content Header --%>
|
||||
<section class="content-header">
|
||||
<h1>
|
||||
<la:message key="labels.failure_url_configuration" />
|
||||
|
@ -78,6 +75,7 @@
|
|||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="submit" class="btn btn-primary" name="search"
|
||||
value="<la:message key="labels.crud_button_search" />">
|
||||
<i class="fa fa-search"></i>
|
||||
<la:message key="labels.crud_button_search" />
|
||||
</button>
|
||||
<button type="reset" class="btn btn-secondary" name="reset"
|
||||
|
@ -101,7 +99,7 @@
|
|||
<c:if test="${failureUrlPager.allRecordCount > 0}">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<table class="bordered-table zebra-striped dataTable">
|
||||
<table class="table table-bordered table-striped dataTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><la:message key="labels.failure_url_url" /></th>
|
||||
|
@ -112,15 +110,12 @@
|
|||
<tbody>
|
||||
<c:forEach var="data" varStatus="s"
|
||||
items="${failureUrlItems}">
|
||||
<tr class="${s.index % 2 == 0 ? 'row1' : 'row2'}">
|
||||
<td><div style="width: 380px; overflow-x: auto;">${f:h(data.url)}</div></td>
|
||||
<td>${f:h(data.lastAccessTimeForList)}</td>
|
||||
<td style="overflow-x: auto;"><la:link
|
||||
href="details/4/${f:u(data.id)}">
|
||||
<la:message key="labels.failure_url_link_confirm" />
|
||||
</la:link> <la:link href="deletepage/3/${f:u(data.id)}">
|
||||
<la:message key="labels.crud_link_delete" />
|
||||
</la:link></td>
|
||||
<tr class="${s.index % 2 == 0 ? 'row1' : 'row2'}"
|
||||
data-href="details/4/${f:u(data.id)}">
|
||||
<td>${f:h(data.url)}</td>
|
||||
<td><fmt:formatDate
|
||||
value="${fe:date(data.lastAccessTime)}"
|
||||
pattern="yyyy-MM-dd'T'HH:mm:ss" /></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
|
@ -219,7 +214,6 @@
|
|||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<jsp:include page="/WEB-INF/view/common/admin/footer.jsp"></jsp:include>
|
||||
</div>
|
||||
<jsp:include page="/WEB-INF/view/common/admin/foot.jsp"></jsp:include>
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
<la:message key="labels.joblog_link_delete" />
|
||||
</c:if>
|
||||
<c:if test="${crudMode == 4}">
|
||||
<la:message key="labels.joblog_link_confirm" />
|
||||
<la:message key="labels.joblog_link_details" />
|
||||
</c:if>
|
||||
</h3>
|
||||
<div class="btn-group pull-right">
|
||||
|
|
|
@ -76,10 +76,13 @@
|
|||
</c:if> <c:if test="${data.endTime==null}">
|
||||
<la:message key="labels.none" />
|
||||
</c:if></td>
|
||||
<td style="overflow-x: auto;"><la:link
|
||||
<td><la:link styleClass="btn btn-xs btn-primary"
|
||||
href="details/4/${f:u(data.id)}">
|
||||
<i class="fa fa-check"></i>
|
||||
<la:message key="labels.joblog_link_details" />
|
||||
</la:link> <la:link href="deletepage/3/${f:u(data.id)}">
|
||||
</la:link> <la:link styleClass="btn btn-xs btn-danger"
|
||||
href="deletepage/3/${f:u(data.id)}">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.joblog_link_delete" />
|
||||
</la:link></td>
|
||||
</tr>
|
||||
|
|
|
@ -107,6 +107,20 @@
|
|||
<!-- /.box-body -->
|
||||
<div class="box-footer">
|
||||
<jsp:include page="/WEB-INF/view/common/admin/crud/buttons.jsp"></jsp:include>
|
||||
<c:if test="${running}">
|
||||
<button type="submit" class="btn btn-danger" name="stop"
|
||||
value="<la:message key="labels.scheduledjob_button_stop" />">
|
||||
<i class="fa fa-stop"></i>
|
||||
<la:message key="labels.scheduledjob_button_stop" />
|
||||
</button>
|
||||
</c:if>
|
||||
<c:if test="${!running}">
|
||||
<button type="submit" class="btn btn-success" name="start"
|
||||
value="<la:message key="labels.scheduledjob_button_start" />">
|
||||
<i class="fa fa-play-circle"></i>
|
||||
<la:message key="labels.scheduledjob_button_start" />
|
||||
</button>
|
||||
</c:if>
|
||||
</div>
|
||||
<!-- /.box-footer -->
|
||||
</div>
|
||||
|
|
|
@ -13,10 +13,7 @@
|
|||
<jsp:param name="menuCategoryType" value="log" />
|
||||
<jsp:param name="menuType" value="searchList" />
|
||||
</jsp:include>
|
||||
|
||||
<div class="content-wrapper">
|
||||
|
||||
<%-- Content Header --%>
|
||||
<section class="content-header">
|
||||
<h1>
|
||||
<la:message key="labels.search_list_configuration" />
|
||||
|
@ -27,7 +24,6 @@
|
|||
</la:link></li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
|
@ -57,6 +53,7 @@
|
|||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary" name="search"
|
||||
value="<la:message key="labels.search"/>">
|
||||
<i class="fa fa-search"></i>
|
||||
<la:message key="labels.search" />
|
||||
</button>
|
||||
</div>
|
||||
|
@ -124,8 +121,7 @@
|
|||
<%-- TODO: doc_id --%>
|
||||
<la:hidden property="docId"
|
||||
value="${f:u(doc.doc_id)}" />
|
||||
<la:hidden property="query"
|
||||
value="${f:u(query)}" />
|
||||
<la:hidden property="query" value="${f:u(query)}" />
|
||||
<button type="submit"
|
||||
class="btn btn-outline btn-danger">
|
||||
<i class="fa fa-trash"></i>
|
||||
|
|
|
@ -2,33 +2,40 @@
|
|||
<c:if test="${crudMode == 1}">
|
||||
<button type="submit" class="btn" name="list"
|
||||
value="<la:message key="labels.crud_button_back" />">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
<la:message key="labels.crud_button_back" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-success" name="create"
|
||||
value="<la:message key="labels.crud_button_create" />">
|
||||
<i class="fa fa-plus"></i>
|
||||
<la:message key="labels.crud_button_create" />
|
||||
</button>
|
||||
</c:if>
|
||||
<c:if test="${crudMode == 2}">
|
||||
<button type="submit" class="btn" name="edit" value="back">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
<la:message key="labels.crud_button_back" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-warning" name="update"
|
||||
value="<la:message key="labels.crud_button_update" />">
|
||||
<i class="fa fa-pencil"></i>
|
||||
<la:message key="labels.crud_button_update" />
|
||||
</button>
|
||||
</c:if>
|
||||
<c:if test="${crudMode == 4}">
|
||||
<button type="submit" class="btn" name="list" value="back">
|
||||
<i class="fa fa-arrow-circle-left"></i>
|
||||
<la:message key="labels.crud_button_back" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-warning" name="edit"
|
||||
value="<la:message key="labels.crud_button_edit" />">
|
||||
<i class="fa fa-pencil"></i>
|
||||
<la:message key="labels.crud_button_edit" />
|
||||
</button>
|
||||
<button type="button" class="btn btn-danger" name="delete"
|
||||
data-toggle="modal" data-target="#confirmToDelete"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
<div class="modal modal-danger fade" id="confirmToDelete" tabindex="-1"
|
||||
|
@ -57,6 +64,7 @@
|
|||
<button type="submit" class="btn btn-outline btn-danger"
|
||||
name="delete"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -20,11 +20,13 @@
|
|||
<c:choose>
|
||||
<c:when test="${crudMode == null}">
|
||||
<la:link href="createnew" styleClass="btn btn-success btn-xs">
|
||||
<i class="fa fa-plus"></i>
|
||||
<la:message key="labels.web_crawling_link_create_new" />
|
||||
</la:link>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<la:link href="/admin/webconfig" styleClass="btn btn-primary btn-xs">
|
||||
<i class="fa fa-th-list"></i>
|
||||
<la:message key="labels.crud_link_list" />
|
||||
</la:link>
|
||||
</c:otherwise>
|
||||
|
|
|
@ -20,8 +20,8 @@ $(function(){
|
|||
|
||||
$('#contentQuery').suggestor( {
|
||||
ajaxinfo: {
|
||||
url: contextPath + '/suggest', // TODO rename
|
||||
fn: 'keyword',
|
||||
url: contextPath + '/suggest',
|
||||
fn: '_default',
|
||||
num: 10
|
||||
},
|
||||
boxCssInfo: {
|
||||
|
|
|
@ -173,8 +173,8 @@ $(function(){
|
|||
|
||||
$('#query').suggestor( {
|
||||
ajaxinfo: {
|
||||
url: contextPath + '/json',
|
||||
fn: 'content',
|
||||
url: contextPath + '/suggest',
|
||||
fn: '_default',
|
||||
num: 10
|
||||
},
|
||||
boxCssInfo: {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;(function($){
|
||||
|
||||
$.fn.suggestor = function(setting) {
|
||||
|
||||
|
||||
var $boxElement;
|
||||
var $textArea;
|
||||
var inputText = "";
|
||||
|
@ -11,7 +11,7 @@ $.fn.suggestor = function(setting) {
|
|||
var isMouseHover = false;
|
||||
var started = false;
|
||||
var interval = 5;
|
||||
|
||||
|
||||
var settingMinTerm = 1;
|
||||
var settingAjaxInfo;
|
||||
var settingAdjustWidthVal;
|
||||
|
@ -19,15 +19,15 @@ $.fn.suggestor = function(setting) {
|
|||
var listSelectedCssInfo;
|
||||
var listDeselectedCssInfo;
|
||||
var boxCssInfo;
|
||||
|
||||
|
||||
var suggestingSts = false;
|
||||
|
||||
|
||||
var suggestor = {
|
||||
init: function($element, setting) {
|
||||
suggestingSts = false;
|
||||
$boxElement = $("<div/>");
|
||||
$boxElement.addClass("suggestorBox");
|
||||
|
||||
|
||||
//style sheet
|
||||
$boxElement.css("display","none");
|
||||
$boxElement.css("position","absolute");
|
||||
|
@ -42,14 +42,14 @@ $.fn.suggestor = function(setting) {
|
|||
} else {
|
||||
$boxElement.css(setting.boxCssInfo);
|
||||
}
|
||||
|
||||
|
||||
$textArea = $element;
|
||||
$textArea.attr("autocomplete","off");
|
||||
|
||||
|
||||
isFocusList = false;
|
||||
inputText = $textArea.val();
|
||||
|
||||
|
||||
|
||||
|
||||
//設定
|
||||
settingAjaxInfo = setting.ajaxinfo;
|
||||
settingMinTerm = setting.minturm;
|
||||
|
@ -57,66 +57,71 @@ $.fn.suggestor = function(setting) {
|
|||
listSelectedCssInfo = setting.listSelectedCssInfo;
|
||||
listDeselectedCssInfo = setting.listDeselectedCssInfo;
|
||||
settingAdjustWidthVal = setting.adjustWidthVal;
|
||||
|
||||
|
||||
boxCssInfo = setting.boxCssInfo;
|
||||
|
||||
|
||||
|
||||
|
||||
$boxElement.hover(function() {
|
||||
isMouseHover = true;
|
||||
}, function() {
|
||||
isMouseHover = false;
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
//ポジション設定
|
||||
this.resize();
|
||||
var suggestor = this;
|
||||
$(window).resize(function() {
|
||||
suggestor.resize();
|
||||
});
|
||||
|
||||
|
||||
$("body").append($boxElement);
|
||||
},
|
||||
|
||||
|
||||
suggest: function() {
|
||||
suggestingSts = true;
|
||||
|
||||
|
||||
//ポジション設定
|
||||
this.resize();
|
||||
|
||||
|
||||
var suggestor = this;
|
||||
inputText = $textArea.val();
|
||||
|
||||
|
||||
listNum = 0;
|
||||
listSelNum = 0;
|
||||
|
||||
|
||||
if(inputText.length < settingMinTerm) {
|
||||
$boxElement.css("display","none");
|
||||
suggestingSts = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: settingAjaxInfo.url,
|
||||
type:"get",
|
||||
dataType: "jsonp",
|
||||
cache : false,
|
||||
data:{ q: $textArea.val(),
|
||||
data:{ query: $textArea.val(),
|
||||
fields: settingAjaxInfo.fn,
|
||||
num: settingAjaxInfo.num * 2
|
||||
}
|
||||
}).done(function(obj) { suggestor.createAutoCompleteList(obj); }).fail(function(a,obj,b) { suggestingSts=false; return; });
|
||||
|
||||
},
|
||||
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
createAutoCompleteList: function(obj) {
|
||||
var hits = obj.hits;
|
||||
if(obj.response.status != 0) {
|
||||
$boxElement.css("display","none");
|
||||
return;
|
||||
}
|
||||
|
||||
var hits = obj.response.result.hits;
|
||||
var suggestor = this;
|
||||
var addCount = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
listNum = 0;
|
||||
if(typeof hits !== "undefined") {
|
||||
var reslist = new Array();
|
||||
|
@ -127,11 +132,11 @@ $.fn.suggestor = function(setting) {
|
|||
$olEle.css("list-style","none");
|
||||
$olEle.css("padding","0");
|
||||
$olEle.css("margin","2px");
|
||||
|
||||
|
||||
for(var i=0;i<reslist.length && listNum < settingAjaxInfo.num;i++) {
|
||||
var str = reslist[i];
|
||||
var chkCorrectWord = true;
|
||||
|
||||
|
||||
/*
|
||||
//suggestionの子要素かチェック
|
||||
var parentEle = $(reslist[i]).closest("arr");
|
||||
|
@ -141,7 +146,7 @@ $.fn.suggestor = function(setting) {
|
|||
continue;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
//すでに同じ文字が表示されてないかチェック。ゴミ抜き
|
||||
if(str === $textArea.val()) {
|
||||
chkCorrectWord = false;
|
||||
|
@ -155,7 +160,7 @@ $.fn.suggestor = function(setting) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(chkCorrectWord) {
|
||||
var $liEle = $("<li/>");
|
||||
$liEle.html(str);
|
||||
|
@ -203,14 +208,14 @@ $.fn.suggestor = function(setting) {
|
|||
listSelNum = 0
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$liEle.css("padding","2px");
|
||||
|
||||
|
||||
$olEle.append($liEle);
|
||||
listNum++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(listNum>0 && $textArea.val().length >= settingMinTerm) {
|
||||
$boxElement.html("");
|
||||
$boxElement.append($olEle);
|
||||
|
@ -223,15 +228,15 @@ $.fn.suggestor = function(setting) {
|
|||
}
|
||||
//ポジション設定
|
||||
this.resize();
|
||||
|
||||
|
||||
suggestingSts = false;
|
||||
},
|
||||
|
||||
|
||||
selectlist: function(direction) {
|
||||
if($boxElement.css("display") == "none") {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(direction == "down") {
|
||||
listSelNum++;
|
||||
} else if(direction == "up") {
|
||||
|
@ -239,15 +244,15 @@ $.fn.suggestor = function(setting) {
|
|||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
isFocusList = true;
|
||||
|
||||
|
||||
if(listSelNum < 0){
|
||||
listSelNum = listNum;
|
||||
} else if(listSelNum > listNum) {
|
||||
listSelNum = 0;
|
||||
}
|
||||
|
||||
|
||||
var a = $boxElement.children("ol").children("li");
|
||||
$boxElement.children("ol").children("li").each(function(i){
|
||||
if(i == (listSelNum-1)) {
|
||||
|
@ -272,20 +277,20 @@ $.fn.suggestor = function(setting) {
|
|||
if(listSelNum == 0) {
|
||||
$textArea.val(inputText);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
fixList: function() {
|
||||
if(listSelNum > 0) {
|
||||
$textArea.val($($boxElement.children("ol").children("li").get(listSelNum-1)).html());
|
||||
}
|
||||
inputText = $textArea.val();
|
||||
|
||||
|
||||
isFocusList = false;
|
||||
$boxElement.css("display","none");
|
||||
listNum = 0;
|
||||
},
|
||||
|
||||
|
||||
resize: function() {
|
||||
$boxElement.css("top",$textArea.offset().top + $textArea.height() + 6);
|
||||
$boxElement.css("left",$textArea.offset().left);
|
||||
|
@ -296,9 +301,9 @@ $.fn.suggestor = function(setting) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
suggestor.init($(this), setting);
|
||||
|
||||
|
||||
$(this).keydown( function(e){
|
||||
if( ((e.keyCode >= 48) && (e.keyCode <= 90))
|
||||
|| ((e.keyCode >= 96) && (e.keyCode <= 105))
|
||||
|
@ -324,7 +329,7 @@ $.fn.suggestor = function(setting) {
|
|||
if(isFocusList) {
|
||||
suggestor.fixList();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
$(this).keyup( function(e){
|
||||
if( ((e.keyCode >= 48) && (e.keyCode <= 90))
|
||||
|
@ -350,7 +355,7 @@ $.fn.suggestor = function(setting) {
|
|||
suggestor.fixList();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//テキストエリア監視
|
||||
setInterval( function() {
|
||||
if(interval < 5) {
|
||||
|
@ -365,6 +370,6 @@ $.fn.suggestor = function(setting) {
|
|||
}
|
||||
}
|
||||
}, 100);
|
||||
|
||||
|
||||
}
|
||||
})(jQuery);
|
||||
|
|
Loading…
Add table
Reference in a new issue