001
014
015 package com.liferay.portlet.journalcontentsearch.util;
016
017 import com.liferay.portal.kernel.search.Document;
018 import com.liferay.portal.kernel.search.Field;
019 import com.liferay.portal.kernel.search.Hits;
020 import com.liferay.portal.kernel.util.GetterUtil;
021 import com.liferay.portal.kernel.util.Time;
022 import com.liferay.portlet.journal.service.JournalContentSearchLocalServiceUtil;
023
024 import java.util.ArrayList;
025 import java.util.List;
026
027
031 public class ContentHits {
032
033 public boolean isShowListed() {
034 return _showListed;
035 }
036
037 public void recordHits(
038 Hits hits, long groupId, boolean privateLayout, int start, int end)
039 throws Exception {
040
041
042
043 List<Document> docs = new ArrayList<Document>();
044 List<Float> scores = new ArrayList<Float>();
045 List<String> snippets = new ArrayList<String>();
046
047 for (int i = 0; i < hits.getLength(); i++) {
048 Document doc = hits.doc(i);
049
050 long articleGroupId = GetterUtil.getLong(doc.get(Field.GROUP_ID));
051 String articleId = doc.get("articleId");
052
053 if (JournalContentSearchLocalServiceUtil.getLayoutIdsCount(
054 groupId, privateLayout, articleId) > 0) {
055
056 docs.add(hits.doc(i));
057 scores.add(hits.score(i));
058 snippets.add(hits.snippet(i));
059 }
060 else if (!isShowListed() && (articleGroupId == groupId)) {
061 docs.add(hits.doc(i));
062 scores.add(hits.score(i));
063 snippets.add(hits.snippet(i));
064 }
065 }
066
067 int length = docs.size();
068
069 hits.setLength(length);
070
071 if (end > length) {
072 end = length;
073 }
074
075 docs = docs.subList(start, end);
076 scores = scores.subList(start, end);
077 snippets = snippets.subList(start, end);
078
079 hits.setDocs(docs.toArray(new Document[docs.size()]));
080 hits.setScores(scores.toArray(new Float[docs.size()]));
081 hits.setSnippets(snippets.toArray(new String[docs.size()]));
082
083 hits.setSearchTime(
084 (float)(System.currentTimeMillis() - hits.getStart()) /
085 Time.SECOND);
086 }
087
088 public void setShowListed(boolean showListed) {
089 _showListed = showListed;
090 }
091
092 private boolean _showListed = true;
093
094 }