From: Vásáry Dániel Date: Mon, 19 Mar 2018 15:59:32 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=4b6bc41331390252829f2529ecc342c190ff660d;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30979 --- diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index c29446f8..b2fc4826 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -31,7 +31,7 @@ "template": "import-statistics.xml", "cronexpression": "0 0 0/1 1/1 * ? *", "parameters": [ - {"name": "daysBeforeNow", "value": 6, "type": "java.lang.Integer"} + {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"} ] }, { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java index e5e88c40..4856bf15 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java @@ -63,6 +63,21 @@ public class ImportStatisticsStep extends JobStep { return result; } + private BasicDBObject createStory(BasicDBObject story, String label, String objId, long duration, long rdCount, long sfCount, long parentStoryId, + String reporters) { + BasicDBObject raw = new BasicDBObject(); + raw.put(IOctopusAPI.ID, NoSQLUtils.asLong(story, IOctopusAPI.ID)); + raw.put(IOctopusAPI.NAME, NoSQLUtils.asString(story, IOctopusAPI.NAME)); + raw.put(IOctopusAPI.PARENT_STORY_ID, parentStoryId); + raw.put(IOctopusAPI.REPORTERS, reporters); + raw.put(IOctopusAPI.OBJ_ID, objId); + raw.put(IOctopusAPI.LABEL, label); + raw.put("duration", duration); + raw.put(IOctopusAPI.REF_RUNDOWN, rdCount); + raw.put(IOctopusAPI.REF_STORYFOLDER, sfCount); + return raw; + } + @StepEntry public Object[] execute(int daysBeforeNow, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { marker = jobRuntime.getMarker(); @@ -92,93 +107,7 @@ public class ImportStatisticsStep extends JobStep { stories.putAll(folderStories); logger.info(jobRuntime.getMarker(), "Gyűjtőkben megtalálható anyagok száma {}", stories.size()); - BasicDBObject planStat = new BasicDBObject(); - - BasicDBObject typeStat = new BasicDBObject(); - BasicDBObject typeStatRawData = new BasicDBObject(); - typeStat.put("rawData", typeStatRawData); - long sumDuration = 0; - long sumIngestDuration = 0; - long sumIngestCount = 0; - long sumArchiveDuration = 0; - long sumArchiveCount = 0; - - List rawData = new ArrayList<>(); - for (BasicDBObject story : stories.values()) { - List mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS); - for (BasicDBObject mos : mosObjects) { - String label = NoSQLUtils.asString(mos, IOctopusAPI.LABEL); - long duration = NoSQLUtils.asLong(mos, "duration"); - long rdCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_RUNDOWN); - long sfCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_STORYFOLDER); - long parentStoryId = NoSQLUtils.asLong(story, IOctopusAPI.PARENT_STORY_ID); - - BasicDBObject raw = new BasicDBObject(); - raw.put(IOctopusAPI.ID, NoSQLUtils.asLong(story, IOctopusAPI.ID)); - raw.put(IOctopusAPI.NAME, NoSQLUtils.asString(story, IOctopusAPI.NAME)); - raw.put(IOctopusAPI.PARENT_STORY_ID, parentStoryId); - raw.put(IOctopusAPI.REPORTERS, NoSQLUtils.asString(story, IOctopusAPI.REPORTERS)); - raw.put(IOctopusAPI.OBJ_ID, NoSQLUtils.asString(mos, IOctopusAPI.OBJ_ID)); - raw.put(IOctopusAPI.LABEL, label); - raw.put("duration", duration); - raw.put(IOctopusAPI.REF_RUNDOWN, rdCount); - raw.put(IOctopusAPI.REF_STORYFOLDER, sfCount); - - long ingestCount = 0; - long ingestDuration = 0; - BasicDBObject ingestInfo = manager.getIngestInfo(scheduledDate, String.valueOf(parentStoryId)); - if (ingestInfo != null) { - ingestCount = ingestInfo.getLong("count"); - ingestDuration = ingestInfo.getLong("duration"); - raw.put("ingest_count", ingestCount); - raw.put("ingest_duration", ingestDuration); - sumIngestCount += ingestCount; - sumIngestDuration += ingestDuration; - } - - long archiveCount = 0; - long archiveDuration = 0; - BasicDBObject archiveInfo = manager.getArchiveInfo(scheduledDate, String.valueOf(parentStoryId)); - if (archiveInfo != null) { - archiveCount = archiveInfo.getLong("count"); - archiveDuration = archiveInfo.getLong("duration"); - raw.put("archive_count", archiveCount); - raw.put("archive_duration", archiveDuration); - sumArchiveCount += archiveCount; - sumArchiveDuration += archiveDuration; - } - - rawData.add(raw); - - //planStat - if (sfCount > 0 && rdCount == 0) { - NoSQLUtils.addLong(planStat, "skip_count", 1); - NoSQLUtils.addLong(planStat, "skip_duration", duration); - } - if (rdCount > 0) { - NoSQLUtils.addLong(planStat, "onair_count", 1); - NoSQLUtils.addLong(planStat, "onair_duration", duration); - - //typeStat - sumDuration += duration; - if (typeStatRawData.containsKey(label)) { - BasicDBObject dbo = NoSQLUtils.asDBObject(typeStatRawData, label); - dbo.put("count", dbo.getInt("count") + 1); - dbo.put("duration", dbo.getInt("duration") + duration); - } else - typeStatRawData.put(label, new BasicDBObject("count", 1).append("duration", duration)); - } - } - } - - planStat.put("all_count", rawData.size()); - planStat.put("all_duration", sumDuration); - planStat.put("archive_count", sumArchiveCount); - planStat.put("archive_duration", sumArchiveDuration); - planStat.put("ingest_count", sumIngestCount); - planStat.put("ingest_duration", sumIngestDuration); - - store(scheduledDate, rawData, typeStat, planStat); + storeStories(scheduledDate, stories); return null; } @@ -281,7 +210,7 @@ public class ImportStatisticsStep extends JobStep { String reporterNames = ""; if (reporters != null && reporters.size() > 0) { for (BasicDBObject reporter : reporters) { - String userName = NoSQLUtils.asString(reporter, "userName"); + String userName = NoSQLUtils.asString(reporter, "longName"); if (userName != null) { if (reporterNames.length() > 0) reporterNames += ", "; @@ -296,7 +225,7 @@ public class ImportStatisticsStep extends JobStep { return result; } - private void store(Calendar scheduledDate, List stories, BasicDBObject typeStat, BasicDBObject planStat) { + private void store(Calendar scheduledDate, List stories, BasicDBObject typeStat, BasicDBObject planStat, BasicDBObject reporterStat) { BasicDBObject dailyHistory = new BasicDBObject(); dailyHistory.put("dateTime", scheduledDate.getTime()); BasicDBList list = new BasicDBList(); @@ -306,10 +235,103 @@ public class ImportStatisticsStep extends JobStep { } dailyHistory.put("typeStat", typeStat); dailyHistory.put("planStat", planStat); + dailyHistory.put("reporterStat", reporterStat); DBCollection collection = db.getCollection("daily_news_history"); collection.remove(new BasicDBObject("dateTime", scheduledDate.getTime())); collection.save(dailyHistory); } + private void storeStories(Calendar scheduledDate, Map stories) { + BasicDBObject planStat = new BasicDBObject(); + BasicDBObject typeStat = new BasicDBObject(); + BasicDBObject reporterStat = new BasicDBObject(); + + List rawData = new ArrayList<>(); + List processed = new ArrayList<>(); + + for (BasicDBObject story : stories.values()) { + List mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS); + for (BasicDBObject mos : mosObjects) { + String objId = NoSQLUtils.asString(mos, IOctopusAPI.OBJ_ID); + long parentStoryId = NoSQLUtils.asLong(story, IOctopusAPI.PARENT_STORY_ID); + String key = String.format("%d-%s", parentStoryId, objId); + if (processed.contains(key)) + continue; + processed.add(key); + + String label = NoSQLUtils.asString(mos, IOctopusAPI.LABEL); + long duration = NoSQLUtils.asLong(mos, "duration"); + long rdCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_RUNDOWN); + long sfCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_STORYFOLDER); + String reporters = NoSQLUtils.asString(story, IOctopusAPI.REPORTERS); + + BasicDBObject raw = createStory(story, label, objId, duration, rdCount, sfCount, parentStoryId, reporters); + rawData.add(raw); + + NoSQLUtils.addLong(planStat, "all_count", 1); + NoSQLUtils.addLong(planStat, "all_duration", duration); + + BasicDBObject perTypeStat = NoSQLUtils.asDBObjectOrCreate(typeStat, label); + NoSQLUtils.addLong(perTypeStat, "all_count", 1); + NoSQLUtils.addLong(perTypeStat, "all_duration", duration); + + BasicDBObject perReporterStat = NoSQLUtils.asDBObjectOrCreate(reporterStat, reporters); + NoSQLUtils.addLong(perReporterStat, "all_count", 1); + NoSQLUtils.addLong(perReporterStat, "all_duration", duration); + + BasicDBObject ingestInfo = manager.getIngestInfo(scheduledDate, String.valueOf(parentStoryId)); + if (ingestInfo != null) { + long ingestCount = ingestInfo.getLong("count"); + long ingestDuration = ingestInfo.getLong("duration"); + raw.put("ingest_count", ingestCount); + raw.put("ingest_duration", ingestDuration); + NoSQLUtils.addLong(planStat, "ingest_count", ingestCount); + NoSQLUtils.addLong(planStat, "ingest_duration", ingestDuration); + NoSQLUtils.addLong(perTypeStat, "ingest_count", ingestCount); + NoSQLUtils.addLong(perTypeStat, "ingest_duration", ingestDuration); + NoSQLUtils.addLong(perReporterStat, "ingest_count", ingestCount); + NoSQLUtils.addLong(perReporterStat, "ingest_duration", ingestDuration); + } + + BasicDBObject archiveInfo = manager.getArchiveInfo(scheduledDate, String.valueOf(parentStoryId)); + if (archiveInfo != null) { + long archiveCount = archiveInfo.getLong("count"); + long archiveDuration = archiveInfo.getLong("duration"); + raw.put("archive_count", archiveCount); + raw.put("archive_duration", archiveDuration); + NoSQLUtils.addLong(planStat, "archive_count", archiveCount); + NoSQLUtils.addLong(planStat, "archive_duration", archiveDuration); + NoSQLUtils.addLong(perTypeStat, "archive_count", archiveCount); + NoSQLUtils.addLong(perTypeStat, "archive_duration", archiveDuration); + NoSQLUtils.addLong(perReporterStat, "archive_count", archiveCount); + NoSQLUtils.addLong(perReporterStat, "archive_duration", archiveDuration); + } + + //skipped + if (sfCount > 0 && rdCount == 0) { + NoSQLUtils.addLong(planStat, "skip_count", 1); + NoSQLUtils.addLong(planStat, "skip_duration", duration); + NoSQLUtils.addLong(perTypeStat, "skip_count", 1); + NoSQLUtils.addLong(perTypeStat, "skip_duration", duration); + NoSQLUtils.addLong(perReporterStat, "skip_count", 1); + NoSQLUtils.addLong(perReporterStat, "skip_duration", duration); + } + + //onair + if (rdCount > 0) { + NoSQLUtils.addLong(planStat, "onair_count", 1); + NoSQLUtils.addLong(planStat, "onair_duration", duration); + NoSQLUtils.addLong(perTypeStat, "onair_count", 1); + NoSQLUtils.addLong(perTypeStat, "onair_duration", duration); + NoSQLUtils.addLong(perReporterStat, "onair_count", 1); + NoSQLUtils.addLong(perReporterStat, "onair_duration", duration); + } + + } + } + + store(scheduledDate, rawData, typeStat, planStat, reporterStat); + } + } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/RecordingsArchiveItemBuilderStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/RecordingsArchiveItemBuilderStep.java index daf8c1e0..2e0bfd0e 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/RecordingsArchiveItemBuilderStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/RecordingsArchiveItemBuilderStep.java @@ -115,12 +115,12 @@ public class RecordingsArchiveItemBuilderStep extends JobStep { public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { FileVisitResult result = FileVisitResult.SKIP_SUBTREE; - if (dir.equals(Paths.get(sourcePath)) || "HIRADO".equals(dir.toFile().getName().toUpperCase()) - || "NAPIAKT".equals(dir.toFile().getName().toUpperCase())) + if (dir.equals(Paths.get(sourcePath)) || "2017".equals(dir.toFile().getName().toUpperCase()) + || "2018".equals(dir.toFile().getName().toUpperCase())) result = FileVisitResult.CONTINUE; else { - if ("HIRADO".equals(dir.getParent().toFile().getName().toUpperCase()) - || "NAPIAKT".equals(dir.getParent().toFile().getName().toUpperCase())) { + if ("2017".equals(dir.getParent().toFile().getName().toUpperCase()) + || "2018".equals(dir.getParent().toFile().getName().toUpperCase())) { try { startDateformat.parse(dir.toFile().getName()); result = FileVisitResult.CONTINUE; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java index 20d0ec55..4938a66a 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java @@ -41,6 +41,15 @@ public class NoSQLUtils { return result; } + public static BasicDBObject asDBObjectOrCreate(BasicDBObject obj, String name) { + BasicDBObject result = asDBObject(obj, name); + if (result == null) { + result = new BasicDBObject(); + obj.put(name, result); + } + return result; + } + public static List asList(BasicDBList obj) { List result = null; if (obj != null && obj.size() > 0) diff --git a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java index 5956ab40..2b59abb5 100644 --- a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java +++ b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java @@ -295,6 +295,12 @@ public class OctopusDataMinerTest { assertNotNull(stepClass); } + // @Test + // public void test7() throws Exception { + // String x = "aaaassss"; + // System.out.println(x.substring(0, 200)); + // } + @Test public void testClient() { ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.28/services/rest/octopus/"); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java index 75db953f..e6e0d5db 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java @@ -3,6 +3,7 @@ package user.jobengine.db; public class ArchivedMedia { private Item item; private Media media; + private String relevant; public Item getItem() { return item; @@ -12,6 +13,10 @@ public class ArchivedMedia { return media; } + public String getRelevant() { + return relevant; + } + public void setItem(Item item) { this.item = item; } @@ -20,4 +25,8 @@ public class ArchivedMedia { this.media = media; } + public void setRelevant(String relevant) { + this.relevant = relevant; + } + } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java index 7ac032f9..0a24ad30 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java @@ -347,7 +347,7 @@ public interface IItemManager extends IEntityPersister { */ IEntityBase retrieveCached(Class baseClass, Object key); - SearchResult search(String criteria, int fromResult, int toResult); + SearchResult search(String criteria, List searchFilters, int fromResult, int toResult); /** * A bemeneti paraméterként kapott keresési feltételeknek megfelelő Anyagokat lekéri az adatbázisból és SearchResult objektumba csomagolva visszatér. diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java index 8357e775..4a248c2e 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java @@ -3,6 +3,7 @@ package user.jobengine.db; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Formatter; import java.util.List; @@ -57,6 +58,45 @@ public class ItemDAOEx { return resultQuery.toString(); } + private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, List typeIDs) throws SQLException { + StringBuilder typeCriteria = new StringBuilder(); + if (typeIDs != null) { + typeCriteria.append("("); + for (int i = 0; i < typeIDs.size(); i++) { + typeCriteria.append(typeIDs.get(i)); + if (i < typeIDs.size() - 1) + typeCriteria.append(","); + } + typeCriteria.append(")"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT * FROM (("); + sql.append("SELECT DISTINCT m.id, m.title FROM ITEM i, MEDIA m, MEDIAFILE mf"); + sql.append(" WHERE ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1)) AND m.itemid = i.id AND mf.mediaid = m.id"); + if (typeIDs != null) + sql.append(" AND m.itemtypeid IN ").append(typeCriteria.toString()); + sql.append(")UNION("); + sql.append("SELECT DISTINCT m2.id,m2.title FROM ITEM i2, MEDIA m2, MEDIAFILE mf2"); + sql.append(" WHERE ((CONTAINS(m2.title, ?) >= 1) OR (CONTAINS(m2.description, ?) >= 1)) AND m2.itemid = i2.id AND mf2.mediaid = m2.id"); + if (typeIDs != null) + sql.append(" AND m2.itemtypeid IN ").append(typeCriteria.toString()); + sql.append(")UNION("); + sql.append("SELECT DISTINCT m3.id,m3.title FROM ITEM i3, MEDIA m3, MEDIAFILE mf3"); + sql.append(" WHERE (CONTAINS(mf3.houseId, ?) >= 1) AND m3.itemid = i3.id AND mf3.mediaid = m3.id"); + if (typeIDs != null) + sql.append(" AND m3.itemtypeid IN ").append(typeCriteria.toString()); + sql.append(")) ORDER BY title"); + + String query = sql.toString(); + PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); + + for (int s = 1; s <= 5; s++) { + st.setString(s, criteria); + } + return st; + } + private List getResultHeaders(Connection connection, QueryObject queryObject, String innerQuery) { List results = new ArrayList(); String typeQuery; @@ -103,6 +143,21 @@ public class ItemDAOEx { return results; } + private List getTypeIDs(List searchFilters) { + List result = null; + if (searchFilters != null) { + for (String typeName : searchFilters) { + ItemType itemType = manager.getItemType(typeName); + if (itemType == null) + continue; + if (result == null) + result = new ArrayList<>(); + result.add(String.valueOf(itemType.getId())); + } + } + return result; + } + public List getUntranscodedMedias() { List result = null; @@ -322,33 +377,18 @@ public class ItemDAOEx { return result; } - public SearchResult searchArchivedMedia(String criteria, int fromResult, int toResult) { + public SearchResult searchArchivedMedia(String criteria, List searchFilters, int fromResult, int toResult) { SearchResult result = new SearchResult<>(); + List typeIDs = getTypeIDs(searchFilters); + ResultSet rs = null; PreparedStatement st = null; DefaultContext context = manager.getDbContext(); Connection connection = context.getConnection(); - try { - StringBuffer sql = new StringBuffer(); - sql.append("SELECT * FROM (("); - sql.append("SELECT DISTINCT m.id,m.title FROM ITEM i, MEDIA m, MEDIAFILE mf"); - sql.append(" WHERE ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1)) AND m.itemid = i.id AND mf.mediaid = m.id"); - sql.append(")UNION("); - sql.append("SELECT DISTINCT m2.id,m2.title FROM ITEM i2, MEDIA m2, MEDIAFILE mf2"); - sql.append(" WHERE ((CONTAINS(m2.title, ?) >= 1) OR (CONTAINS(m2.description, ?) >= 1)) AND m2.itemid = i2.id AND mf2.MEDIAID = m2.id"); - sql.append(")UNION("); - sql.append("SELECT DISTINCT m3.id,m3.title FROM ITEM i3, MEDIA m3, MEDIAFILE mf3"); - sql.append(" WHERE (CONTAINS(mf3.houseId, ?) >= 1) AND m3.itemid = i3.id AND mf3.mediaid = m3.id"); - sql.append(")) ORDER BY title"); - - String query = sql.toString(); - st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); - for (int s = 1; s <= 5; s++) { - st.setString(s, criteria); - } + st = createArchiveMediaSearchStatement(connection, criteria, typeIDs); rs = st.executeQuery(); rs.last(); result.setItemCount(rs.getRow()); @@ -363,7 +403,7 @@ public class ItemDAOEx { } } else { if (result.getItemCount() > 0) { - throw new Exception("Invalid searchResult 'from' position: " + fromResult + " total records: " + result.getItemCount() + " " + query); + throw new Exception("Invalid searchResult 'from' position: " + fromResult + " total records: " + result.getItemCount()); } } } else { @@ -372,6 +412,9 @@ public class ItemDAOEx { int maxRecords = toResult - fromResult; + String[] criterias = criteria.replace("*", "").replace("+", " ").split(" "); + if (criteria.startsWith("\"") && criteria.endsWith("\"")) + criterias = new String[] { criteria.replace("\"", "") }; List resultList = null; logger.info("Processing query result, maxRecords {}", maxRecords); while (rs.next() && maxRecords > 0) { @@ -380,9 +423,16 @@ public class ItemDAOEx { am.setMedia(media); Item item = manager.getItem(media.getItemId()); am.setItem(item); + if (resultList == null) resultList = new ArrayList<>(); resultList.add(am); + + setRelevant(criterias, am, media.getDescription()); + if (am.getRelevant() == null) + setRelevant(criterias, am, item.getDescription()); + + //media.setTitle(media.getTitle().replace("hirado", "")); maxRecords--; } logger.info("Query result processed"); @@ -412,4 +462,37 @@ public class ItemDAOEx { return result; } + + private void setRelevant(String[] criterias, ArchivedMedia am, String content) { + if (content == null) + return; + for (String c : criterias) { + if (c != null && c.length() > 2) { + + int pos = content.toLowerCase().indexOf(c.toLowerCase()); + if (pos > -1) { + int start = 0; + if (pos > 100) + start = pos - 100; + else + start = 0; + int end = pos + 200; + if (end > content.length() - 1) + end = content.length() - 1; + + String relevant = content.substring(start, pos) + "" + content.substring(pos, pos + c.length()) + "" + + content.substring(pos + c.length(), end); + + if (start > 0) + relevant = "..." + relevant; + if (end < content.length() - 1) + relevant = relevant + "..."; + + am.setRelevant(relevant); + break; + } + + } + } + } } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java index 831a1f13..3a52df5a 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java @@ -947,11 +947,11 @@ public class ItemManager extends MemoryCache implements IItemManager { } @Override - public SearchResult search(String criteria, int fromResult, int toResult) { + public SearchResult search(String criteria, List searchFilters, int fromResult, int toResult) { traceIn(); SearchResult result = null; ItemDAOEx itemDb = new ItemDAOEx(this); - result = itemDb.searchArchivedMedia(criteria, fromResult, toResult); + result = itemDb.searchArchivedMedia(criteria, searchFilters, fromResult, toResult); traceOut(); return result; } diff --git a/server/user.jobengine.osgi.server/pages/newshistory.zul b/server/user.jobengine.osgi.server/pages/newshistory.zul index a0933139..6b59d67e 100644 --- a/server/user.jobengine.osgi.server/pages/newshistory.zul +++ b/server/user.jobengine.osgi.server/pages/newshistory.zul @@ -3,7 +3,7 @@ + @@ -29,7 +34,10 @@ -
+
+ +
+
diff --git a/server/user.jobengine.osgi.server/pages/statisticsdetails.zul b/server/user.jobengine.osgi.server/pages/statisticsdetails.zul index 6e224cc1..bca2cb24 100644 --- a/server/user.jobengine.osgi.server/pages/statisticsdetails.zul +++ b/server/user.jobengine.osgi.server/pages/statisticsdetails.zul @@ -2,16 +2,19 @@ - + - +