X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fviews%2FQueryBundlesForm.java;fp=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fviews%2FQueryBundlesForm.java;h=c4980d53fe552095576dba1a6a8011a26cda2ad2;hb=ecc22e604e47533c79de9cecdcdeacbc752cbff1;hp=0000000000000000000000000000000000000000;hpb=e07ded4632e53f8b8869763bc1f1f4091361e76e;p=gpl%2Fargeo-slc.git 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 index 000000000..c4980d53f --- /dev/null +++ b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/views/QueryBundlesForm.java @@ -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