]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java
Clarify SLC project structure.
[gpl/argeo-slc.git] / cms / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / views / QueryBundlesForm.java
diff --git a/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java
new file mode 100644 (file)
index 0000000..c4980d5
--- /dev/null
@@ -0,0 +1,174 @@
+package org.argeo.slc.client.ui.dist.views;
+
+import org.argeo.slc.SlcException;
+import org.argeo.slc.SlcNames;
+import org.argeo.slc.SlcTypes;
+import org.argeo.slc.client.ui.dist.DistPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+/** Query SLC Repo to get some artifacts given some predefined parameters */
+public class QueryBundlesForm extends AbstractQueryArtifactsView implements
+               SlcNames, SlcTypes {
+       // private static final Log log = LogFactory.getLog(QueryBundlesForm.class);
+       public static final String ID = DistPlugin.PLUGIN_ID + ".queryBundlesForm";
+
+       // widgets
+       private Button executeBtn;
+       private Text symbolicName;
+       private Text importedPackage;
+       private Text exportedPackage;
+       private SashForm sashForm;
+
+       private Composite top, bottom;
+
+       @Override
+       public void createPartControl(Composite parent) {
+
+               sashForm = new SashForm(parent, SWT.VERTICAL);
+               sashForm.setSashWidth(4);
+               // Enable the different parts to fill the whole page when the tab is
+               // maximized
+               sashForm.setLayout(new FillLayout());
+
+               top = new Composite(sashForm, SWT.NONE);
+               top.setLayout(new GridLayout(1, false));
+
+               bottom = new Composite(sashForm, SWT.NONE);
+               bottom.setLayout(new GridLayout(1, false));
+
+               sashForm.setWeights(new int[] { 25, 75 });
+
+               createQueryForm(top);
+               createResultPart(bottom);
+       }
+
+       public void createQueryForm(Composite parent) {
+               Label lbl;
+               GridData gd;
+
+               GridLayout gl = new GridLayout(2, false);
+               gl.marginTop = 5;
+               parent.setLayout(gl);
+
+               // Bundle Name
+               lbl = new Label(parent, SWT.SINGLE);
+               lbl.setText("Symbolic name");
+               symbolicName = new Text(parent, SWT.SINGLE | SWT.BORDER);
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               gd.grabExcessHorizontalSpace = true;
+               symbolicName.setLayoutData(gd);
+
+               // imported package
+               lbl = new Label(parent, SWT.SINGLE);
+               lbl.setText("Imported package");
+               importedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               gd.grabExcessHorizontalSpace = true;
+               importedPackage.setLayoutData(gd);
+
+               // exported package
+               lbl = new Label(parent, SWT.SINGLE);
+               lbl.setText("Exported package");
+               exportedPackage = new Text(parent, SWT.SINGLE | SWT.BORDER);
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               gd.grabExcessHorizontalSpace = true;
+               exportedPackage.setLayoutData(gd);
+
+               executeBtn = new Button(parent, SWT.PUSH);
+               executeBtn.setText("Search");
+               gd = new GridData();
+               gd.horizontalSpan = 2;
+               executeBtn.setLayoutData(gd);
+
+               Listener executeListener = new Listener() {
+                       private static final long serialVersionUID = 6267263421349073712L;
+
+                       public void handleEvent(Event event) {
+                               refreshQuery();
+                       }
+               };
+               executeBtn.addListener(SWT.Selection, executeListener);
+       }
+
+       public void refreshQuery() {
+               String queryStr = generateStatement();
+               executeQuery(queryStr);
+               bottom.layout();
+               sashForm.layout();
+       }
+
+       private String generateStatement() {
+               try {
+                       // shortcuts
+                       boolean hasFirstClause = false;
+                       boolean ipClause = importedPackage.getText() != null
+                                       && !importedPackage.getText().trim().equals("");
+                       boolean epClause = exportedPackage.getText() != null
+                                       && !exportedPackage.getText().trim().equals("");
+
+                       StringBuffer sb = new StringBuffer();
+                       // Select
+                       sb.append("select " + SBA + ".*, " + SAVB + ".* ");
+                       sb.append(" from " + SAVB);
+
+                       // join
+                       sb.append(" inner join ");
+                       sb.append(SBA);
+                       sb.append(" on isdescendantnode(" + SBA + ", " + SAVB + ") ");
+                       if (ipClause) {
+                               sb.append(" inner join ");
+                               sb.append(SIP);
+                               sb.append(" on isdescendantnode(" + SIP + ", " + SBA + ") ");
+                       }
+
+                       if (epClause) {
+                               sb.append(" inner join ");
+                               sb.append(SEP);
+                               sb.append(" on isdescendantnode(" + SEP + ", " + SBA + ") ");
+                       }
+
+                       // where
+                       sb.append(" where ");
+                       if (symbolicName.getText() != null
+                                       && !symbolicName.getText().trim().equals("")) {
+                               sb.append(SBA + ".[" + SLC_SYMBOLIC_NAME + "] like '"
+                                               + symbolicName.getText().replace('*', '%') + "'");
+                               hasFirstClause = true;
+                       }
+
+                       if (ipClause) {
+                               if (hasFirstClause)
+                                       sb.append(" AND ");
+                               sb.append(SIP + ".[" + SLC_NAME + "] like '"
+                                               + importedPackage.getText().replace('*', '%') + "'");
+                               hasFirstClause = true;
+                       }
+
+                       if (epClause) {
+                               if (hasFirstClause)
+                                       sb.append(" AND ");
+                               sb.append(SEP + ".[" + SLC_NAME + "] like '"
+                                               + exportedPackage.getText().replace('*', '%') + "'");
+                       }
+                       return sb.toString();
+               } catch (Exception e) {
+                       throw new SlcException(
+                                       "Cannot generate where statement to get artifacts", e);
+               }
+       }
+
+       @Override
+       public void setFocus() {
+               executeBtn.setFocus();
+       }
+}
\ No newline at end of file