1 package org
.argeo
.slc
.client
.ui
.dist
.views
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Calendar
;
5 import java
.util
.GregorianCalendar
;
6 import java
.util
.Iterator
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.jcr
.Session
;
11 import javax
.jcr
.query
.Query
;
12 import javax
.jcr
.query
.QueryResult
;
13 import javax
.jcr
.query
.Row
;
14 import javax
.jcr
.query
.RowIterator
;
16 import org
.apache
.commons
.logging
.Log
;
17 import org
.apache
.commons
.logging
.LogFactory
;
18 import org
.argeo
.eclipse
.ui
.GenericTableComparator
;
19 import org
.argeo
.slc
.SlcException
;
20 import org
.argeo
.slc
.SlcTypes
;
21 import org
.argeo
.slc
.client
.ui
.dist
.utils
.ArtifactsTableConfigurer
;
22 import org
.eclipse
.core
.runtime
.IStatus
;
23 import org
.eclipse
.core
.runtime
.Status
;
24 import org
.eclipse
.jface
.dialogs
.ErrorDialog
;
25 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
26 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
27 import org
.eclipse
.jface
.viewers
.LabelProvider
;
28 import org
.eclipse
.jface
.viewers
.TableViewer
;
29 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
30 import org
.eclipse
.jface
.viewers
.Viewer
;
31 import org
.eclipse
.swt
.SWT
;
32 import org
.eclipse
.swt
.graphics
.Image
;
33 import org
.eclipse
.swt
.layout
.GridData
;
34 import org
.eclipse
.swt
.layout
.GridLayout
;
35 import org
.eclipse
.swt
.widgets
.Composite
;
36 import org
.eclipse
.swt
.widgets
.Table
;
37 import org
.eclipse
.ui
.part
.ViewPart
;
39 /** Factorizes useful methods to build a query view in a sashForm */
40 public abstract class AbstractQueryArtifactsView
extends ViewPart
implements
42 private static final Log log
= LogFactory
43 .getLog(AbstractQueryArtifactsView
.class);
46 final protected static String SAVB
= "[" + SLC_ARTIFACT_VERSION_BASE
+ "]";
47 final protected static String SBA
= "[" + SLC_BUNDLE_ARTIFACT
+ "]";
48 final protected static String SIP
= "[" + SLC_IMPORTED_PACKAGE
+ "]";
49 final protected static String SEP
= "[" + SLC_EXPORTED_PACKAGE
+ "]";
51 /* DEPENDENCY INJECTION */
52 private Session session
;
53 private List
<String
> columnProperties
;
56 private TableViewer viewer
;
57 private List
<TableViewerColumn
> tableViewerColumns
= new ArrayList
<TableViewerColumn
>();
58 private ArtifactsTableConfigurer tableConfigurer
;
59 private GenericTableComparator comparator
;
61 // to be set by client to display all columns
62 private boolean displayAllColumns
= false;
64 protected void createResultPart(Composite parent
) {
65 viewer
= new TableViewer(parent
);
66 Table table
= viewer
.getTable();
67 table
.getParent().setLayout(new GridLayout(1, false));
68 table
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
69 viewer
.getTable().setHeaderVisible(true);
70 viewer
.getTable().setLinesVisible(true);
72 viewer
.setLabelProvider(new ViewLabelProvider());
73 viewer
.setContentProvider(new ViewContentProvider());
74 // viewer.addDoubleClickListener(new GenericDoubleClickListener());
76 tableConfigurer
= new ArtifactsTableConfigurer(viewer
, 1,
77 GenericTableComparator
.DESCENDING
);
79 comparator
= tableConfigurer
.getComparator();
80 viewer
.setComparator(comparator
);
83 protected void executeQuery(String statement
) {
85 Calendar stStamp
= new GregorianCalendar();
86 if (log
.isDebugEnabled()) {
87 log
.debug("Executed query: " + statement
);
89 QueryResult qr
= session
.getWorkspace().getQueryManager()
90 .createQuery(statement
, Query
.JCR_SQL2
).execute();
92 if (log
.isDebugEnabled()) {
93 Calendar enStamp
= new GregorianCalendar();
94 long duration
= enStamp
.getTimeInMillis()
95 - stStamp
.getTimeInMillis();
96 log
.debug("Query executed in : " + duration
/ 1000 + "s.");
99 // remove previous columns
100 for (TableViewerColumn tvc
: tableViewerColumns
)
101 tvc
.getColumn().dispose();
103 // If a pre(-defined list of columns has been injected, we use it,
104 // otherwise we display all results of the resultSet
105 if (!displayAllColumns
&& columnProperties
!= null) {
108 Iterator
<String
> it
= columnProperties
.iterator();
109 while (it
.hasNext()) {
110 String columnName
= it
.next();
112 TableViewerColumn tvc
= new TableViewerColumn(viewer
,
114 tableConfigurer
.configureColumn(columnName
, tvc
, i
);
115 tvc
.setLabelProvider(tableConfigurer
116 .getLabelProvider(columnName
));
117 tableViewerColumns
.add(tvc
);
122 for (final String columnName
: qr
.getColumnNames()) {
123 TableViewerColumn tvc
= new TableViewerColumn(viewer
,
125 // Small hack to remove prefix from the column name
126 // String tmpStr = columnName.substring(columnName
127 // .lastIndexOf(".") + 1);
128 tableConfigurer
.configureColumn(columnName
, tvc
, i
);
129 tvc
.setLabelProvider(tableConfigurer
130 .getLabelProvider(columnName
));
131 tableViewerColumns
.add(tvc
);
135 // We must create a local list because query result can be read only
138 List
<Row
> rows
= new ArrayList
<Row
>();
139 RowIterator rit
= qr
.getRows();
140 while (rit
.hasNext()) {
141 rows
.add(rit
.nextRow());
143 viewer
.setInput(rows
);
144 } catch (RepositoryException e
) {
145 throw new SlcException("Cannot read query result", e
);
148 } catch (RepositoryException e
) {
149 ErrorDialog
.openError(null, "Error", "Cannot execute JCR query: "
150 + statement
, new Status(IStatus
.ERROR
,
151 "org.argeo.eclipse.ui.jcr", e
.getMessage()));
156 * Client must use this method to display all columns of the result set
157 * instead of a limited predifined and injected set
159 public void displayAllColumns(boolean flag
) {
160 displayAllColumns
= flag
;
163 // Can be overridden by subclasses.
164 protected String
generateSelectStatement() {
165 StringBuffer sb
= new StringBuffer("select " + SAVB
+ ".* ");
166 return sb
.toString();
169 protected String
generateFromStatement() {
170 StringBuffer sb
= new StringBuffer(" from ");
173 return sb
.toString();
177 protected class ViewContentProvider
implements IStructuredContentProvider
{
178 private static final long serialVersionUID
= 5286293288979552056L;
180 public void inputChanged(Viewer arg0
, Object arg1
, Object arg2
) {
183 public void dispose() {
186 @SuppressWarnings("unchecked")
187 public Object
[] getElements(Object obj
) {
188 return ((List
<String
[]>) obj
).toArray();
192 protected class ViewLabelProvider
extends LabelProvider
implements
193 ITableLabelProvider
{
194 private static final long serialVersionUID
= -2407263563879116348L;
196 public String
getColumnText(Object obj
, int index
) {
197 if (!(obj
instanceof String
[]))
198 return "Object is not properly formatted ";
200 String
[] value
= (String
[]) obj
;
205 public Image
getColumnImage(Object obj
, int index
) {
210 /* DEPENDENCY INJECTION */
211 public void setSession(Session session
) {
212 this.session
= session
;
215 public void setColumnProperties(List
<String
> columnProperties
) {
216 this.columnProperties
= columnProperties
;