This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 57
/
ProjectSearch.java
134 lines (110 loc) · 3.95 KB
/
ProjectSearch.java
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package org.zanata.action;
import java.io.Serializable;
import java.util.List;
import javax.faces.model.DataModel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.queryParser.ParseException;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.zanata.dao.AccountDAO;
import org.zanata.dao.ProjectDAO;
import org.zanata.model.HAccount;
import org.zanata.model.HProject;
import org.zanata.security.ZanataIdentity;
import com.google.common.collect.Lists;
import org.zanata.ui.AbstractAutocomplete;
import org.zanata.util.ServiceLocator;
/**
* This will search both projects and people.
*/
@Name("projectSearch")
@Scope(ScopeType.CONVERSATION)
@AutoCreate
public class ProjectSearch implements Serializable {
private static final long serialVersionUID = 1L;
private final static int DEFAULT_PAGE_SIZE = 30;
@In
private ZanataIdentity identity;
@Getter
private ProjectAutocomplete projectAutocomplete = new ProjectAutocomplete();
private QueryProjectPagedListDataModel queryProjectPagedListDataModel =
new QueryProjectPagedListDataModel(DEFAULT_PAGE_SIZE);
// Count of result to be return as part of autocomplete
private final static int INITIAL_RESULT_COUNT = 5;
public DataModel getProjectPagedListDataModel() {
queryProjectPagedListDataModel.setIncludeObsolete(identity
.hasPermission("HProject", "view-obsolete"));
return queryProjectPagedListDataModel;
}
@AllArgsConstructor
@NoArgsConstructor
public class SearchResult {
@Getter
private HProject project;
@Getter
private HAccount account;
public boolean isProjectNull() {
return project == null;
}
public boolean isUserNull() {
return account == null;
}
}
private class ProjectAutocomplete extends
AbstractAutocomplete<SearchResult> {
private ProjectDAO projectDAO =
ServiceLocator.instance().getInstance(ProjectDAO.class);
private AccountDAO accountDAO = ServiceLocator.instance().getInstance(
AccountDAO.class);
/**
* Return results on search
*/
@Override
public List<SearchResult> suggest() {
List<SearchResult> result = Lists.newArrayList();
if (StringUtils.isEmpty(getQuery())) {
return result;
}
try {
String searchQuery = getQuery().trim();
List<HProject> searchResult =
projectDAO.searchProjects(
searchQuery,
INITIAL_RESULT_COUNT,
0,
ZanataIdentity.instance().hasPermission(
"HProject", "view-obsolete"));
for (HProject project : searchResult) {
result.add(new SearchResult(project, null));
}
List<HAccount> hAccounts = accountDAO.searchQuery(searchQuery);
for (HAccount hAccount : hAccounts) {
result.add(new SearchResult(null, hAccount));
}
result.add(new SearchResult());
return result;
} catch (ParseException pe) {
return result;
}
}
/**
* Action when an item is selected
*/
@Override
public void onSelectItemAction() {
// nothing here
}
@Override
public void setQuery(String query) {
queryProjectPagedListDataModel.setQuery(query);
super.setQuery(query);
}
}
}