git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 18 Jul 2018 14:18:02 +0000 (14:18 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 18 Jul 2018 14:18:02 +0000 (14:18 +0000)
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFinder.java

index 8f1dd3acde9199e71c5f7fde6a93e4982cb97d73..27d2f0b4a528e6291c7244b3074c2aeee1731e29 100644 (file)
@@ -3,7 +3,6 @@ package user.jobengine.db;
 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
@@ -58,114 +57,6 @@ public class ItemDAOEx {
                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
@@ -446,124 +337,4 @@ public class ItemDAOEx {
                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
index 2bd2393d5a974d203b8b432bef58f3e33da69cb2..2c1c95ab4ede05f0330fd39b7a8bd7fa49cd1fc4 100644 (file)
@@ -1020,8 +1020,8 @@ public class ItemManager extends MemoryCache implements IItemManager {
                        int toResult) {\r
                traceIn();\r
                SearchResult<ArchivedMedia> result = null;\r
-               ItemDAOEx itemDb = new ItemDAOEx(this);\r
-               result = itemDb.searchArchivedMedia(criteria, searchFilters, orderBy, orderAscending, fromResult, toResult);\r
+               MediaFinder finder = new MediaFinder(this);\r
+               result = finder.search(criteria, searchFilters, orderBy, orderAscending, fromResult, toResult);\r
                traceOut();\r
                return result;\r
        }\r
index 7d91c1c02ed0c7529b99c4619e9c46c6763c25b4..8832c30b6df95a0c25971de1960eb8cf7c4d613f 100644 (file)
@@ -5,9 +5,7 @@ import java.sql.PreparedStatement;
 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
@@ -22,44 +20,8 @@ public class MediaFinder {
                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
@@ -73,7 +35,19 @@ public class MediaFinder {
 \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
@@ -98,118 +72,11 @@ public class MediaFinder {
                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
@@ -227,226 +94,7 @@ public class MediaFinder {
                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
@@ -458,7 +106,7 @@ public class MediaFinder {
                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
@@ -482,28 +130,40 @@ public class MediaFinder {
 \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