1 package org.argeo.connect.e4.parts;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Property;
7 import javax.jcr.RepositoryException;
8 import javax.jcr.query.Query;
9 import javax.jcr.query.QueryResult;
10 import javax.jcr.query.Row;
11
12 import org.argeo.connect.ConnectConstants;
13 import org.argeo.connect.ConnectException;
14 import org.argeo.connect.resources.ResourcesNames;
15 import org.argeo.connect.ui.ConnectColumnDefinition;
16 import org.argeo.connect.ui.IJcrTableViewer;
17 import org.argeo.connect.ui.util.JcrHtmlLabelProvider;
18 import org.argeo.connect.ui.widgets.TagLikeDropDown;
19 import org.argeo.connect.util.ConnectJcrUtils;
20 import org.argeo.connect.util.XPathUtils;
21 import org.argeo.eclipse.ui.EclipseUiUtils;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.SelectionAdapter;
24 import org.eclipse.swt.events.SelectionEvent;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Button;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Text;
29
30
31 public class DefaultSearchEntityEditor extends AbstractSearchEntityEditor implements IJcrTableViewer {
32
33
34
35
36
37 private List<ConnectColumnDefinition> colDefs;
38 private TagLikeDropDown tagDD;
39
40 @Override
41 public void init() {
42 super.init();
43
44 colDefs = new ArrayList<ConnectColumnDefinition>();
45 colDefs.add(new ConnectColumnDefinition("Display Name", new JcrHtmlLabelProvider(Property.JCR_TITLE), 300));
46 colDefs.add(new ConnectColumnDefinition("Tags", new JcrHtmlLabelProvider(ResourcesNames.CONNECT_TAGS), 300));
47 }
48
49
50 protected void populateStaticFilters(Composite body) {
51 body.setLayout(new GridLayout(4, false));
52
53 Text tagTxt = createBoldLT(body, "Tag", "",
54 "Select from list to find entities that are categorised with this tag");
55 tagDD = new TagLikeDropDown(getSession(), getResourceService(), ConnectConstants.RESOURCE_TAG, tagTxt);
56
57 Button goBtn = new Button(body, SWT.PUSH);
58 goBtn.setText("Search");
59 goBtn.addSelectionListener(new SelectionAdapter() {
60 private static final long serialVersionUID = 1L;
61
62 @Override
63 public void widgetSelected(SelectionEvent e) {
64 refreshFilteredList();
65 }
66 });
67
68 Button resetBtn = new Button(body, SWT.PUSH);
69 resetBtn.setText("Reset");
70 resetBtn.addSelectionListener(new SelectionAdapter() {
71 private static final long serialVersionUID = 1L;
72
73 @Override
74 public void widgetSelected(SelectionEvent e) {
75 tagDD.reset(null);
76 }
77 });
78 }
79
80
81 protected void refreshFilteredList() {
82 try {
83
84 StringBuilder builder = new StringBuilder();
85 builder.append("//element(*, ").append(getEntityType()).append(")");
86 String attrQuery = XPathUtils.localAnd(XPathUtils.getFreeTextConstraint(getFilterText().getText()),
87 XPathUtils.getPropertyEquals(ResourcesNames.CONNECT_TAGS, tagDD.getText()));
88 if (EclipseUiUtils.notEmpty(attrQuery))
89 builder.append("[").append(attrQuery).append("]");
90 builder.append(" order by @").append(Property.JCR_TITLE).append(" ascending");
91 Query query = XPathUtils.createQuery(getSession(), builder.toString());
92 QueryResult result = query.execute();
93 Row[] rows = ConnectJcrUtils.rowIteratorToArray(result.getRows());
94 setViewerInput(rows);
95 } catch (RepositoryException e) {
96 throw new ConnectException("Unable to list " + getEntityType() + " entities with static filter ", e);
97 }
98 }
99
100
101 @Override
102 public List<ConnectColumnDefinition> getColumnDefinition(String extractId) {
103 return colDefs;
104 }
105 }