import java.sql.Connection;\r
import java.sql.PreparedStatement;\r
import java.sql.ResultSet;\r
-import java.sql.SQLException;\r
import java.util.ArrayList;\r
import java.util.Formatter;\r
import java.util.List;\r
return resultQuery.toString();\r
}\r
\r
- private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, String orderBy, boolean orderAscending,\r
- List<String> typeIDs) throws SQLException {\r
- StringBuilder typeCriteria = new StringBuilder();\r
- if (typeIDs != null) {\r
- typeCriteria.append("(");\r
- for (int i = 0; i < typeIDs.size(); i++) {\r
- typeCriteria.append(typeIDs.get(i));\r
- if (i < typeIDs.size() - 1)\r
- typeCriteria.append(",");\r
- }\r
- typeCriteria.append(")");\r
- }\r
-\r
- StringBuilder sql = new StringBuilder();\r
- sql.append("SELECT ");\r
- sql.append(getColumnNames());\r
- sql.append(\r
- " 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");\r
- if (typeIDs != null) {\r
- sql.append(" AND m.itemtypeid IN ");\r
- sql.append(typeCriteria.toString());\r
- }\r
-\r
- sql.append(" AND CONTAINS(md.description, ?) >= 1");\r
- sql.append(" ORDER BY ");\r
-\r
- if (orderBy == null) {\r
- sql.append("itemtitle desc, mediaitemtypeid");\r
- } else {\r
- sql.append(orderBy);\r
- sql.append(orderAscending ? " ASC" : " DESC");\r
- }\r
-\r
- String query = sql.toString();\r
- logger.info(query);\r
- PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
- st.setString(1, criteria);\r
- return st;\r
- }\r
-\r
- private PreparedStatement createArchiveMediaSearchStatement1(Connection connection, String criteria, String orderBy, boolean orderAscending,\r
- List<String> typeIDs) throws SQLException {\r
- StringBuilder typeCriteria = new StringBuilder();\r
- if (typeIDs != null) {\r
- typeCriteria.append("(");\r
- for (int i = 0; i < typeIDs.size(); i++) {\r
- typeCriteria.append(typeIDs.get(i));\r
- if (i < typeIDs.size() - 1)\r
- typeCriteria.append(",");\r
- }\r
- typeCriteria.append(")");\r
- }\r
-\r
- String columNames = getColumnNames();\r
- StringBuilder innerSql = new StringBuilder();\r
- innerSql.append("SELECT DISTINCT ");\r
- innerSql.append(columNames);\r
- innerSql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1");\r
- if (typeIDs != null) {\r
- innerSql.append(" AND m.itemtypeid IN ");\r
- innerSql.append(typeCriteria.toString());\r
- }\r
-\r
- StringBuilder sql = new StringBuilder();\r
- sql.append("SELECT * FROM ((");\r
- sql.append(innerSql);\r
- sql.append(" AND ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1))");\r
- sql.append(") UNION (");\r
- sql.append(innerSql);\r
- sql.append(" AND ((CONTAINS(m.title, ?) >= 1) OR (CONTAINS(m.description, ?) >= 1))");\r
- sql.append(") UNION (");\r
- sql.append(innerSql);\r
- sql.append(" AND (CONTAINS(mf.houseId, ?) >= 1)");\r
- sql.append(")) ORDER BY ");\r
-\r
- if (orderBy == null) {\r
- sql.append("itemtitle desc, mediaitemtypeid");\r
- } else {\r
- sql.append(orderBy);\r
- sql.append(orderAscending ? " ASC" : " DESC");\r
- }\r
-\r
- String query = sql.toString();\r
- logger.info(query);\r
- PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
-\r
- for (int s = 1; s <= 5; s++) {\r
- st.setString(s, criteria);\r
- }\r
- return st;\r
- }\r
-\r
- private String getColumnNames() {\r
- StringBuilder columns = new StringBuilder();\r
- columns.append("i.id itemid,");\r
- columns.append("i.title itemtitle,");\r
- columns.append("m.id mediaid,");\r
- columns.append("m.title mediatitle,");\r
- columns.append("m.archived,");\r
- columns.append("m.length,");\r
- columns.append("m.itemtypeid mediaitemtypeid,");\r
- columns.append("it.name mediaitemtypename,");\r
- columns.append("m.houseid mediahouseid,");\r
- columns.append("mf.houseid mediafilehouseid,");\r
- columns.append("vw_mf.mediafilecount");\r
- return columns.toString();\r
- }\r
-\r
private List<SearchResult> getResultHeaders(Connection connection, QueryObject queryObject, String innerQuery) {\r
List<SearchResult> results = new ArrayList<SearchResult>();\r
String typeQuery;\r
return result;\r
}\r
\r
- public SearchResult<ArchivedMedia> searchArchivedMedia(String criteria, List<String> searchFilters, String orderBy, boolean orderAscending, int fromResult,\r
- int toResult) {\r
- SearchResult<ArchivedMedia> result = new SearchResult<>();\r
-\r
- List<String> typeIDs = getTypeIDs(searchFilters);\r
-\r
- ResultSet rs = null;\r
- PreparedStatement st = null;\r
- DefaultContext context = manager.getDbContext();\r
- Connection connection = context.getConnection();\r
- try {\r
-\r
- st = createArchiveMediaSearchStatement(connection, criteria, orderBy, orderAscending, typeIDs);\r
- rs = st.executeQuery();\r
- rs.last();\r
- result.setItemCount(rs.getRow());\r
-\r
- // set begining position\r
- if (fromResult > -1) {\r
- if (fromResult <= result.getItemCount()) {\r
- if (fromResult > 1) {\r
- rs.absolute(fromResult - 1);\r
- } else {\r
- rs.beforeFirst();\r
- }\r
- } else {\r
- if (result.getItemCount() > 0) {\r
- throw new Exception("Invalid searchResult 'from' position: " + fromResult + " total records: " + result.getItemCount());\r
- }\r
- }\r
- } else {\r
- rs.beforeFirst();\r
- }\r
-\r
- int maxRecords = toResult - fromResult;\r
-\r
- String[] criterias = criteria.replace("*", "").replace("+", " ").split(" ");\r
- if (criteria.startsWith("\"") && criteria.endsWith("\""))\r
- criterias = new String[] { criteria.replace("\"", "") };\r
- List<ArchivedMedia> resultList = null;\r
- logger.info("Processing query result, maxRecords {}", maxRecords);\r
-\r
- while (rs.next() && maxRecords > 0) {\r
- ArchivedMedia am = new ArchivedMedia();\r
- Media media = manager.getMedia(rs.getLong("mediaid"));\r
- am.setMedia(media);\r
- Item item = manager.getItem(media.getItemId());\r
- am.setItem(item);\r
-\r
- if (resultList == null)\r
- resultList = new ArrayList<>();\r
- resultList.add(am);\r
-\r
- setRelevant(criterias, am, media.getDescription());\r
- if (am.getRelevant() == null)\r
- setRelevant(criterias, am, item.getDescription());\r
-\r
- // media.setTitle(media.getTitle().replace("hirado", "<html><![CDATA[]]></html>"));\r
- maxRecords--;\r
- }\r
- logger.info("Query result processed");\r
- result.setItems(resultList);\r
- connection.commit();\r
- } catch (Exception e) {\r
- try {\r
- connection.rollback();\r
- } catch (Exception e1) {\r
- e1.printStackTrace();\r
- }\r
- manager.throwError(e);\r
- } finally {\r
- try {\r
- if (rs != null)\r
- rs.close();\r
- } catch (Exception e1) {\r
- }\r
- try {\r
- if (st != null)\r
- st.close();\r
- } catch (Exception e1) {\r
- }\r
- manager.putDbContext(context);\r
- }\r
- manager.traceOut();\r
-\r
- return result;\r
- }\r
-\r
- private void setRelevant(String[] criterias, ArchivedMedia am, String content) {\r
- if (content == null)\r
- return;\r
- for (String c : criterias) {\r
- if (c != null && c.length() > 2) {\r
-\r
- int pos = content.toLowerCase().indexOf(c.toLowerCase());\r
- if (pos > -1) {\r
- int start = 0;\r
- if (pos > 100)\r
- start = pos - 100;\r
- else\r
- start = 0;\r
- int end = pos + 200;\r
- if (end > content.length() - 1)\r
- end = content.length() - 1;\r
-\r
- String relevant = content.substring(start, pos) + "<span class='rhl'>" + content.substring(pos, pos + c.length()) + "</span>"\r
- + content.substring(pos + c.length(), end);\r
-\r
- if (start > 0)\r
- relevant = "..." + relevant;\r
- if (end < content.length() - 1)\r
- relevant = relevant + "...";\r
-\r
- am.setRelevant(relevant);\r
- break;\r
- }\r
-\r
- }\r
- }\r
- }\r
}\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
import java.util.ArrayList;\r
-import java.util.Formatter;\r
import java.util.List;\r
-import java.util.Locale;\r
\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
this.manager = manager;\r
}\r
\r
- private String buildQueryCore(QueryObject parameter) {\r
- QueryBuilder queryBuilder = new QueryBuilder();\r
- queryBuilder.getParameters(parameter.getFilters());\r
- return queryBuilder.getQuery();\r
- }\r
-\r
- private String buildResultQuery(QueryObject queryObject, String innerQuery, SearchResult csr) {\r
- StringBuilder resultQuery = new StringBuilder();\r
- Formatter qf = new Formatter(resultQuery, Locale.getDefault());\r
- RenderParameter rp = queryObject.getParameters();\r
- if (rp != null) {\r
- long bottom = rp.getPage() * rp.getRowPerPage() + 1;\r
- long top = bottom + rp.getRowPerPage() - 1;\r
- resultQuery.append("WITH NUMBEREDITEM AS (");\r
- Metadata orderMetadata = rp.getOrderBy();\r
- if (queryObject.hasOrderInfo())\r
- qf.format("SELECT ROWNUMBER() OVER (ORDER BY %1$s %2$s) AS RN, ", orderMetadata.getOrderName("i", "md"), rp.getOrderDirection().name());\r
- else\r
- resultQuery.append("SELECT ROWNUMBER() OVER () AS RN, ");\r
- resultQuery.append("i.ID, i.TITLE, i.DESCRIPTION, i.ITEMTYPEID, i.HOUSEID, i.CREATED, i.ISFOLDER FROM ITEM i ");\r
- String orderTableName = orderMetadata.getTableName();\r
- if (orderTableName != null)\r
- qf.format("LEFT OUTER JOIN %1$s md ON (md.ID = i.ID) ", orderTableName);\r
- resultQuery.append("WHERE i.ID IN ");\r
- qf.format("(SELECT ii.ID %1$s AND ii.ITEMTYPEID = %2$d))", innerQuery, csr.getItemType().getId());\r
- qf.format(" SELECT * FROM NUMBEREDITEM WHERE RN BETWEEN %1$d AND %2$d", bottom, top);\r
- } else {\r
- resultQuery.append("SELECT i.ID, i.TITLE, i.DESCRIPTION, i.ITEMTYPEID, i.HOUSEID, i.CREATED, i.ISFOLDER FROM ITEM i ");\r
- resultQuery.append("WHERE i.ID IN ");\r
- qf.format("(SELECT ii.ID %1$s) ORDER BY i.TITLE", innerQuery);\r
- }\r
-\r
- logger.trace(resultQuery.toString());\r
- return resultQuery.toString();\r
- }\r
-\r
- private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, String orderBy, boolean orderAscending,\r
- List<String> typeIDs) throws SQLException {\r
+ private PreparedStatement createStatement(Connection connection, String criteria, String orderBy, boolean orderAscending, List<String> typeIDs)\r
+ throws SQLException {\r
StringBuilder typeCriteria = new StringBuilder();\r
if (typeIDs != null) {\r
typeCriteria.append("(");\r
\r
StringBuilder sql = new StringBuilder();\r
sql.append("SELECT ");\r
- sql.append(getColumnNames());\r
+ sql.append("i.id itemid,");\r
+ sql.append("i.title itemtitle,");\r
+ sql.append("m.id mediaid,");\r
+ sql.append("m.title mediatitle,");\r
+ sql.append("m.archived,");\r
+ sql.append("m.length,");\r
+ sql.append("m.itemtypeid mediaitemtypeid,");\r
+ sql.append("HIGHLIGHT(md.description, '<b>', '</b>', 'valami') description,");\r
+ //sql.append("'blabla' description,");\r
+ sql.append("it.name mediaitemtypename,");\r
+ sql.append("m.houseid mediahouseid,");\r
+ sql.append("mf.houseid mediafilehouseid,");\r
+ sql.append("vw_mf.mediafilecount");\r
sql.append(\r
" 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");\r
if (typeIDs != null) {\r
return st;\r
}\r
\r
- private PreparedStatement createArchiveMediaSearchStatement1(Connection connection, String criteria, String orderBy, boolean orderAscending,\r
- List<String> typeIDs) throws SQLException {\r
- StringBuilder typeCriteria = new StringBuilder();\r
- if (typeIDs != null) {\r
- typeCriteria.append("(");\r
- for (int i = 0; i < typeIDs.size(); i++) {\r
- typeCriteria.append(typeIDs.get(i));\r
- if (i < typeIDs.size() - 1)\r
- typeCriteria.append(",");\r
- }\r
- typeCriteria.append(")");\r
- }\r
-\r
- String columNames = getColumnNames();\r
- StringBuilder innerSql = new StringBuilder();\r
- innerSql.append("SELECT DISTINCT ");\r
- innerSql.append(columNames);\r
- innerSql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1");\r
- if (typeIDs != null) {\r
- innerSql.append(" AND m.itemtypeid IN ");\r
- innerSql.append(typeCriteria.toString());\r
- }\r
-\r
- StringBuilder sql = new StringBuilder();\r
- sql.append("SELECT * FROM ((");\r
- sql.append(innerSql);\r
- sql.append(" AND ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1))");\r
- sql.append(") UNION (");\r
- sql.append(innerSql);\r
- sql.append(" AND ((CONTAINS(m.title, ?) >= 1) OR (CONTAINS(m.description, ?) >= 1))");\r
- sql.append(") UNION (");\r
- sql.append(innerSql);\r
- sql.append(" AND (CONTAINS(mf.houseId, ?) >= 1)");\r
- sql.append(")) ORDER BY ");\r
-\r
- if (orderBy == null) {\r
- sql.append("itemtitle desc, mediaitemtypeid");\r
- } else {\r
- sql.append(orderBy);\r
- sql.append(orderAscending ? " ASC" : " DESC");\r
- }\r
-\r
- String query = sql.toString();\r
- logger.info(query);\r
- PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
-\r
- for (int s = 1; s <= 5; s++) {\r
- st.setString(s, criteria);\r
- }\r
- return st;\r
- }\r
-\r
- private String getColumnNames() {\r
- StringBuilder columns = new StringBuilder();\r
- columns.append("i.id itemid,");\r
- columns.append("i.title itemtitle,");\r
- columns.append("m.id mediaid,");\r
- columns.append("m.title mediatitle,");\r
- columns.append("m.archived,");\r
- columns.append("m.length,");\r
- columns.append("m.itemtypeid mediaitemtypeid,");\r
- columns.append("it.name mediaitemtypename,");\r
- columns.append("m.houseid mediahouseid,");\r
- columns.append("mf.houseid mediafilehouseid,");\r
- columns.append("vw_mf.mediafilecount");\r
- return columns.toString();\r
- }\r
-\r
- private List<SearchResult> getResultHeaders(Connection connection, QueryObject queryObject, String innerQuery) {\r
- List<SearchResult> results = new ArrayList<SearchResult>();\r
- String typeQuery;\r
- if (queryObject.getParameters() == null)\r
- typeQuery = String.format("SELECT CAST(COUNT(DISTINCT(ii.ID)) AS BIGINT) %s", innerQuery);\r
- else\r
- typeQuery = String.format("SELECT ii.ITEMTYPEID, CAST(COUNT(DISTINCT(ii.ID)) AS BIGINT) %s GROUP BY ii.ITEMTYPEID", innerQuery);\r
-\r
- logger.trace(typeQuery.toString());\r
- PreparedStatement st = null;\r
- ResultSet rs = null;\r
- try {\r
- st = connection.prepareStatement(typeQuery);\r
- rs = st.executeQuery();\r
- while (rs.next()) {\r
- SearchResult sr = new SearchResult();\r
- if (queryObject.getParameters() == null) {\r
- sr.setItemCount(rs.getLong(1));\r
- } else {\r
- ItemType itemType = (ItemType) manager.get(ItemType.class, rs.getLong(1));\r
- sr.setItemType(itemType);\r
- sr.setItemCount(rs.getLong(2));\r
- }\r
-\r
- sr.setParameters(queryObject.getParameters());\r
- results.add(sr);\r
- }\r
- } catch (Exception e) {\r
- logger.catching(e);\r
- } finally {\r
- try {\r
- if (rs != null)\r
- rs.close();\r
- } catch (Exception e1) {\r
- e1.printStackTrace();\r
- }\r
- try {\r
- if (st != null)\r
- st.close();\r
- } catch (Exception e1) {\r
- e1.printStackTrace();\r
- }\r
- }\r
- return results;\r
+ private String[] extractCriteriaWords(String criteria) {\r
+ String[] criterias = criteria.replace("*", "").replace("+", " ").split(" ");\r
+ if (criteria.startsWith("\"") && criteria.endsWith("\""))\r
+ criterias = new String[] { criteria.replace("\"", "") };\r
+ return criterias;\r
}\r
\r
private List<String> getTypeIDs(List<String> searchFilters) {\r
return result;\r
}\r
\r
- public List<Media> getUntranscodedMedias() {\r
- List<Media> result = null;\r
-\r
- ResultSet rs = null;\r
- PreparedStatement st = null;\r
- DefaultContext context = manager.getDbContext();\r
- Connection connection = context.getConnection();\r
- try {\r
-\r
- 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";\r
- st = connection.prepareStatement(query);\r
- rs = st.executeQuery();\r
-\r
- while (rs.next()) {\r
- Media m = new Media();\r
- m.setPersister(manager);\r
- m.setId(rs.getLong("id"));\r
- m.setTitle(rs.getString("title"));\r
- m.setDescription(rs.getString("description"));\r
- m.setItemId(rs.getLong("itemid"));\r
- m.setItemTypeId(rs.getLong("itemtypeid"));\r
- m.setHouseId(rs.getString("houseid"));\r
- m.setLength(rs.getLong("length"));\r
- m.setCreated(rs.getTimestamp("created"));\r
- m.setArchived(rs.getTimestamp("archived"));\r
- m.setPoster(rs.getBytes("poster"));\r
- if (result == null)\r
- result = new ArrayList<>();\r
- result.add(m);\r
- }\r
-\r
- connection.commit();\r
- } catch (Exception e) {\r
- try {\r
- connection.rollback();\r
- } catch (Exception e1) {\r
- }\r
- manager.throwError(e);\r
- } finally {\r
- try {\r
- if (rs != null)\r
- rs.close();\r
- } catch (Exception e1) {\r
- }\r
- try {\r
- if (st != null)\r
- st.close();\r
- } catch (Exception e1) {\r
- }\r
- manager.putDbContext(context);\r
- }\r
-\r
- return result;\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- public List<SearchResult> search(QueryObject queryObject) {\r
- manager.traceIn();\r
- if (queryObject == null || queryObject.getFilters() == null || queryObject.getFilters().size() == 0)\r
- throw new IllegalArgumentException("QueryObject not specified.");\r
-\r
- List<SearchResult> results = new ArrayList<SearchResult>();\r
-\r
- ResultSet rs = null;\r
- PreparedStatement st = null;\r
- DefaultContext context = manager.getDbContext();\r
- Connection connection = context.getConnection();\r
-\r
- try {\r
- String innerQuery = buildQueryCore(queryObject);\r
-\r
- if (queryObject.getActiveItemTypeId() == 0) {\r
- // keres�s az �sszes t�pusban\r
- // Ha nincs RenderParameter, akkor az eredm�ny egy\r
- // SearchResult-ba ker�l, egy�bk�nt\r
- // ItemType-onk�nt t�bbe\r
- results = getResultHeaders(connection, queryObject, innerQuery);\r
- } else {\r
- SearchResult sr = new SearchResult();\r
- ItemType itemType = (ItemType) manager.get(ItemType.class, queryObject.getActiveItemTypeId());\r
- sr.setItemType(itemType);\r
- // TODO\r
- // sr.setItemCount(rs.getLong(2));\r
- sr.setParameters(queryObject.getParameters());\r
- results.add(sr);\r
- }\r
-\r
- if (results.size() != 0) {\r
- SearchResult csr = results.get(0);\r
- String resultQuery = buildResultQuery(queryObject, innerQuery, csr);\r
- st = connection.prepareStatement(resultQuery);\r
-\r
- // int rpp = (int)parameter.getParameters().getRowPerPage();\r
- // st.setFetchSize(rpp);\r
- // st.setMaxRows(rpp);\r
-\r
- rs = st.executeQuery();\r
- List<Item> items = new ArrayList<Item>();\r
- ItemDAO dao = (ItemDAO) manager.getBaseDAO(Item.class);\r
- items = (List<Item>) (List<?>) dao.entities(context, rs);\r
- csr.setItems(items);\r
- rs.close();\r
- }\r
-\r
- connection.commit();\r
- } catch (Exception e) {\r
- try {\r
- connection.rollback();\r
- } catch (Exception e1) {\r
- e1.printStackTrace();\r
- }\r
- manager.throwError(e);\r
- } finally {\r
- try {\r
- if (rs != null)\r
- rs.close();\r
- } catch (Exception e1) {\r
- }\r
- try {\r
- if (st != null)\r
- st.close();\r
- } catch (Exception e1) {\r
- }\r
- manager.putDbContext(context);\r
- }\r
- manager.traceOut();\r
- return results;\r
- }\r
-\r
- public SearchResult<Item> search(String criteria, int fromResult, int toResult) {\r
- SearchResult<Item> result = new SearchResult<Item>();\r
-\r
- ResultSet rs = null;\r
- PreparedStatement st = null;\r
- DefaultContext context = manager.getDbContext();\r
- Connection connection = context.getConnection();\r
-\r
- try {\r
- StringBuffer sql = new StringBuffer();\r
- sql.append("select * from ((");\r
- 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");\r
- sql.append(\r
- " 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");\r
- sql.append(")UNION(");\r
- sql.append(\r
- "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");\r
- sql.append(\r
- " 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");\r
- sql.append(")UNION(");\r
- sql.append(\r
- "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");\r
- sql.append(" where (CONTAINS(mf3.houseId, ?) >= 1) and m3.itemid = i3.id and mf3.MEDIAID = m3.id");\r
- sql.append(")) order by title");\r
- String query = sql.toString();\r
- /*\r
- query = "SELECT i.* from item i, media m, mediafile mf WHERE m.ITEMID = i.id AND mf.MEDIAID = m.ID"\r
- + " AND (" + "(CONTAINS(i.TITLE, '" + criteria + "') >= 1) OR (CONTAINS(i.DESCRIPTION, '" + criteria\r
- + "') >= 1)" + " OR (CONTAINS(m.TITLE, '" + criteria + "') >= 1) OR (CONTAINS(m.DESCRIPTION, '"\r
- + criteria + "') >= 1)" + " OR (CONTAINS(mf.HOUSEID, '" + criteria\r
- + "') >= 1)) ORDER BY i.title";\r
- */\r
- // query = "SELECT * FROM ITEM ORDER BY title";\r
-\r
- st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
- for (int s = 1; s <= 7; s++) {\r
- st.setString(s, criteria);\r
- }\r
- rs = st.executeQuery();\r
- rs.last();\r
- result.setItemCount(rs.getRow());\r
-\r
- // set begining position\r
- if (fromResult > -1) {\r
- if (fromResult <= result.getItemCount()) {\r
- if (fromResult > 1) {\r
- rs.absolute(fromResult - 1);\r
- } else {\r
- rs.beforeFirst();\r
- }\r
- } else {\r
- if (result.getItemCount() > 0) {\r
- throw new Exception("Invalid searchResult 'from' position: " + fromResult + " total records: " + result.getItemCount() + " " + query);\r
- }\r
- }\r
- } else {\r
- rs.beforeFirst();\r
- }\r
-\r
- int maxRecords = toResult - fromResult;\r
-\r
- ItemDAO dao = (ItemDAO) manager.getBaseDAO(Item.class);\r
- result.setItems((List<Item>) (List<?>) dao.entities(context, rs, maxRecords));\r
-\r
- connection.commit();\r
- } catch (Exception e) {\r
- try {\r
- connection.rollback();\r
- } catch (Exception e1) {\r
- e1.printStackTrace();\r
- }\r
- manager.throwError(e);\r
- } finally {\r
- try {\r
- if (rs != null)\r
- rs.close();\r
- } catch (Exception e1) {\r
- }\r
- try {\r
- if (st != null)\r
- st.close();\r
- } catch (Exception e1) {\r
- }\r
- manager.putDbContext(context);\r
- }\r
- manager.traceOut();\r
-\r
- return result;\r
- }\r
-\r
- public SearchResult<ArchivedMedia> searchArchivedMedia(String criteria, List<String> searchFilters, String orderBy, boolean orderAscending, int fromResult,\r
+ public SearchResult<ArchivedMedia> search(String criteria, List<String> searchFilters, String orderBy, boolean orderAscending, int fromResult,\r
int toResult) {\r
SearchResult<ArchivedMedia> result = new SearchResult<>();\r
\r
Connection connection = context.getConnection();\r
try {\r
\r
- st = createArchiveMediaSearchStatement(connection, criteria, orderBy, orderAscending, typeIDs);\r
+ st = createStatement(connection, criteria, orderBy, orderAscending, typeIDs);\r
rs = st.executeQuery();\r
rs.last();\r
result.setItemCount(rs.getRow());\r
\r
int maxRecords = toResult - fromResult;\r
\r
- String[] criterias = criteria.replace("*", "").replace("+", " ").split(" ");\r
- if (criteria.startsWith("\"") && criteria.endsWith("\""))\r
- criterias = new String[] { criteria.replace("\"", "") };\r
+ String[] criterias = extractCriteriaWords(criteria);\r
List<ArchivedMedia> resultList = null;\r
logger.info("Processing query result, maxRecords {}", maxRecords);\r
-\r
while (rs.next() && maxRecords > 0) {\r
+ ItemType it = new ItemType();\r
+ it.setId(rs.getLong("mediaitemtypeid"));\r
+ it.setName(rs.getString("mediaitemtypename"));\r
+\r
+ Item item = new Item();\r
+ item.setId(rs.getLong("itemid"));\r
+ item.setTitle(rs.getString("itemtitle"));\r
+\r
+ Media media = new Media();\r
+\r
+ media.setItemId(item.getId());\r
+ media.setItemType(it);\r
+ media.setId(rs.getLong("mediaid"));\r
+ media.setTitle(rs.getString("mediatitle"));\r
+ media.setHouseId(rs.getString("mediahouseid"));\r
+ media.setArchived(rs.getTimestamp("archived"));\r
+ media.setLength(rs.getLong("length"));\r
+ media.setMediaFilesCount(rs.getInt("mediafilecount"));\r
+ media.setMediaFilesName(rs.getString("mediafilehouseid"));\r
+\r
ArchivedMedia am = new ArchivedMedia();\r
- Media media = manager.getMedia(rs.getLong("mediaid"));\r
am.setMedia(media);\r
- Item item = manager.getItem(media.getItemId());\r
am.setItem(item);\r
\r
if (resultList == null)\r
resultList = new ArrayList<>();\r
resultList.add(am);\r
\r
- setRelevant(criterias, am, media.getDescription());\r
- if (am.getRelevant() == null)\r
- setRelevant(criterias, am, item.getDescription());\r
-\r
- // media.setTitle(media.getTitle().replace("hirado", "<html><![CDATA[]]></html>"));\r
+ am.setRelevant(rs.getString("description"));\r
+ //setRelevant(criterias, am, rs.getString("description"));\r
maxRecords--;\r
}\r
logger.info("Query result processed");\r