From: Vásáry Dániel Date: Wed, 18 Jul 2018 14:18:02 +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=dda037a717b1824bcb4894c7a2ba10e5ce3503d5;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31192 --- 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 8f1dd3ac..27d2f0b4 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,7 +3,6 @@ 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; @@ -58,114 +57,6 @@ public class ItemDAOEx { return resultQuery.toString(); } - private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, String orderBy, boolean orderAscending, - 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 "); - sql.append(getColumnNames()); - sql.append( - " FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, VW_MEDIAFILES vw_mf, ITEMTYPE it WHERE i.id = md.itemid AND m.id = md.mediaid AND mf.id = md.mediafileid AND m.id=vw_mf.mediaid AND m.itemTypeId = it.id"); - if (typeIDs != null) { - sql.append(" AND m.itemtypeid IN "); - sql.append(typeCriteria.toString()); - } - - sql.append(" AND CONTAINS(md.description, ?) >= 1"); - sql.append(" ORDER BY "); - - if (orderBy == null) { - sql.append("itemtitle desc, mediaitemtypeid"); - } else { - sql.append(orderBy); - sql.append(orderAscending ? " ASC" : " DESC"); - } - - String query = sql.toString(); - logger.info(query); - PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); - st.setString(1, criteria); - return st; - } - - private PreparedStatement createArchiveMediaSearchStatement1(Connection connection, String criteria, String orderBy, boolean orderAscending, - 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(")"); - } - - String columNames = getColumnNames(); - StringBuilder innerSql = new StringBuilder(); - innerSql.append("SELECT DISTINCT "); - innerSql.append(columNames); - innerSql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1"); - if (typeIDs != null) { - innerSql.append(" AND m.itemtypeid IN "); - innerSql.append(typeCriteria.toString()); - } - - StringBuilder sql = new StringBuilder(); - sql.append("SELECT * FROM (("); - sql.append(innerSql); - sql.append(" AND ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1))"); - sql.append(") UNION ("); - sql.append(innerSql); - sql.append(" AND ((CONTAINS(m.title, ?) >= 1) OR (CONTAINS(m.description, ?) >= 1))"); - sql.append(") UNION ("); - sql.append(innerSql); - sql.append(" AND (CONTAINS(mf.houseId, ?) >= 1)"); - sql.append(")) ORDER BY "); - - if (orderBy == null) { - sql.append("itemtitle desc, mediaitemtypeid"); - } else { - sql.append(orderBy); - sql.append(orderAscending ? " ASC" : " DESC"); - } - - String query = sql.toString(); - logger.info(query); - 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 String getColumnNames() { - StringBuilder columns = new StringBuilder(); - columns.append("i.id itemid,"); - columns.append("i.title itemtitle,"); - columns.append("m.id mediaid,"); - columns.append("m.title mediatitle,"); - columns.append("m.archived,"); - columns.append("m.length,"); - columns.append("m.itemtypeid mediaitemtypeid,"); - columns.append("it.name mediaitemtypename,"); - columns.append("m.houseid mediahouseid,"); - columns.append("mf.houseid mediafilehouseid,"); - columns.append("vw_mf.mediafilecount"); - return columns.toString(); - } - private List getResultHeaders(Connection connection, QueryObject queryObject, String innerQuery) { List results = new ArrayList(); String typeQuery; @@ -446,124 +337,4 @@ public class ItemDAOEx { return result; } - public SearchResult searchArchivedMedia(String criteria, List searchFilters, String orderBy, boolean orderAscending, 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 { - - st = createArchiveMediaSearchStatement(connection, criteria, orderBy, orderAscending, typeIDs); - rs = st.executeQuery(); - rs.last(); - result.setItemCount(rs.getRow()); - - // set begining position - if (fromResult > -1) { - if (fromResult <= result.getItemCount()) { - if (fromResult > 1) { - rs.absolute(fromResult - 1); - } else { - rs.beforeFirst(); - } - } else { - if (result.getItemCount() > 0) { - throw new Exception("Invalid searchResult 'from' position: " + fromResult + " total records: " + result.getItemCount()); - } - } - } else { - rs.beforeFirst(); - } - - 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) { - ArchivedMedia am = new ArchivedMedia(); - Media media = manager.getMedia(rs.getLong("mediaid")); - 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"); - result.setItems(resultList); - connection.commit(); - } catch (Exception e) { - try { - connection.rollback(); - } catch (Exception e1) { - e1.printStackTrace(); - } - manager.throwError(e); - } finally { - try { - if (rs != null) - rs.close(); - } catch (Exception e1) { - } - try { - if (st != null) - st.close(); - } catch (Exception e1) { - } - manager.putDbContext(context); - } - manager.traceOut(); - - 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 2bd2393d..2c1c95ab 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 @@ -1020,8 +1020,8 @@ public class ItemManager extends MemoryCache implements IItemManager { int toResult) { traceIn(); SearchResult result = null; - ItemDAOEx itemDb = new ItemDAOEx(this); - result = itemDb.searchArchivedMedia(criteria, searchFilters, orderBy, orderAscending, fromResult, toResult); + MediaFinder finder = new MediaFinder(this); + result = finder.search(criteria, searchFilters, orderBy, orderAscending, fromResult, toResult); traceOut(); return result; } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFinder.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFinder.java index 7d91c1c0..8832c30b 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFinder.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFinder.java @@ -5,9 +5,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Formatter; import java.util.List; -import java.util.Locale; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -22,44 +20,8 @@ public class MediaFinder { this.manager = manager; } - private String buildQueryCore(QueryObject parameter) { - QueryBuilder queryBuilder = new QueryBuilder(); - queryBuilder.getParameters(parameter.getFilters()); - return queryBuilder.getQuery(); - } - - private String buildResultQuery(QueryObject queryObject, String innerQuery, SearchResult csr) { - StringBuilder resultQuery = new StringBuilder(); - Formatter qf = new Formatter(resultQuery, Locale.getDefault()); - RenderParameter rp = queryObject.getParameters(); - if (rp != null) { - long bottom = rp.getPage() * rp.getRowPerPage() + 1; - long top = bottom + rp.getRowPerPage() - 1; - resultQuery.append("WITH NUMBEREDITEM AS ("); - Metadata orderMetadata = rp.getOrderBy(); - if (queryObject.hasOrderInfo()) - qf.format("SELECT ROWNUMBER() OVER (ORDER BY %1$s %2$s) AS RN, ", orderMetadata.getOrderName("i", "md"), rp.getOrderDirection().name()); - else - resultQuery.append("SELECT ROWNUMBER() OVER () AS RN, "); - resultQuery.append("i.ID, i.TITLE, i.DESCRIPTION, i.ITEMTYPEID, i.HOUSEID, i.CREATED, i.ISFOLDER FROM ITEM i "); - String orderTableName = orderMetadata.getTableName(); - if (orderTableName != null) - qf.format("LEFT OUTER JOIN %1$s md ON (md.ID = i.ID) ", orderTableName); - resultQuery.append("WHERE i.ID IN "); - qf.format("(SELECT ii.ID %1$s AND ii.ITEMTYPEID = %2$d))", innerQuery, csr.getItemType().getId()); - qf.format(" SELECT * FROM NUMBEREDITEM WHERE RN BETWEEN %1$d AND %2$d", bottom, top); - } else { - resultQuery.append("SELECT i.ID, i.TITLE, i.DESCRIPTION, i.ITEMTYPEID, i.HOUSEID, i.CREATED, i.ISFOLDER FROM ITEM i "); - resultQuery.append("WHERE i.ID IN "); - qf.format("(SELECT ii.ID %1$s) ORDER BY i.TITLE", innerQuery); - } - - logger.trace(resultQuery.toString()); - return resultQuery.toString(); - } - - private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, String orderBy, boolean orderAscending, - List typeIDs) throws SQLException { + private PreparedStatement createStatement(Connection connection, String criteria, String orderBy, boolean orderAscending, List typeIDs) + throws SQLException { StringBuilder typeCriteria = new StringBuilder(); if (typeIDs != null) { typeCriteria.append("("); @@ -73,7 +35,19 @@ public class MediaFinder { StringBuilder sql = new StringBuilder(); sql.append("SELECT "); - sql.append(getColumnNames()); + sql.append("i.id itemid,"); + sql.append("i.title itemtitle,"); + sql.append("m.id mediaid,"); + sql.append("m.title mediatitle,"); + sql.append("m.archived,"); + sql.append("m.length,"); + sql.append("m.itemtypeid mediaitemtypeid,"); + sql.append("HIGHLIGHT(md.description, '', '', 'valami') description,"); + //sql.append("'blabla' description,"); + sql.append("it.name mediaitemtypename,"); + sql.append("m.houseid mediahouseid,"); + sql.append("mf.houseid mediafilehouseid,"); + sql.append("vw_mf.mediafilecount"); sql.append( " FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, VW_MEDIAFILES vw_mf, ITEMTYPE it WHERE i.id = md.itemid AND m.id = md.mediaid AND mf.id = md.mediafileid AND m.id=vw_mf.mediaid AND m.itemTypeId = it.id"); if (typeIDs != null) { @@ -98,118 +72,11 @@ public class MediaFinder { return st; } - private PreparedStatement createArchiveMediaSearchStatement1(Connection connection, String criteria, String orderBy, boolean orderAscending, - 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(")"); - } - - String columNames = getColumnNames(); - StringBuilder innerSql = new StringBuilder(); - innerSql.append("SELECT DISTINCT "); - innerSql.append(columNames); - innerSql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1"); - if (typeIDs != null) { - innerSql.append(" AND m.itemtypeid IN "); - innerSql.append(typeCriteria.toString()); - } - - StringBuilder sql = new StringBuilder(); - sql.append("SELECT * FROM (("); - sql.append(innerSql); - sql.append(" AND ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1))"); - sql.append(") UNION ("); - sql.append(innerSql); - sql.append(" AND ((CONTAINS(m.title, ?) >= 1) OR (CONTAINS(m.description, ?) >= 1))"); - sql.append(") UNION ("); - sql.append(innerSql); - sql.append(" AND (CONTAINS(mf.houseId, ?) >= 1)"); - sql.append(")) ORDER BY "); - - if (orderBy == null) { - sql.append("itemtitle desc, mediaitemtypeid"); - } else { - sql.append(orderBy); - sql.append(orderAscending ? " ASC" : " DESC"); - } - - String query = sql.toString(); - logger.info(query); - 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 String getColumnNames() { - StringBuilder columns = new StringBuilder(); - columns.append("i.id itemid,"); - columns.append("i.title itemtitle,"); - columns.append("m.id mediaid,"); - columns.append("m.title mediatitle,"); - columns.append("m.archived,"); - columns.append("m.length,"); - columns.append("m.itemtypeid mediaitemtypeid,"); - columns.append("it.name mediaitemtypename,"); - columns.append("m.houseid mediahouseid,"); - columns.append("mf.houseid mediafilehouseid,"); - columns.append("vw_mf.mediafilecount"); - return columns.toString(); - } - - private List getResultHeaders(Connection connection, QueryObject queryObject, String innerQuery) { - List results = new ArrayList(); - String typeQuery; - if (queryObject.getParameters() == null) - typeQuery = String.format("SELECT CAST(COUNT(DISTINCT(ii.ID)) AS BIGINT) %s", innerQuery); - else - typeQuery = String.format("SELECT ii.ITEMTYPEID, CAST(COUNT(DISTINCT(ii.ID)) AS BIGINT) %s GROUP BY ii.ITEMTYPEID", innerQuery); - - logger.trace(typeQuery.toString()); - PreparedStatement st = null; - ResultSet rs = null; - try { - st = connection.prepareStatement(typeQuery); - rs = st.executeQuery(); - while (rs.next()) { - SearchResult sr = new SearchResult(); - if (queryObject.getParameters() == null) { - sr.setItemCount(rs.getLong(1)); - } else { - ItemType itemType = (ItemType) manager.get(ItemType.class, rs.getLong(1)); - sr.setItemType(itemType); - sr.setItemCount(rs.getLong(2)); - } - - sr.setParameters(queryObject.getParameters()); - results.add(sr); - } - } catch (Exception e) { - logger.catching(e); - } finally { - try { - if (rs != null) - rs.close(); - } catch (Exception e1) { - e1.printStackTrace(); - } - try { - if (st != null) - st.close(); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - return results; + private String[] extractCriteriaWords(String criteria) { + String[] criterias = criteria.replace("*", "").replace("+", " ").split(" "); + if (criteria.startsWith("\"") && criteria.endsWith("\"")) + criterias = new String[] { criteria.replace("\"", "") }; + return criterias; } private List getTypeIDs(List searchFilters) { @@ -227,226 +94,7 @@ public class MediaFinder { return result; } - public List getUntranscodedMedias() { - List result = null; - - ResultSet rs = null; - PreparedStatement st = null; - DefaultContext context = manager.getDbContext(); - Connection connection = context.getConnection(); - try { - - String query = "select m.ID, m.TITLE, m.DESCRIPTION, m.ITEMID, m.ITEMTYPEID, m.HOUSEID, m.LENGTH, m.CREATED, m.ARCHIVED, m.POSTER from MEDIA m right outer join VW_MEDIAFILES f on (f.MEDIAID = m.ID) where m.CREATED > '2017-12-14' and f.MEDIAFILECOUNT = 1"; - st = connection.prepareStatement(query); - rs = st.executeQuery(); - - while (rs.next()) { - Media m = new Media(); - m.setPersister(manager); - m.setId(rs.getLong("id")); - m.setTitle(rs.getString("title")); - m.setDescription(rs.getString("description")); - m.setItemId(rs.getLong("itemid")); - m.setItemTypeId(rs.getLong("itemtypeid")); - m.setHouseId(rs.getString("houseid")); - m.setLength(rs.getLong("length")); - m.setCreated(rs.getTimestamp("created")); - m.setArchived(rs.getTimestamp("archived")); - m.setPoster(rs.getBytes("poster")); - if (result == null) - result = new ArrayList<>(); - result.add(m); - } - - connection.commit(); - } catch (Exception e) { - try { - connection.rollback(); - } catch (Exception e1) { - } - manager.throwError(e); - } finally { - try { - if (rs != null) - rs.close(); - } catch (Exception e1) { - } - try { - if (st != null) - st.close(); - } catch (Exception e1) { - } - manager.putDbContext(context); - } - - return result; - } - - @SuppressWarnings("unchecked") - public List search(QueryObject queryObject) { - manager.traceIn(); - if (queryObject == null || queryObject.getFilters() == null || queryObject.getFilters().size() == 0) - throw new IllegalArgumentException("QueryObject not specified."); - - List results = new ArrayList(); - - ResultSet rs = null; - PreparedStatement st = null; - DefaultContext context = manager.getDbContext(); - Connection connection = context.getConnection(); - - try { - String innerQuery = buildQueryCore(queryObject); - - if (queryObject.getActiveItemTypeId() == 0) { - // keres�s az �sszes t�pusban - // Ha nincs RenderParameter, akkor az eredm�ny egy - // SearchResult-ba ker�l, egy�bk�nt - // ItemType-onk�nt t�bbe - results = getResultHeaders(connection, queryObject, innerQuery); - } else { - SearchResult sr = new SearchResult(); - ItemType itemType = (ItemType) manager.get(ItemType.class, queryObject.getActiveItemTypeId()); - sr.setItemType(itemType); - // TODO - // sr.setItemCount(rs.getLong(2)); - sr.setParameters(queryObject.getParameters()); - results.add(sr); - } - - if (results.size() != 0) { - SearchResult csr = results.get(0); - String resultQuery = buildResultQuery(queryObject, innerQuery, csr); - st = connection.prepareStatement(resultQuery); - - // int rpp = (int)parameter.getParameters().getRowPerPage(); - // st.setFetchSize(rpp); - // st.setMaxRows(rpp); - - rs = st.executeQuery(); - List items = new ArrayList(); - ItemDAO dao = (ItemDAO) manager.getBaseDAO(Item.class); - items = (List) (List) dao.entities(context, rs); - csr.setItems(items); - rs.close(); - } - - connection.commit(); - } catch (Exception e) { - try { - connection.rollback(); - } catch (Exception e1) { - e1.printStackTrace(); - } - manager.throwError(e); - } finally { - try { - if (rs != null) - rs.close(); - } catch (Exception e1) { - } - try { - if (st != null) - st.close(); - } catch (Exception e1) { - } - manager.putDbContext(context); - } - manager.traceOut(); - return results; - } - - public SearchResult search(String criteria, int fromResult, int toResult) { - SearchResult result = new SearchResult(); - - 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 i.id,i.itemtypeid,i.houseid,i.title,i.description,i.isfolder,i.created,i.modified from item i, media m, mediafile mf"); - sql.append( - " where ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1) OR (CONTAINS(i.houseId, ?) >= 1)) and m.itemid = i.id and mf.MEDIAID = m.id"); - sql.append(")UNION("); - sql.append( - "select distinct i2.id,i2.itemtypeid,i2.houseid,i2.title,i2.description,i2.isfolder,i2.created,i2.modified from item i2, media m2, mediafile mf2"); - sql.append( - " where ((CONTAINS(m2.title, ?) >= 1) OR (CONTAINS(m2.description, ?) >= 1) OR (CONTAINS(m2.houseId, ?) >= 1)) and m2.itemid = i2.id and mf2.MEDIAID = m2.id"); - sql.append(")UNION("); - sql.append( - "select distinct i3.id,i3.itemtypeid,i3.houseid,i3.title,i3.description,i3.isfolder,i3.created,i3.modified 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(); - /* - query = "SELECT i.* from item i, media m, mediafile mf WHERE m.ITEMID = i.id AND mf.MEDIAID = m.ID" - + " AND (" + "(CONTAINS(i.TITLE, '" + criteria + "') >= 1) OR (CONTAINS(i.DESCRIPTION, '" + criteria - + "') >= 1)" + " OR (CONTAINS(m.TITLE, '" + criteria + "') >= 1) OR (CONTAINS(m.DESCRIPTION, '" - + criteria + "') >= 1)" + " OR (CONTAINS(mf.HOUSEID, '" + criteria - + "') >= 1)) ORDER BY i.title"; - */ - // query = "SELECT * FROM ITEM ORDER BY title"; - - st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); - for (int s = 1; s <= 7; s++) { - st.setString(s, criteria); - } - rs = st.executeQuery(); - rs.last(); - result.setItemCount(rs.getRow()); - - // set begining position - if (fromResult > -1) { - if (fromResult <= result.getItemCount()) { - if (fromResult > 1) { - rs.absolute(fromResult - 1); - } else { - rs.beforeFirst(); - } - } else { - if (result.getItemCount() > 0) { - throw new Exception("Invalid searchResult 'from' position: " + fromResult + " total records: " + result.getItemCount() + " " + query); - } - } - } else { - rs.beforeFirst(); - } - - int maxRecords = toResult - fromResult; - - ItemDAO dao = (ItemDAO) manager.getBaseDAO(Item.class); - result.setItems((List) (List) dao.entities(context, rs, maxRecords)); - - connection.commit(); - } catch (Exception e) { - try { - connection.rollback(); - } catch (Exception e1) { - e1.printStackTrace(); - } - manager.throwError(e); - } finally { - try { - if (rs != null) - rs.close(); - } catch (Exception e1) { - } - try { - if (st != null) - st.close(); - } catch (Exception e1) { - } - manager.putDbContext(context); - } - manager.traceOut(); - - return result; - } - - public SearchResult searchArchivedMedia(String criteria, List searchFilters, String orderBy, boolean orderAscending, int fromResult, + public SearchResult search(String criteria, List searchFilters, String orderBy, boolean orderAscending, int fromResult, int toResult) { SearchResult result = new SearchResult<>(); @@ -458,7 +106,7 @@ public class MediaFinder { Connection connection = context.getConnection(); try { - st = createArchiveMediaSearchStatement(connection, criteria, orderBy, orderAscending, typeIDs); + st = createStatement(connection, criteria, orderBy, orderAscending, typeIDs); rs = st.executeQuery(); rs.last(); result.setItemCount(rs.getRow()); @@ -482,28 +130,40 @@ public class MediaFinder { int maxRecords = toResult - fromResult; - String[] criterias = criteria.replace("*", "").replace("+", " ").split(" "); - if (criteria.startsWith("\"") && criteria.endsWith("\"")) - criterias = new String[] { criteria.replace("\"", "") }; + String[] criterias = extractCriteriaWords(criteria); List resultList = null; logger.info("Processing query result, maxRecords {}", maxRecords); - while (rs.next() && maxRecords > 0) { + ItemType it = new ItemType(); + it.setId(rs.getLong("mediaitemtypeid")); + it.setName(rs.getString("mediaitemtypename")); + + Item item = new Item(); + item.setId(rs.getLong("itemid")); + item.setTitle(rs.getString("itemtitle")); + + Media media = new Media(); + + media.setItemId(item.getId()); + media.setItemType(it); + media.setId(rs.getLong("mediaid")); + media.setTitle(rs.getString("mediatitle")); + media.setHouseId(rs.getString("mediahouseid")); + media.setArchived(rs.getTimestamp("archived")); + media.setLength(rs.getLong("length")); + media.setMediaFilesCount(rs.getInt("mediafilecount")); + media.setMediaFilesName(rs.getString("mediafilehouseid")); + ArchivedMedia am = new ArchivedMedia(); - Media media = manager.getMedia(rs.getLong("mediaid")); 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", "")); + am.setRelevant(rs.getString("description")); + //setRelevant(criterias, am, rs.getString("description")); maxRecords--; } logger.info("Query result processed");