1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.opencastproject.elasticsearch.index.objects.theme;
23
24 import org.opencastproject.elasticsearch.api.SearchTerms;
25 import org.opencastproject.elasticsearch.api.SearchTerms.Quantifier;
26 import org.opencastproject.elasticsearch.impl.AbstractElasticsearchQueryBuilder;
27 import org.opencastproject.elasticsearch.impl.IndexSchema;
28
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 import java.util.ArrayList;
33
34
35
36
37 public class ThemeQueryBuilder extends AbstractElasticsearchQueryBuilder<ThemeSearchQuery> {
38
39
40 private static final Logger logger = LoggerFactory.getLogger(ThemeQueryBuilder.class);
41
42
43
44
45
46
47
48 public ThemeQueryBuilder(ThemeSearchQuery query) {
49 super(query);
50 }
51
52 @Override
53 public void buildQuery(ThemeSearchQuery query) {
54
55 if (query.getOrganization() == null) {
56 throw new IllegalStateException("No organization set on the theme search query!");
57 }
58
59 and(ThemeIndexSchema.ORGANIZATION, query.getOrganization());
60
61
62 if (query.getIdentifiers().length > 0) {
63 and(ThemeIndexSchema.ID, query.getIdentifiers());
64 }
65
66 if (query.getCreator() != null) {
67 and(ThemeIndexSchema.CREATOR, query.getCreator());
68 }
69
70 if (query.getCreatedFrom() != null && query.getCreatedTo() != null) {
71 and(ThemeIndexSchema.CREATION_DATE, query.getCreatedFrom(), query.getCreatedTo());
72 }
73
74 if (query.getIsDefault() != null) {
75 and(ThemeIndexSchema.DEFAULT, query.getIsDefault());
76 }
77
78 if (query.getDescription() != null) {
79 and(ThemeIndexSchema.DESCRIPTION, query.getDescription());
80 }
81
82 if (query.getName() != null) {
83 and(ThemeIndexSchema.NAME, query.getName());
84 }
85
86 if (query.getBumperActive() != null) {
87 and(ThemeIndexSchema.BUMPER_ACTIVE, query.getBumperActive());
88 }
89
90 if (query.getBumperFile() != null) {
91 and(ThemeIndexSchema.BUMPER_FILE, query.getBumperFile());
92 }
93
94 if (query.getLicenseSlideActive() != null) {
95 and(ThemeIndexSchema.LICENSE_SLIDE_ACTIVE, query.getLicenseSlideActive());
96 }
97
98 if (query.getLicenseSlideBackground() != null) {
99 and(ThemeIndexSchema.LICENSE_SLIDE_BACKGROUND, query.getLicenseSlideBackground());
100 }
101
102 if (query.getLicenseSlideDescription() != null) {
103 and(ThemeIndexSchema.LICENSE_SLIDE_DESCRIPTION, query.getLicenseSlideDescription());
104 }
105
106 if (query.getTrailerActive() != null) {
107 and(ThemeIndexSchema.TRAILER_ACTIVE, query.getTrailerActive());
108 }
109
110 if (query.getTrailerFile() != null) {
111 and(ThemeIndexSchema.TRAILER_FILE, query.getTrailerFile());
112 }
113
114 if (query.getTitleSlideActive() != null) {
115 and(ThemeIndexSchema.TITLE_SLIDE_ACTIVE, query.getTitleSlideActive());
116 }
117
118 if (query.getTitleSlideBackground() != null) {
119 and(ThemeIndexSchema.TITLE_SLIDE_BACKGROUND, query.getTitleSlideBackground());
120 }
121
122 if (query.getTitleSlideMetadata() != null) {
123 and(ThemeIndexSchema.TITLE_SLIDE_METADATA, query.getTitleSlideMetadata());
124 }
125
126 if (query.getWatermarkActive() != null) {
127 and(ThemeIndexSchema.WATERMARK_ACTIVE, query.getWatermarkActive());
128 }
129
130 if (query.getWatermarkFile() != null) {
131 and(ThemeIndexSchema.WATERMARK_FILE, query.getWatermarkFile());
132 }
133
134 if (query.getWatermarkPosition() != null) {
135 and(ThemeIndexSchema.WATERMARK_POSITION, query.getWatermarkPosition());
136 }
137
138
139 if (query.getTerms() != null) {
140 for (SearchTerms<String> terms : query.getTerms()) {
141 StringBuilder queryText = new StringBuilder();
142 for (String term : terms.getTerms()) {
143 if (queryText.length() > 0) {
144 queryText.append(" ");
145 }
146 queryText.append(term);
147 }
148
149 fuzzy = query.isFuzzySearch();
150 this.text = queryText.toString();
151
152 if (Quantifier.All.equals(terms.getQuantifier())) {
153 if (groups == null) {
154 groups = new ArrayList<ValueGroup>();
155 }
156 if (query.isFuzzySearch()) {
157 logger.warn("All quantifier not supported in conjunction with wildcard text");
158 }
159 groups.add(new ValueGroup(IndexSchema.TEXT, (Object[]) terms.getTerms().toArray(new String[terms.size()])));
160 }
161 }
162 }
163
164
165 if (query.getFilter() != null) {
166 this.filter = query.getFilter();
167 }
168
169 }
170
171 }