--- /dev/null
+package user.jobengine.search;\r
+\r
+import java.util.List;\r
+import java.util.stream.Collectors;\r
+\r
+import org.apache.ibatis.jdbc.SQL;\r
+\r
+public class SearchSQL {\r
+\r
+ private static String getCriteriasRegexPattern(String criteria) {\r
+ String[] criterias = criteria.replace("*", "").replace("+", " ").split(" ");\r
+ if (criteria.startsWith("\"") && criteria.endsWith("\""))\r
+ criterias = new String[] { criteria.replace("\"", "") };\r
+\r
+ StringBuilder sb = new StringBuilder();\r
+ for (String word : criterias) {\r
+ if (sb.length() > 0)\r
+ sb.append("|");\r
+ sb.append(word);\r
+ }\r
+ return sb.toString();\r
+ }\r
+\r
+ public static SQL descriptionsQuery(String criteria, List<Long> mediaIds) {\r
+ String criteriasPattern = getCriteriasRegexPattern(criteria);\r
+ List<String> ids = mediaIds.stream().map(id -> String.valueOf(id)).collect(Collectors.toList());\r
+ SQL sql = new SQL();\r
+ sql.SELECT("mediaid");\r
+ sql.SELECT(String.format("HIGHLIGHT(description, '<span class=''rhl''>', '</span>', '%s') description", criteriasPattern));\r
+ sql.FROM("MEDIADESCRIPTION");\r
+ sql.WHERE(String.format("mediaid IN (%s)", String.join(",", ids)));\r
+ return sql;\r
+ }\r
+\r
+// private PreparedStatement createGroupingStatement(Connection connection, String criteria, SearchOptions options) throws Exception {\r
+// boolean simpleSearch = manager.getSystemConfig().value("datasource.mediacube.simple-search", true);\r
+// String criteriasPattern = getCriteriasRegexPattern(criteria);\r
+//\r
+// SQL innerSql = new SQL();\r
+// innerSql.SELECT("max(vi.mediaid)");\r
+// innerSql.FROM("VW_ITEMS_WITH_PATH vi", "MEDIADESCRIPTION md");\r
+// innerSql.WHERE("vi.mediafileid = md.mediafileid");\r
+//\r
+// if (simpleSearch) {\r
+// // TODO ezen az agon nem jo!!!!!\r
+// String simpleTextCriteria = formatSimpleSearchValue(criteria);\r
+// if (simpleTextCriteria != null && simpleTextCriteria.trim().length() > 0) {\r
+// innerSql.AND();\r
+// innerSql.WHERE("(");\r
+// innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.mediatitle", simpleTextCriteria));\r
+// innerSql.OR();\r
+// innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.itemtitle", simpleTextCriteria));\r
+// innerSql.OR();\r
+// innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.mediarelativepath", simpleTextCriteria));\r
+// innerSql.WHERE(")");\r
+// }\r
+// } else {\r
+// String textCriteria = formatSearchValue(criteria);\r
+// if (textCriteria != null && textCriteria.trim().length() > 0) {\r
+// innerSql.AND();\r
+// innerSql.WHERE(String.format("CONTAINS(md.description, '%s') >= 1", textCriteria));\r
+// }\r
+// }\r
+// innerSql.GROUP_BY("vi.mediarelativepath");\r
+//\r
+// SQL mainSql = new SQL();\r
+// if (options.isCountOnly())\r
+// mainSql.SELECT("COUNT(1) AS NumberOfRecords");\r
+// else\r
+// mainSql.SELECT("vi.itemid", "vi.itemtitle", "vi.mediaid", "vi.mediatitle", "vi.mediarelativepath", "vi.mediaarchived", "vi.mediacreation",\r
+// "vi.medialength", "vf.mediafilecount",\r
+// String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description", criteriasPattern));\r
+//\r
+// mainSql.FROM("VW_ITEMS_WITH_PATH vi", "VW_MEDIAFILES vf", "MEDIADESCRIPTION md");\r
+// mainSql.WHERE("vf.mediaid = vi.mediaid");\r
+// mainSql.AND();\r
+// mainSql.WHERE("vi.mediafileid = md.mediafileid");\r
+// mainSql.AND();\r
+// mainSql.WHERE(String.format("vi.mediaid IN (\r\n%s\r\n)", innerSql.toString()));\r
+//\r
+// StringBuilder criteriaForType = options.getCriteriaForType();\r
+// if (criteriaForType != null) {\r
+// mainSql.AND();\r
+// mainSql.WHERE(String.format("vi.mediaitemtypeid IN (%s)", criteriaForType.toString()));\r
+// }\r
+//\r
+// StringBuilder criteriaForTag = options.getCriteriaForTag();\r
+// if (criteriaForTag != null) {\r
+// SQL tagSql = new SQL();\r
+// tagSql.SELECT("mediaid");\r
+// tagSql.FROM("MEDIATAGS");\r
+// tagSql.WHERE(String.format("vi.mediaitemtypeid IN (%s)", criteriaForTag.toString()));\r
+//\r
+// mainSql.AND();\r
+// mainSql.WHERE(String.format("vi.mediaid IN (%s)", tagSql.toString()));\r
+// }\r
+//\r
+// if (options.getFrom() != null) {\r
+// mainSql.AND();\r
+// mainSql.WHERE(String.format("vi.mediacreation > '%s'", df.format(options.getFrom())));\r
+// }\r
+//\r
+// if (options.getTo() != null) {\r
+// mainSql.AND();\r
+// mainSql.WHERE(String.format("vi.mediacreation < '%s'", df.format(options.getTo())));\r
+// }\r
+//\r
+// if (options.isMissingProxy()) {\r
+// mainSql.AND();\r
+// mainSql.WHERE("vf.mediafilecount = 1");\r
+// }\r
+//\r
+// if (options.getDescLength() > 0) {\r
+// mainSql.AND();\r
+// mainSql.WHERE(String.format("LENGTH(vi.mediadescription) < %s", options.getDescLength()));\r
+// }\r
+//\r
+// if (!options.isCountOnly() && (options.getToResult() != 0)) {\r
+// mainSql.ORDER_BY("vi.mediacreation DESC");\r
+// mainSql.LIMIT((options.getToResult() - options.getFromResult()));\r
+// mainSql.OFFSET(options.getFromResult());\r
+// }\r
+//\r
+// String query = mainSql.toString();\r
+// logger.info(query);\r
+// PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);\r
+// return st;\r
+//}\r
+\r
+}\r