From: Mathieu Baudier Date: Mon, 18 Jan 2021 08:31:28 +0000 (+0100) Subject: Improve DocBook support. X-Git-Tag: argeo-suite-2.1.18~34 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=12715aaf68a7dcaf97efe3895f41f0c7a9440dd2 Improve DocBook support. --- diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java index 8a52779..245c15e 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/AbstractDbkViewer.java @@ -16,7 +16,6 @@ import javax.jcr.nodetype.NodeType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.cms.CmsException; import org.argeo.cms.text.Paragraph; import org.argeo.cms.text.SectionTitle; import org.argeo.cms.text.TextInterpreter; @@ -35,6 +34,7 @@ import org.argeo.cms.ui.widgets.EditableImage; import org.argeo.cms.ui.widgets.EditableText; import org.argeo.cms.ui.widgets.Img; import org.argeo.cms.ui.widgets.StyledControl; +import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrUtils; import org.eclipse.rap.fileupload.FileDetails; import org.eclipse.rap.fileupload.FileUploadEvent; @@ -115,7 +115,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke } else { sectionPart = newSectionPart(textSection, child); if (sectionPart == null) - throw new CmsException("Unsupported node " + child); + throw new IllegalArgumentException("Unsupported node " + child); // TODO list node types in exception } if (sectionPart instanceof Control) @@ -135,7 +135,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke for (Section s : section.getSubSections().values()) refresh(s); } - // section.layout(); + // section.layout(true, true); } /** To be overridden in order to provide additional SectionPart types */ @@ -174,14 +174,26 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke protected DocBookSectionTitle newSectionTitle(TextSection parent, Node titleNode) throws RepositoryException { int style = parent.getStyle(); + Composite titleParent = newSectionHeader(parent); if (parent.isTitleReadOnly()) style = style | SWT.READ_ONLY; - DocBookSectionTitle title = new DocBookSectionTitle(parent.getHeader(), style, titleNode); + DocBookSectionTitle title = new DocBookSectionTitle(titleParent, style, titleNode); updateContent(title); title.setMouseListener(getMouseListener()); return title; } + /** + * To be overridden in order to provide additional processing at the section + * level. + * + * @return the parent to use for the {@link DocBookSectionTitle}, by default + * {@link Section#getHeader()} + */ + protected Composite newSectionHeader(TextSection section) { + return section.getHeader(); + } + protected DocBookSectionTitle prepareSectionTitle(Section newSection, String titleText) throws RepositoryException { Node sectionNode = newSection.getNode(); Node titleNode; @@ -274,7 +286,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke currentParagraphN = newNode; } } - // TODO or rather return the created paragarphs? + // TODO or rather return the created paragraphs? layout(toLayout.toArray(new Control[toLayout.size()])); } persistChanges(et.getNode()); @@ -287,7 +299,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke } else if (part instanceof PropertyPart) { saveLine(((PropertyPart) part).getProperty(), line); } else { - throw new CmsException("Unsupported part " + part); + throw new IllegalArgumentException("Unsupported part " + part); } } @@ -325,7 +337,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke updateContent(paragraph); layout(paragraph); } catch (RepositoryException e1) { - throw new CmsException("Cannot set style " + style + " on " + paragraph, e1); + throw new JcrException("Cannot set style " + style + " on " + paragraph, e1); } } @@ -340,7 +352,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke ((Control) paragraph).dispose(); layout(section); } catch (RepositoryException e1) { - throw new CmsException("Cannot delete " + paragraph, e1); + throw new JcrException("Cannot delete " + paragraph, e1); } } @@ -409,7 +421,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke edit(paragraph, 0); } } catch (RepositoryException e) { - throw new CmsException("Cannot split " + getEdited(), e); + throw new JcrException("Cannot split " + getEdited(), e); } } @@ -432,7 +444,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke Paragraph previousParagraph = paragraphMergedWithPrevious(paragraph, previousNode); edit(previousParagraph, previousTxt.length()); } catch (RepositoryException e) { - throw new CmsException("Cannot stop editing", e); + throw new JcrException("Cannot stop editing", e); } } @@ -461,7 +473,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke paragraphMergedWithNext(paragraph, removed); edit(paragraph, txt.length()); } catch (RepositoryException e) { - throw new CmsException("Cannot stop editing", e); + throw new JcrException("Cannot stop editing", e); } } @@ -497,7 +509,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke } } } catch (RepositoryException e) { - throw new CmsException("Cannot upload", e); + throw new JcrException("Cannot upload", e); } } @@ -572,7 +584,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke persistChanges(previousSectionN); } } catch (RepositoryException e) { - throw new CmsException("Cannot deepen " + getEdited(), e); + throw new JcrException("Cannot deepen " + getEdited(), e); } } @@ -641,7 +653,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke persistChanges(mergedNode); } } catch (RepositoryException e) { - throw new CmsException("Cannot undeepen " + getEdited(), e); + throw new JcrException("Cannot undeepen " + getEdited(), e); } } @@ -824,7 +836,7 @@ public abstract class AbstractDbkViewer extends AbstractPageViewer implements Ke } public void uploadFailed(FileUploadEvent event) { - throw new CmsException("Upload failed " + event, event.getException()); + throw new RuntimeException("Upload failed " + event, event.getException()); } public void uploadFinished(FileUploadEvent event) { diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java index ee675d2..35a7132 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DbkUtils.java @@ -1,8 +1,11 @@ package org.argeo.docbook.ui; import javax.jcr.Node; +import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; +import org.argeo.entity.EntityType; +import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.JcrxApi; @@ -22,6 +25,34 @@ public class DbkUtils { } } + public static Node getMetadata(Node infoContainer) { + try { + if (!infoContainer.hasNode(DocBookTypes.INFO)) + return null; + Node info = infoContainer.getNode(DocBookTypes.INFO); + if (!info.hasNode(EntityType.local.get())) + return null; + return info.getNode(EntityType.local.get()); + } catch (RepositoryException e) { + throw new JcrException("Cannot retrieve metadata from " + infoContainer, e); + } + } + + public static Node getChildByRole(Node parent, String role) { + try { + NodeIterator baseSections = parent.getNodes(); + while (baseSections.hasNext()) { + Node n = baseSections.nextNode(); + String r = Jcr.get(n, DocBookNames.DBK_ROLE); + if (r != null && r.equals(role)) + return n; + } + return null; + } catch (RepositoryException e) { + throw new JcrException("Cannot get child from " + parent + " with role " + role, e); + } + } + public static Node addParagraph(Node node, String txt) { try { Node para = node.addNode(DocBookTypes.PARA, DocBookTypes.PARA); diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookSectionTitle.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookSectionTitle.java index fcde875..1ece09e 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookSectionTitle.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocBookSectionTitle.java @@ -8,7 +8,10 @@ import org.argeo.cms.text.TextSection; import org.argeo.cms.ui.viewers.EditablePart; import org.argeo.cms.ui.viewers.NodePart; import org.argeo.cms.ui.widgets.EditableText; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; /** The title of a section, based on an XML text node. */ public class DocBookSectionTitle extends EditableText implements EditablePart, NodePart { @@ -30,4 +33,16 @@ public class DocBookSectionTitle extends EditableText implements EditablePart, N return getNode(); } +// @Override +// protected void setControlLayoutData(Control control) { +// super.setControlLayoutData(control); +// control.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, true, false)); +// } +// +// @Override +// protected void setContainerLayoutData(Composite composite) { +// super.setContainerLayoutData(composite); +// composite.setLayoutData(new GridData(SWT.LEAD, SWT.BOTTOM, true, false)); +// } + } diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java index aeafcd3..bdd72d5 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/docbook/ui/DocumentTextEditor.java @@ -1,7 +1,6 @@ package org.argeo.docbook.ui; import javax.jcr.Node; -import javax.jcr.Property; import javax.jcr.RepositoryException; import org.argeo.cms.text.TextSection; @@ -33,7 +32,7 @@ public class DocumentTextEditor extends AbstractDbkViewer { @Override protected Boolean isModelInitialized(Node textNode) throws RepositoryException { - return textNode.hasProperty(Property.JCR_TITLE) || textNode.hasNode(DocBookNames.DBK_PARA) + return textNode.hasNode(DocBookTypes.TITLE) || textNode.hasNode(DocBookNames.DBK_PARA) || (!isFlat() && textNode.hasNode(DocBookNames.DBK_SECTION)); }