]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java
e1d741afa9b82e69ec20aa19317b18b3d952afc9
[gpl/argeo-slc.git] / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / views / QueryBundlesForm.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.argeo.slc.client.ui.dist.views;
17
18 import org.apache.commons.logging.Log;
19 import org.apache.commons.logging.LogFactory;
20 import org.argeo.ArgeoException;
21 import org.argeo.slc.client.ui.dist.DistPlugin;
22 import org.argeo.slc.jcr.SlcNames;
23 import org.argeo.slc.jcr.SlcTypes;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.custom.SashForm;
26 import org.eclipse.swt.layout.FillLayout;
27 import org.eclipse.swt.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Button;
30 import org.eclipse.swt.widgets.Composite;
31 import org.eclipse.swt.widgets.Event;
32 import org.eclipse.swt.widgets.Label;
33 import org.eclipse.swt.widgets.Listener;
34 import org.eclipse.swt.widgets.Text;
35
36 /** Query SLC Repo to get some artifacts given some predefined parameters */
37 public class QueryBundlesForm extends AbstractQueryArtifactsView implements
38 SlcNames, SlcTypes {
39 private static final Log log = LogFactory.getLog(QueryBundlesForm.class);
40 public static final String ID = DistPlugin.ID + ".queryBundlesForm";
41
42 // widgets
43 private Button executeBtn;
44 private Text symbolicName;
45 private Text importedPackage;
46 private Text exportedPackage;
47 private SashForm sashForm;
48
49 private Composite top, bottom;
50
51 @Override
52 public void createPartControl(Composite parent) {
53
54 sashForm = new SashForm(parent, SWT.VERTICAL);
55 sashForm.setSashWidth(4);
56 // Enable the different parts to fill the whole page when the tab is
57 // maximized
58 sashForm.setLayout(new FillLayout());
59
60 top = new Composite(sashForm, SWT.NONE);
61 top.setLayout(new GridLayout(1, false));
62
63 bottom = new Composite(sashForm, SWT.NONE);
64 bottom.setLayout(new GridLayout(1, false));
65
66 sashForm.setWeights(new int[] { 25, 75 });
67
68 createQueryForm(top);
69 createResultPart(bottom);
70 }
71
72 public void createQueryForm(Composite parent) {
73 Label lbl;
74 GridData gd;
75
76 GridLayout gl = new GridLayout(2, false);
77 gl.marginTop = 5;
78 parent.setLayout(gl);
79
80 // Bundle Name
81 lbl = new Label(parent, SWT.SINGLE);
82 lbl.setText("Symbolic name");
83 symbolicName = new Text(parent, SWT.SINGLE | SWT.BORDER);
84 gd = new GridData(GridData.FILL_HORIZONTAL);
85 gd.grabExcessHorizontalSpace = true;
86 symbolicName.setLayoutData(gd);
87
88 // imported package
89 lbl = new Label(parent, SWT.SINGLE);
90 lbl.setText("Imported package");
91 importedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
92 gd = new GridData(GridData.FILL_HORIZONTAL);
93 gd.grabExcessHorizontalSpace = true;
94 importedPackage.setLayoutData(gd);
95
96 // exported package
97 lbl = new Label(parent, SWT.SINGLE);
98 lbl.setText("Exported package");
99 exportedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
100 gd = new GridData(GridData.FILL_HORIZONTAL);
101 gd.grabExcessHorizontalSpace = true;
102 exportedPackage.setLayoutData(gd);
103
104 executeBtn = new Button(parent, SWT.PUSH);
105 executeBtn.setText("Search");
106 gd = new GridData();
107 gd.horizontalSpan = 2;
108 executeBtn.setLayoutData(gd);
109
110 Listener executeListener = new Listener() {
111 public void handleEvent(Event event) {
112 refreshQuery();
113 }
114 };
115 executeBtn.addListener(SWT.Selection, executeListener);
116 }
117
118 public void refreshQuery() {
119 String queryStr = generateStatement();
120 executeQuery(queryStr);
121 bottom.layout();
122 sashForm.layout();
123 }
124
125 private String generateStatement() {
126 try {
127 // shortcuts
128 boolean hasFirstClause = false;
129 boolean ipClause = importedPackage.getText() != null
130 && !importedPackage.getText().trim().equals("");
131 boolean epClause = exportedPackage.getText() != null
132 && !exportedPackage.getText().trim().equals("");
133
134 StringBuffer sb = new StringBuffer();
135 // Select
136 sb.append("select " + SBA + ".*, " + SAVB + ".* ");
137 sb.append(" from " + SAVB);
138
139 // join
140 sb.append(" inner join ");
141 sb.append(SBA);
142 sb.append(" on isdescendantnode(" + SBA + ", " + SAVB + ") ");
143 if (ipClause) {
144 sb.append(" inner join ");
145 sb.append(SIP);
146 sb.append(" on isdescendantnode(" + SIP + ", " + SBA + ") ");
147 }
148
149 if (epClause) {
150 sb.append(" inner join ");
151 sb.append(SEP);
152 sb.append(" on isdescendantnode(" + SEP + ", " + SBA + ") ");
153 }
154
155 // where
156 sb.append(" where ");
157 if (symbolicName.getText() != null
158 && !symbolicName.getText().trim().equals("")) {
159 sb.append(SBA + ".[" + SLC_SYMBOLIC_NAME + "] like '"
160 + symbolicName.getText().replace('*', '%') + "'");
161 hasFirstClause = true;
162 }
163
164 if (ipClause) {
165 if (hasFirstClause)
166 sb.append(" AND ");
167 sb.append(SIP + ".[" + SLC_NAME + "] like '"
168 + importedPackage.getText().replace('*', '%') + "'");
169 hasFirstClause = true;
170 }
171
172 if (epClause) {
173 if (hasFirstClause)
174 sb.append(" AND ");
175 sb.append(SEP + ".[" + SLC_NAME + "] like '"
176 + exportedPackage.getText().replace('*', '%') + "'");
177 }
178 return sb.toString();
179 } catch (Exception e) {
180 throw new ArgeoException(
181 "Cannot generate where statement to get artifacts", e);
182 }
183 }
184
185 @Override
186 public void setFocus() {
187 executeBtn.setFocus();
188 }
189 }