1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.samples.model;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.MgnlNodeType;
38 import info.magnolia.cms.util.QueryUtil;
39 import info.magnolia.jcr.util.ContentMap;
40 import info.magnolia.rendering.model.RenderingModel;
41 import info.magnolia.rendering.model.RenderingModelImpl;
42 import info.magnolia.rendering.template.RenderableDefinition;
43 import info.magnolia.repository.RepositoryConstants;
44 import info.magnolia.templating.functions.TemplatingFunctions;
45
46 import java.util.ArrayList;
47 import java.util.Collection;
48 import java.util.Iterator;
49 import java.util.List;
50
51 import javax.inject.Inject;
52 import javax.jcr.Node;
53 import javax.jcr.RepositoryException;
54
55 import org.apache.commons.lang.StringUtils;
56
57
58
59
60
61
62
63
64
65
66 public class SampleComponentModel extends RenderingModelImpl<RenderableDefinition> {
67
68 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(SampleComponentModel.class);
69
70 private String query;
71 final private TemplatingFunctions functions;
72
73
74 @Inject
75 public SampleComponentModel(Node content, RenderableDefinition definition, RenderingModel<?> parent, TemplatingFunctions functions) {
76 super(content, definition, parent);
77 this.functions = functions;
78 log.info("Running sample component model");
79
80 }
81
82 public String getQuery() {
83 return query;
84 }
85
86 public void setQuery(String query) {
87 this.query = query;
88 }
89
90 public List<ContentMap> getSearchResult() throws RepositoryException{
91 if( StringUtils.isEmpty(query)) {
92 return null;
93 }
94 String rootPagePath = functions.root(content, MgnlNodeType.NT_PAGE).getPath();
95
96 List<ContentMap> results = new ArrayList<ContentMap>();
97
98 String sql = "SELECT * from nt:base WHERE jcr:path like '"+rootPagePath+"/%' AND contains(*, '"+query+"') AND (jcr:primaryType = 'mgnl:page' OR jcr:primaryType = 'mgnl:area' OR jcr:primaryType = 'mgnl:component') order by jcr:path";
99
100
101 Collection<Content> contentList = QueryUtil.query(RepositoryConstants.WEBSITE, sql);
102 for(Iterator<Content> it=contentList.iterator(); it.hasNext();){
103 results.add(new ContentMap(it.next().getJCRNode()));
104 }
105
106 return results;
107 }
108
109 }