]> git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java
c4980d53fe552095576dba1a6a8011a26cda2ad2
[gpl/argeo-slc.git] / cms / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / views / QueryBundlesForm.java
1 package org.argeo.slc.client.ui.dist.views;
2
3 import org.argeo.slc.SlcException;
4 import org.argeo.slc.SlcNames;
5 import org.argeo.slc.SlcTypes;
6 import org.argeo.slc.client.ui.dist.DistPlugin;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.custom.SashForm;
9 import org.eclipse.swt.layout.FillLayout;
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, SlcTypes {
22 // private static final Log log = LogFactory.getLog(QueryBundlesForm.class);
23 public static final String ID = DistPlugin.PLUGIN_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 private Composite top, bottom;
33
34 @Override
35 public void createPartControl(Composite parent) {
36
37 sashForm = new SashForm(parent, SWT.VERTICAL);
38 sashForm.setSashWidth(4);
39 // Enable the different parts to fill the whole page when the tab is
40 // maximized
41 sashForm.setLayout(new FillLayout());
42
43 top = new Composite(sashForm, SWT.NONE);
44 top.setLayout(new GridLayout(1, false));
45
46 bottom = new Composite(sashForm, SWT.NONE);
47 bottom.setLayout(new GridLayout(1, false));
48
49 sashForm.setWeights(new int[] { 25, 75 });
50
51 createQueryForm(top);
52 createResultPart(bottom);
53 }
54
55 public void createQueryForm(Composite parent) {
56 Label lbl;
57 GridData gd;
58
59 GridLayout gl = new GridLayout(2, false);
60 gl.marginTop = 5;
61 parent.setLayout(gl);
62
63 // Bundle Name
64 lbl = new Label(parent, SWT.SINGLE);
65 lbl.setText("Symbolic name");
66 symbolicName = new Text(parent, SWT.SINGLE | SWT.BORDER);
67 gd = new GridData(GridData.FILL_HORIZONTAL);
68 gd.grabExcessHorizontalSpace = true;
69 symbolicName.setLayoutData(gd);
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 gd = new GridData(GridData.FILL_HORIZONTAL);
76 gd.grabExcessHorizontalSpace = true;
77 importedPackage.setLayoutData(gd);
78
79 // exported package
80 lbl = new Label(parent, SWT.SINGLE);
81 lbl.setText("Exported package");
82 exportedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
83 gd = new GridData(GridData.FILL_HORIZONTAL);
84 gd.grabExcessHorizontalSpace = true;
85 exportedPackage.setLayoutData(gd);
86
87 executeBtn = new Button(parent, SWT.PUSH);
88 executeBtn.setText("Search");
89 gd = new GridData();
90 gd.horizontalSpan = 2;
91 executeBtn.setLayoutData(gd);
92
93 Listener executeListener = new Listener() {
94 private static final long serialVersionUID = 6267263421349073712L;
95
96 public void handleEvent(Event event) {
97 refreshQuery();
98 }
99 };
100 executeBtn.addListener(SWT.Selection, executeListener);
101 }
102
103 public void refreshQuery() {
104 String queryStr = generateStatement();
105 executeQuery(queryStr);
106 bottom.layout();
107 sashForm.layout();
108 }
109
110 private String generateStatement() {
111 try {
112 // shortcuts
113 boolean hasFirstClause = false;
114 boolean ipClause = importedPackage.getText() != null
115 && !importedPackage.getText().trim().equals("");
116 boolean epClause = exportedPackage.getText() != null
117 && !exportedPackage.getText().trim().equals("");
118
119 StringBuffer sb = new StringBuffer();
120 // Select
121 sb.append("select " + SBA + ".*, " + SAVB + ".* ");
122 sb.append(" from " + SAVB);
123
124 // join
125 sb.append(" inner join ");
126 sb.append(SBA);
127 sb.append(" on isdescendantnode(" + SBA + ", " + SAVB + ") ");
128 if (ipClause) {
129 sb.append(" inner join ");
130 sb.append(SIP);
131 sb.append(" on isdescendantnode(" + SIP + ", " + SBA + ") ");
132 }
133
134 if (epClause) {
135 sb.append(" inner join ");
136 sb.append(SEP);
137 sb.append(" on isdescendantnode(" + SEP + ", " + SBA + ") ");
138 }
139
140 // where
141 sb.append(" where ");
142 if (symbolicName.getText() != null
143 && !symbolicName.getText().trim().equals("")) {
144 sb.append(SBA + ".[" + SLC_SYMBOLIC_NAME + "] like '"
145 + symbolicName.getText().replace('*', '%') + "'");
146 hasFirstClause = true;
147 }
148
149 if (ipClause) {
150 if (hasFirstClause)
151 sb.append(" AND ");
152 sb.append(SIP + ".[" + SLC_NAME + "] like '"
153 + importedPackage.getText().replace('*', '%') + "'");
154 hasFirstClause = true;
155 }
156
157 if (epClause) {
158 if (hasFirstClause)
159 sb.append(" AND ");
160 sb.append(SEP + ".[" + SLC_NAME + "] like '"
161 + exportedPackage.getText().replace('*', '%') + "'");
162 }
163 return sb.toString();
164 } catch (Exception e) {
165 throw new SlcException(
166 "Cannot generate where statement to get artifacts", e);
167 }
168 }
169
170 @Override
171 public void setFocus() {
172 executeBtn.setFocus();
173 }
174 }