]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java
first draft for "query bundles" form
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.ui.dist / src / main / java / org / argeo / slc / client / ui / dist / views / QueryBundlesForm.java
1 package org.argeo.slc.client.ui.dist.views;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.argeo.ArgeoException;
6 import org.argeo.slc.client.ui.dist.DistPlugin;
7 import org.argeo.slc.jcr.SlcNames;
8 import org.eclipse.swt.SWT;
9 import org.eclipse.swt.custom.SashForm;
10 import org.eclipse.swt.layout.GridData;
11 import org.eclipse.swt.layout.GridLayout;
12 import org.eclipse.swt.widgets.Button;
13 import org.eclipse.swt.widgets.Composite;
14 import org.eclipse.swt.widgets.Event;
15 import org.eclipse.swt.widgets.Label;
16 import org.eclipse.swt.widgets.Listener;
17 import org.eclipse.swt.widgets.Text;
18
19 /** Query SLC Repo to get some artifacts given some predefined parameters */
20 public class QueryBundlesForm extends AbstractQueryArtifactsView implements
21 SlcNames {
22 private static final Log log = LogFactory.getLog(QueryBundlesForm.class);
23 public static final String ID = DistPlugin.ID + ".queryBundlesForm";
24
25 // widgets
26 private Button executeBtn;
27 private Text symbolicName;
28 private Text importedPackage;
29 private Text exportedPackage;
30 private SashForm sashForm;
31
32 // shortcuts
33 final static String SBA = "sba";
34 final static String SIP = "sip";
35 final static String SEP = "sep";
36
37 private Composite top, bottom;
38
39 @Override
40 public void createPartControl(Composite parent) {
41
42 sashForm = new SashForm(parent, SWT.VERTICAL);
43 sashForm.setSashWidth(4);
44 sashForm.setLayout(new GridLayout(1, false));
45
46 top = new Composite(sashForm, SWT.NONE);
47 top.setLayout(new GridLayout(1, false));
48
49 bottom = new Composite(sashForm, SWT.NONE);
50 bottom.setLayout(new GridLayout(1, false));
51
52 sashForm.setWeights(new int[] { 25, 75 });
53
54 createQueryForm(top);
55 createResultPart(bottom);
56 }
57
58 public void createQueryForm(Composite parent) {
59 Label lbl;
60 GridData gd;
61
62 GridLayout gl = new GridLayout(2, false);
63 gl.marginTop = 5;
64 parent.setLayout(gl);
65
66 // Bundle Name
67 lbl = new Label(parent, SWT.SINGLE);
68 lbl.setText("Bundle name: ");
69 symbolicName = new Text(parent, SWT.SINGLE | SWT.BORDER);
70
71 // imported package
72 lbl = new Label(parent, SWT.SINGLE);
73 lbl.setText("Imported package: ");
74 importedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
75
76 // exported package
77 lbl = new Label(parent, SWT.SINGLE);
78 lbl.setText("Exported package: ");
79 exportedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
80
81 executeBtn = new Button(parent, SWT.PUSH);
82 executeBtn.setText("Search");
83 gd = new GridData();
84 gd.horizontalSpan = 2;
85 executeBtn.setLayoutData(gd);
86
87 Listener executeListener = new Listener() {
88 public void handleEvent(Event event) {
89 refreshQuery();
90 }
91 };
92 executeBtn.addListener(SWT.Selection, executeListener);
93 }
94
95 public void refreshQuery() {
96 String queryStr = generateStatement();
97 executeQuery(queryStr);
98 bottom.layout();
99 sashForm.layout();
100 }
101
102 private String generateStatement() {
103 try {
104 // shortcuts
105 boolean hasFirstClause = false;
106 boolean ipClause = importedPackage.getText() != null
107 && !importedPackage.getText().trim().equals("");
108 boolean epClause = exportedPackage.getText() != null
109 && !exportedPackage.getText().trim().equals("");
110
111 StringBuffer sb = new StringBuffer();
112 // Select
113 sb.append("select " + SBA + ".* ");
114 if (ipClause)
115 sb.append(", " + SIP + ".* ");
116 if (epClause)
117 sb.append(", " + SEP + ".* ");
118
119 sb.append(" from [");
120 sb.append(SLC_BUNDLE_ARTIFACT);
121 sb.append("] as " + SBA + " ");
122
123 // join
124 if (ipClause) {
125 sb.append(" inner join [");
126 sb.append(SLC_IMPORTED_PACKAGE);
127 sb.append("] as " + SIP + " on isdescendantnode(" + SIP + ", "
128 + SBA + ") ");
129 }
130
131 if (epClause) {
132 sb.append(" inner join [");
133 sb.append(SLC_EXPORTED_PACKAGE);
134 sb.append("] as " + SEP + " on isdescendantnode(" + SEP + ", "
135 + SBA + ") ");
136 }
137
138 // where
139 sb.append(" where ");
140 if (symbolicName.getText() != null
141 && !symbolicName.getText().trim().equals("")) {
142 sb.append("sba.[" + SLC_SYMBOLIC_NAME + "] like '"
143 + symbolicName.getText().replace('*', '%') + "'");
144 hasFirstClause = true;
145 }
146
147 if (ipClause) {
148 if (hasFirstClause)
149 sb.append(" AND ");
150 sb.append(SIP + ".[" + SLC_NAME + "] like '"
151 + importedPackage.getText().replace('*', '%') + "'");
152 hasFirstClause = true;
153 }
154
155 if (epClause) {
156 if (hasFirstClause)
157 sb.append(" AND ");
158 sb.append(SEP + ".[" + SLC_NAME + "] like '"
159 + exportedPackage.getText().replace('*', '%') + "'");
160 }
161
162 if (log.isDebugEnabled())
163 log.debug("Statement : " + sb.toString());
164
165 return sb.toString();
166 } catch (Exception e) {
167 throw new ArgeoException(
168 "Cannot generate where statement to get artifacts", e);
169 }
170 }
171
172 @Override
173 public void setFocus() {
174 executeBtn.setFocus();
175 }
176 }