import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.qom.Constraint;
-import javax.jcr.query.qom.Ordering;
-import javax.jcr.query.qom.QueryObjectModel;
-import javax.jcr.query.qom.QueryObjectModelFactory;
-import javax.jcr.query.qom.Selector;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.ErrorFeedback;
import org.argeo.jcr.JcrUtils;
import org.argeo.slc.SlcException;
import org.argeo.slc.client.ui.dist.DistConstants;
+import org.argeo.slc.client.ui.dist.DistImages;
import org.argeo.slc.client.ui.dist.utils.AbstractHyperlinkListener;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.jcr.SlcTypes;
+import org.argeo.slc.repo.RepoConstants;
+import org.argeo.slc.repo.RepoUtils;
+import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.swt.graphics.Image;
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.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.Section;
/**
- * Presents main information of a given OSGI bundle
+ * Present main information of a given OSGI bundle
*/
-
public class BundleDetailsPage extends FormPage implements SlcNames, SlcTypes {
// private final static Log log =
// LogFactory.getLog(ArtifactDetailsPage.class);
form.setText(currBundle.hasProperty(DistConstants.SLC_BUNDLE_NAME) ? currBundle
.getProperty(DistConstants.SLC_BUNDLE_NAME).getString()
: "");
+ form.setMessage(" ", IMessageProvider.NONE);
Composite body = form.getBody();
GridLayout layout = new GridLayout(1, false);
layout.marginWidth = 5;
createExportPackageSection(body);
createImportPackageSection(body);
createReqBundleSection(body);
- createMavenSnipet(body);
+ createMavenSnippet(body);
} catch (RepositoryException e) {
throw new SlcException("unexpected error "
}
}
- /** Add useful info for the current bundle */
+ /** Displays useful info for the current bundle */
private void createdetailsPart(Composite parent) throws RepositoryException {
Composite details = toolkit.createComposite(parent);
GridLayout layout = new GridLayout(2, false);
createField(details, "Group Id", SlcNames.SLC_GROUP_ID);
createHyperlink(details, "Licence", DistConstants.SLC_BUNDLE_LICENCE);
createField(details, "Vendor", DistConstants.SLC_BUNDLE_VENDOR);
+ addSourceAvailableLabel(details);
+ }
+
+ // helper to check if sources are available
+ private void addSourceAvailableLabel(Composite parent) {
+ Button srcChk = toolkit.createButton(parent, "Sources available",
+ SWT.CHECK);
+ srcChk.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
+ try {
+ String srcPath = RepoUtils.relatedPdeSourcePath(
+ RepoConstants.DEFAULT_ARTIFACTS_BASE_PATH, currBundle);
+ srcChk.setSelection(currBundle.getSession().nodeExists(srcPath));
+ } catch (RepositoryException e) {
+ throw new SlcException("Unable to check sources", e);
+ }
+ srcChk.setEnabled(false);
}
- /** Import Package Section */
+ // Workaround to add an artificial level to the export package browser
+ private class LevelElem {
+ private String label;
+ private Object parent;
+
+ public LevelElem(String label, Object parent) {
+ this.label = label;
+ this.parent = parent;
+ }
+
+ public String toString() {
+ return label;
+ }
+
+ public Object getParent() {
+ return parent;
+ }
+ }
+
+ /** Export Package Section */
private void createExportPackageSection(Composite parent)
throws RepositoryException {
tree.setLayoutData(gd);
TreeViewerColumn col = new TreeViewerColumn(viewer, SWT.FILL);
- col.getColumn().setWidth(200);
+ col.getColumn().setWidth(400);
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
- return JcrUtils.get((Node) element, SlcNames.SLC_NAME);
+ if (element instanceof Node)
+ return JcrUtils.get((Node) element, SlcNames.SLC_NAME);
+ else
+ return element.toString();
}
@Override
public Image getImage(Object element) {
+ if (element instanceof Node) {
+ try {
+ Node node = (Node) element;
+ if (node.isNodeType(SlcTypes.SLC_EXPORTED_PACKAGE))
+ return DistImages.IMG_PACKAGE;
+ } catch (RepositoryException e) {
+ throw new SlcException("Error retriving "
+ + "image for the labelProvider", e);
+ }
+ }
return null;
}
});
public Object[] getChildren(Object parentElement) {
// Only 2 levels for the time being
try {
- Node pNode = (Node) parentElement;
- if (pNode.isNodeType(SlcTypes.SLC_EXPORTED_PACKAGE)) {
+ if (parentElement instanceof LevelElem) {
+ Node node = (Node) ((LevelElem) parentElement)
+ .getParent();
List<Node> nodes = JcrUtils
- .nodeIteratorToList(listNodes(pNode,
+ .nodeIteratorToList(listNodes(node,
SlcTypes.SLC_JAVA_PACKAGE,
SlcNames.SLC_NAME));
return nodes.toArray();
- } else
- return null;
+ } else if (parentElement instanceof Node) {
+ Node pNode = (Node) parentElement;
+ if (pNode.isNodeType(SlcTypes.SLC_EXPORTED_PACKAGE)) {
+ if (listNodes(pNode, SlcTypes.SLC_JAVA_PACKAGE,
+ SlcNames.SLC_NAME).getSize() > 0) {
+ Object[] result = { new LevelElem("uses", pNode) };
+ return result;
+ }
+ }
+ }
+ return null;
} catch (RepositoryException e) {
throw new SlcException("Cannot list children Nodes", e);
}
public boolean hasChildren(Object element) {
try {
- Node pNode = (Node) element;
- if (pNode.isNodeType(SlcTypes.SLC_EXPORTED_PACKAGE)) {
- // might return true even if there is no "valid" child
- return pNode.hasNodes();
- } else
- return false;
+ if (element instanceof LevelElem)
+ return true;
+ else {
+ Node pNode = (Node) element;
+ if (pNode.isNodeType(SlcTypes.SLC_EXPORTED_PACKAGE)) {
+ return listNodes(pNode, SlcTypes.SLC_JAVA_PACKAGE,
+ SlcNames.SLC_NAME).getSize() > 0;
+ }
+ }
+ return false;
} catch (RepositoryException e) {
throw new SlcException("Cannot check children Nodes", e);
}
headerSection.setClient(tree);
viewer.setInput("Initialize");
+ // work around a display problem : the tree table has only a few lines
+ // when the tree is not expended
+ viewer.expandToLevel(3);
}
/** Import Package Section */
// Name
TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE);
- col.getColumn().setWidth(300);
+ col.getColumn().setWidth(350);
col.getColumn().setText("Name");
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return JcrUtils.get((Node) element, SLC_NAME);
}
+
+ public Image getImage(Object element) {
+ return DistImages.IMG_PACKAGE;
+ }
+
});
// Version
public String getText(Object element) {
return JcrUtils.get((Node) element, SLC_SYMBOLIC_NAME);
}
+
+ @Override
+ public Image getImage(Object element) {
+ return DistImages.IMG_BUNDLE;
+ }
});
// Version
col = new TableViewerColumn(viewer, SWT.NONE);
- col.getColumn().setWidth(100);
+ col.getColumn().setWidth(140);
col.getColumn().setText("Version");
col.setLabelProvider(new ColumnLabelProvider() {
@Override
viewer.setInput("Initialize");
}
- /** Build repository request */
+ /**
+ * Build repository request
+ *
+ * FIXME Workaround for remote repository, the path to bundleartifact (for
+ * instance
+ * .../org/argeo/slc/org.argeo.slc.client.ui.dist/1.1.12/org.argeo.slc
+ * .client.ui.dist-1.1.12/ ) is not valid for method factory.childNode(); it
+ * fails parsing the "1.1.12" part, trying to cast it as a BigDecimal
+ *
+ * */
private NodeIterator listNodes(Node parent, String nodeType, String orderBy)
throws RepositoryException {
- QueryManager queryManager = currBundle.getSession().getWorkspace()
- .getQueryManager();
- QueryObjectModelFactory factory = queryManager.getQOMFactory();
-
- final String nodeSelector = "nodes";
- Selector source = factory.selector(nodeType, nodeSelector);
-
- Constraint childOf = factory.childNode(nodeSelector, parent.getPath());
-
- Ordering order = factory.ascending(factory.propertyValue(nodeSelector,
- orderBy));
- Ordering[] orderings = { order };
-
- QueryObjectModel query = factory.createQuery(source, childOf,
- orderings, null);
-
- QueryResult result = query.execute();
- return result.getNodes();
-
+ // QueryManager queryManager = currBundle.getSession().getWorkspace()
+ // .getQueryManager();
+ // QueryObjectModelFactory factory = queryManager.getQOMFactory();
+ //
+ // final String nodeSelector = "nodes";
+ // Selector source = factory.selector(nodeType, nodeSelector);
+ //
+ // Constraint childOf = factory.childNode(nodeSelector,
+ // parent.getPath());
+ //
+ // Ordering order =
+ // factory.ascending(factory.propertyValue(nodeSelector,
+ // orderBy));
+ // Ordering[] orderings = { order };
+ //
+ // QueryObjectModel query = factory.createQuery(source, childOf,
+ // orderings, null);
+ //
+ // QueryResult result = query.execute();
+
+ String pattern = null;
+ if (SlcTypes.SLC_EXPORTED_PACKAGE.equals(nodeType))
+ pattern = "slc:Export-Package*";
+ else if (SlcTypes.SLC_JAVA_PACKAGE.equals(nodeType))
+ pattern = "slc:uses*";
+ else if (SlcTypes.SLC_IMPORTED_PACKAGE.equals(nodeType))
+ pattern = "slc:Import-Package*";
+ else if (SlcTypes.SLC_REQUIRED_BUNDLE.equals(nodeType))
+ pattern = "slc:Require-Bundle*";
+
+ return parent.getNodes(pattern);
}
private class TableContentProvider implements IStructuredContentProvider {
}
/** Creates a text area with corresponding maven snippet */
- private void createMavenSnipet(Composite parent) {
+ private void createMavenSnippet(Composite parent) {
mavenSnippet = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.BORDER);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.grabExcessHorizontalSpace = true;
try {
StringBuffer sb = new StringBuffer();
sb.append("<dependency>\n");
- sb.append("\t<groupeId>");
+ sb.append("\t<groupId>");
sb.append(currBundle.getProperty(SLC_GROUP_ID).getString());
- sb.append("</groupeId>\n");
+ sb.append("</groupId>\n");
sb.append("\t<artifactId>");
sb.append(currBundle.getProperty(SLC_ARTIFACT_ID).getString());
sb.append("</artifactId>\n");