X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fmaintenance%2FBrowse.java;h=7dafd72c4b8075678b533cf850bec25849c6a568;hb=c873a0359345503b8e3ca07828bd99d525ec7cc0;hp=3fff4e421343a31e24204b0a554a840abbf76521;hpb=e243ed2a4539ac6b47d0bd946a9219ea5e8fe0fb;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java b/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java index 3fff4e421..7dafd72c4 100644 --- a/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java +++ b/org.argeo.cms/src/org/argeo/cms/maintenance/Browse.java @@ -16,13 +16,12 @@ import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.Value; -import org.argeo.ArgeoException; import org.argeo.cms.CmsException; -import org.argeo.cms.CmsLink; import org.argeo.cms.CmsTypes; import org.argeo.cms.CmsUiProvider; -import org.argeo.cms.CmsUtils; import org.argeo.cms.text.Img; +import org.argeo.cms.util.CmsLink; +import org.argeo.cms.util.CmsUtils; import org.argeo.cms.widgets.EditableImage; import org.argeo.jcr.JcrUtils; import org.eclipse.jface.viewers.ColumnLabelProvider; @@ -57,9 +56,11 @@ import org.eclipse.swt.widgets.Text; public class Browse implements CmsUiProvider { // Some local constants to experiment. should be cleaned - private final static String BROWSE_PREFIX = "#browse"; + private final static String BROWSE_PREFIX = "browse#"; private final static int THUMBNAIL_WIDTH = 400; private final static int COLUMN_WIDTH = 160; + private DateFormat timeFormatter = new SimpleDateFormat( + "dd-MM-yyyy', 'HH:mm"); // keep a cache of the opened nodes // Key is the path @@ -77,6 +78,7 @@ public class Browse implements CmsUiProvider { public Control createUi(Composite parent, Node context) throws RepositoryException { if (context == null) + // return null; throw new CmsException("Context cannot be null"); GridLayout layout = CmsUtils.noSpaceGridLayout(); layout.numColumns = 2; @@ -214,7 +216,7 @@ public class Browse implements CmsUiProvider { e.doit = false; } } catch (RepositoryException e1) { - throw new ArgeoException( + throw new CmsException( "Unexpected error in key management for " + currEdited + "with filter " + filterTxt.getText(), e1); @@ -233,7 +235,7 @@ public class Browse implements CmsUiProvider { refreshFilters(node); refreshBrowser(node); } catch (RepositoryException re) { - throw new ArgeoException("Unable to update browser for " + node, re); + throw new CmsException("Unable to update browser for " + node, re); } } @@ -253,6 +255,9 @@ public class Browse implements CmsUiProvider { currParPath = JcrUtils.parentPath(currNodePath); if ("".equals(currParPath)) currParPath = "/"; + + + Object[][] colMatrix = new Object[browserCols.size()][2]; @@ -264,7 +269,8 @@ public class Browse implements CmsUiProvider { boolean leaveOpened = path.startsWith(currNodePath); // workaround for same name siblings - // fix me weird side effect when we go left or click on anb already selected, unfocused node + // fix me weird side effect when we go left or click on anb + // already selected, unfocused node if (leaveOpened && (path.lastIndexOf("/") == 0 && currNodePath.lastIndexOf("/") == 0 || JcrUtils @@ -288,6 +294,15 @@ public class Browse implements CmsUiProvider { ((FilterEntitiesVirtualTable) colMatrix[l][1]).dispose(); } + // Remove disposed columns + // TODO investigate and fix the mechanism that leave them there after + // disposal + if (browserCols.containsKey(currNodePath)) { + FilterEntitiesVirtualTable currCol = browserCols.get(currNodePath); + if (currCol.isDisposed()) + browserCols.remove(currNodePath); + } + if (!browserCols.containsKey(currNodePath)) createBrowserColumn(colViewer, node); @@ -320,12 +335,16 @@ public class Browse implements CmsUiProvider { try { return node.getPath(); } catch (RepositoryException e) { - throw new ArgeoException("Unable to get path for node " + node, e); + throw new CmsException("Unable to get path for node " + node, e); } } private Point imageWidth = new Point(250, 0); + /** + * Recreates the content of the box that displays information about the + * current selected node. + */ private Control createNodeView(Composite parent, Node context) throws RepositoryException { @@ -373,7 +392,6 @@ public class Browse implements CmsUiProvider { private String getPropAsString(Property property) throws RepositoryException { String result = ""; - DateFormat timeFormatter = new SimpleDateFormat(""); if (property.isMultiple()) { result = getMultiAsString(property, ", "); } else { @@ -439,7 +457,7 @@ public class Browse implements CmsUiProvider { NodeIterator nit = context.getNodes(filter); refreshFilteredList(nit); } catch (RepositoryException e) { - throw new ArgeoException("Unable to filter " + getNode() + throw new CmsException("Unable to filter " + getNode() + " children with filter " + filter, e); } @@ -529,7 +547,7 @@ public class Browse implements CmsUiProvider { } else if (e.keyCode == SWT.ARROW_LEFT) { try { selected = getNode().getParent(); - String newPath = selected.getPath(); //getNode().getParent() + String newPath = selected.getPath(); // getNode().getParent() setEdited(selected); if (browserCols.containsKey(newPath)) browserCols.get(newPath).setFocus(); @@ -538,7 +556,7 @@ public class Browse implements CmsUiProvider { } } } catch (RepositoryException ie) { - throw new ArgeoException("Error while managing arrow " + throw new CmsException("Error while managing arrow " + "events in the browser for " + selected, ie); } } @@ -587,7 +605,7 @@ public class Browse implements CmsUiProvider { try { return curr.getName(); } catch (RepositoryException e) { - throw new ArgeoException("Unable to get name for" + throw new CmsException("Unable to get name for" + curr); } }