--- /dev/null
+package org.argeo.docbook;
+
+/** Supported DocBook attributes. */
+public enum DbkAttr {
+ role,
+ //
+ fileref, contentwidth, contentdepth
+ //
+ ;
+}
--- /dev/null
+package org.argeo.docbook;
+
+import org.argeo.entity.JcrName;
+
+/** Supported DocBook elements */
+public enum DbkType implements JcrName {
+ book, article, section,
+ //
+ info, title, para,
+ //
+ mediaobject, imageobject, imagedata,
+ //
+ ;
+
+ @Override
+ public String getPrefix() {
+ return prefix();
+ }
+
+ public static String prefix() {
+ return "dbk";
+ }
+
+ @Override
+ public String getNamespace() {
+ return namespace();
+ }
+
+ public static String namespace() {
+ return "http://docbook.org/ns/docbook";
+ }
+
+}
package org.argeo.docbook;
-import static org.argeo.docbook.DocBookType.para;
+import static org.argeo.docbook.DbkType.para;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
/** Utilities around DocBook. */
public class DbkUtils {
/** Get or add a DocBook element. */
- public static Node getOrAddDbk(Node parent, DocBookType child) {
+ public static Node getOrAddDbk(Node parent, DbkType child) {
try {
if (!parent.hasNode(child.get())) {
return addDbk(parent, child);
}
/** Add a DocBook element to this node. */
- public static Node addDbk(Node parent, DocBookType child) {
+ public static Node addDbk(Node parent, DbkType child) {
try {
Node node = parent.addNode(child.get(), child.get());
return node;
}
/** Whether this DocBook element is of this type. */
- public static boolean isDbk(Node node, DocBookType type) {
+ public static boolean isDbk(Node node, DbkType type) {
return Jcr.getName(node).equals(type.get());
}
public static String getTitle(Node node) {
- return JcrxApi.getXmlValue(node, DocBookType.title.get());
+ return JcrxApi.getXmlValue(node, DbkType.title.get());
}
public static void setTitle(Node node, String txt) {
- Node titleNode = getOrAddDbk(node, DocBookType.title);
+ Node titleNode = getOrAddDbk(node, DbkType.title);
JcrxApi.setXmlValue(node, titleNode, txt);
}
public static Node getMetadata(Node infoContainer) {
try {
- if (!infoContainer.hasNode(DocBookType.info.get()))
+ if (!infoContainer.hasNode(DbkType.info.get()))
return null;
- Node info = infoContainer.getNode(DocBookType.info.get());
+ Node info = infoContainer.getNode(DbkType.info.get());
if (!info.hasNode(EntityType.local.get()))
return null;
return info.getNode(EntityType.local.get());
NodeIterator baseSections = parent.getNodes();
while (baseSections.hasNext()) {
Node n = baseSections.nextNode();
- String r = Jcr.get(n, DocBookNames.DBK_ROLE);
+ String r = Jcr.get(n, DbkAttr.role.name());
if (r != null && r.equals(role))
return n;
}
try {
// FIXME make it more robust
- if (DocBookType.imagedata.get().equals(sibling.getName())) {
+ if (DbkType.imagedata.get().equals(sibling.getName())) {
sibling = sibling.getParent().getParent();
}
Node parent = sibling.getParent();
- Node mediaNode = addDbk(parent, DocBookType.mediaobject);
+ Node mediaNode = addDbk(parent, DbkType.mediaobject);
// TODO optimise?
parent.orderBefore(mediaNode.getName() + "[" + mediaNode.getIndex() + "]",
sibling.getName() + "[" + sibling.getIndex() + "]");
parent.orderBefore(sibling.getName() + "[" + sibling.getIndex() + "]",
mediaNode.getName() + "[" + mediaNode.getIndex() + "]");
- Node imageNode = addDbk(mediaNode, DocBookType.imageobject);
- Node imageDataNode = addDbk(imageNode, DocBookType.imagedata);
+ Node imageNode = addDbk(mediaNode, DbkType.imageobject);
+ Node imageDataNode = addDbk(imageNode, DbkType.imagedata);
// Node infoNode = imageNode.addNode(DocBookTypes.INFO, DocBookTypes.INFO);
// Node fileNode = JcrUtils.copyBytesAsFile(mediaFolder, EntityType.box.get(), new byte[0]);
// fileNode.addMixin(EntityType.box.get());
+++ /dev/null
-package org.argeo.docbook;
-
-public interface DocBookNames {
- // ELEMENTS
-// public final static String DBK_ARTICLE = "dbk:article";
-// public final static String DBK_PARA = "dbk:para";
-// public final static String DBK_TITLE = "dbk:title";
-// public final static String DBK_SECTION = "dbk:section";
-// public final static String DBK_MEDIAOBJECT = "dbk:mediaobject";
-
- // ATTRIBUTES
-// public final static String JCR_XMLTEXT = "jcr:xmltext";
-// public final static String JCR_XMLCHARACTERS = "jcr:xmlcharacters";
-
- public final static String DBK_ROLE = "dbk:role";
- public final static String DBK_FILEREF = "dbk:fileref";
- public final static String DBK_CONTENTWIDTH = "dbk:contentwidth";
- public final static String DBK_CONTENTDEPTH = "dbk:contentdepth";
-
-}
+++ /dev/null
-package org.argeo.docbook;
-
-import org.argeo.entity.JcrName;
-
-/** Types related to DocBook. */
-public enum DocBookType implements JcrName {
- book, article, section,
- //
- info, title, para,
- //
- mediaobject, imageobject, imagedata,
- //
- ;
-
- @Override
- public String getPrefix() {
- return prefix();
- }
-
- public static String prefix() {
- return "dbk";
- }
-
- @Override
- public String getNamespace() {
- return namespace();
- }
-
- public static String namespace() {
- return "http://docbook.org/ns/docbook";
- }
-
-}
package org.argeo.docbook.ui;
import static org.argeo.cms.ui.util.CmsUiUtils.fillWidth;
+import static org.argeo.docbook.DbkType.para;
import static org.argeo.docbook.DbkUtils.addDbk;
import static org.argeo.docbook.DbkUtils.isDbk;
-import static org.argeo.docbook.DocBookType.para;
import java.io.IOException;
import java.io.OutputStream;
import org.argeo.cms.ui.viewers.SectionPart;
import org.argeo.cms.ui.widgets.EditableText;
import org.argeo.cms.ui.widgets.StyledControl;
+import org.argeo.docbook.DbkAttr;
+import org.argeo.docbook.DbkType;
import org.argeo.docbook.DbkUtils;
-import org.argeo.docbook.DocBookNames;
-import org.argeo.docbook.DocBookType;
import org.argeo.jcr.Jcr;
import org.argeo.jcr.JcrException;
import org.argeo.jcr.JcrUtils;
CmsUiUtils.clear(section);
Node node = section.getNode();
TextSection textSection = (TextSection) section;
- if (node.hasNode(DocBookType.title.get())) {
+ if (node.hasNode(DbkType.title.get())) {
if (section.getHeader() == null)
section.createHeader();
- Node titleNode = node.getNode(DocBookType.title.get());
+ Node titleNode = node.getNode(DbkType.title.get());
DocBookSectionTitle title = newSectionTitle(textSection, titleNode);
title.setLayoutData(CmsUiUtils.fillWidth());
updateContent(title);
for (NodeIterator ni = node.getNodes(); ni.hasNext();) {
Node child = ni.nextNode();
SectionPart sectionPart = null;
- if (isDbk(child, DocBookType.mediaobject)) {
- if (child.hasNode(DocBookType.imageobject.get())) {
- Node imageDataNode = child.getNode(DocBookType.imageobject.get())
- .getNode(DocBookType.imagedata.get());
+ if (isDbk(child, DbkType.mediaobject)) {
+ if (child.hasNode(DbkType.imageobject.get())) {
+ Node imageDataNode = child.getNode(DbkType.imageobject.get()).getNode(DbkType.imagedata.get());
sectionPart = newImg(textSection, imageDataNode);
}
} else if (isDbk(child, para)) {
}
// if (!flat)
- for (NodeIterator ni = section.getNode().getNodes(DocBookType.section.get()); ni.hasNext();) {
+ for (NodeIterator ni = section.getNode().getNodes(DbkType.section.get()); ni.hasNext();) {
Node child = ni.nextNode();
- if (isDbk(child, DocBookType.section)) {
+ if (isDbk(child, DbkType.section)) {
TextSection newSection = new TextSection(section, SWT.NONE, child);
newSection.setLayoutData(CmsUiUtils.fillWidth());
refresh(newSection);
protected DocBookSectionTitle prepareSectionTitle(Section newSection, String titleText) throws RepositoryException {
Node sectionNode = newSection.getNode();
- Node titleNode = DbkUtils.getOrAddDbk(sectionNode, DocBookType.title);
+ Node titleNode = DbkUtils.getOrAddDbk(sectionNode, DbkType.title);
getTextInterpreter().write(titleNode, titleText);
if (newSection.getHeader() == null)
newSection.createHeader();
TextSection section = (TextSection) sectionPart.getSection();
StyledControl styledControl = (StyledControl) part;
if (isDbk(partNode, para)) {
- String style = partNode.hasProperty(DocBookNames.DBK_ROLE)
- ? partNode.getProperty(DocBookNames.DBK_ROLE).getString()
+ String style = partNode.hasProperty(DbkAttr.role.name())
+ ? partNode.getProperty(DbkAttr.role.name()).getString()
: section.getDefaultTextStyle();
styledControl.setStyle(style);
}
try {
Node paragraphNode = paragraph.getNode();
if (style == null) {// default
- if (paragraphNode.hasProperty(DocBookNames.DBK_ROLE))
- paragraphNode.getProperty(DocBookNames.DBK_ROLE).remove();
+ if (paragraphNode.hasProperty(DbkAttr.role.name()))
+ paragraphNode.getProperty(DbkAttr.role.name()).remove();
} else {
- paragraphNode.setProperty(DocBookNames.DBK_ROLE, style);
+ paragraphNode.setProperty(DbkAttr.role.name(), style);
}
persistChanges(paragraphNode);
updateContent(paragraph);
if (sectionPart instanceof DbkImg) {
// FIXME make it more robust
node = node.getParent().getParent();
- if (!isDbk(node, DocBookType.mediaobject))
+ if (!isDbk(node, DbkType.mediaobject))
throw new IllegalArgumentException("Node " + node + " is not a media object.");
}
node.remove();
// paragraphNode.addMixin(CmsTypes.CMS_STYLED);
textInterpreter.write(paragraphNode, txt.substring(caretPosition));
- textInterpreter.write(sectionNode.getNode(DocBookType.title.get()), txt.substring(0, caretPosition));
+ textInterpreter.write(sectionNode.getNode(DbkType.title.get()), txt.substring(0, caretPosition));
sectionNode.orderBefore(p(paragraphNode.getIndex()), p(1));
persistChanges(sectionNode);
String txt = text.getText();
Node paragraphNode = paragraph.getNode();
Node sectionNode = paragraphNode.getParent();
- NodeIterator paragraphNodes = sectionNode.getNodes(DocBookType.para.get());
+ NodeIterator paragraphNodes = sectionNode.getNodes(DbkType.para.get());
long size = paragraphNodes.getSize();
if (paragraphNode.getIndex() == size)
return;// do nothing
Node sectionNode = section.getNode();
// main title
if (section == mainSection && section instanceof TextSection && paragraphNode.getIndex() == 1
- && !sectionNode.hasNode(DocBookType.title.get())) {
+ && !sectionNode.hasNode(DbkType.title.get())) {
DocBookSectionTitle sectionTitle = prepareSectionTitle(section, txt);
edit(sectionTitle, 0);
return;
}
- Node newSectionNode = addDbk(sectionNode, DocBookType.section);
+ Node newSectionNode = addDbk(sectionNode, DbkType.section);
// newSectionNode.addMixin(NodeType.MIX_TITLE);
sectionNode.orderBefore(h(newSectionNode.getIndex()), h(1));
while (sectionNode.hasNode(p(paragraphIndex + 1))) {
Node parag = sectionNode.getNode(p(paragraphIndex + 1));
sectionNode.getSession().move(sectionPath + '/' + p(paragraphIndex + 1),
- newSectionPath + '/' + DocBookType.para.get());
+ newSectionPath + '/' + DbkType.para.get());
SectionPart sp = section.getSectionPart(parag.getIdentifier());
if (sp instanceof Control)
((Control) sp).dispose();
}
// create title
- Node titleNode = DbkUtils.addDbk(newSectionNode, DocBookType.title);
+ Node titleNode = DbkUtils.addDbk(newSectionNode, DbkType.title);
// newSectionNode.addNode(DocBookType.TITLE, DocBookType.TITLE);
getTextInterpreter().write(titleNode, txt);
if (sectionN.getIndex() == 1)
return;// cannot deepen first section
Node previousSectionN = parentSectionN.getNode(h(sectionN.getIndex() - 1));
- NodeIterator subSections = previousSectionN.getNodes(DocBookType.section.get());
+ NodeIterator subSections = previousSectionN.getNodes(DbkType.section.get());
int subsectionsCount = (int) subSections.getSize();
previousSectionN.getSession().move(sectionN.getPath(),
previousSectionN.getPath() + "/" + h(subsectionsCount + 1));
mergedSection = lst.get(sectionNode.getIndex() - 1);
}
Node mergedNode = mergedSection.getNode();
- boolean mergedHasSubSections = mergedNode.hasNode(DocBookType.section.get());
+ boolean mergedHasSubSections = mergedNode.hasNode(DbkType.section.get());
// title as paragraph
Node newParagrapheNode = addDbk(mergedNode, para);
// newParagrapheNode.addMixin(CmsTypes.CMS_STYLED);
if (mergedHasSubSections)
mergedNode.orderBefore(p(newParagrapheNode.getIndex()), h(1));
- String txt = getTextInterpreter().read(sectionNode.getNode(DocBookType.title.get()));
+ String txt = getTextInterpreter().read(sectionNode.getNode(DbkType.title.get()));
getTextInterpreter().write(newParagrapheNode, txt);
// move
NodeIterator paragraphs = sectionNode.getNodes(para.get());
while (subsections.hasNext()) {
Section subsection = subsections.next();
Node s = subsection.getNode();
- mergedNode.getSession().move(s.getPath(), mergedNode.getPath() + '/' + DocBookType.section.get());
+ mergedNode.getSession().move(s.getPath(), mergedNode.getPath() + '/' + DbkType.section.get());
subsection.dispose();
}
protected String h(Integer index) {
StringBuilder sb = new StringBuilder(5);
- sb.append(DocBookType.section.get()).append('[').append(index).append(']');
+ sb.append(DbkType.section.get()).append('[').append(index).append(']');
return sb.toString();
}
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.cms.ui.util.DefaultImageManager;
import org.argeo.docbook.DbkUtils;
-import org.argeo.docbook.DocBookNames;
-import org.argeo.docbook.DocBookType;
+import org.argeo.docbook.DbkAttr;
+import org.argeo.docbook.DbkType;
import org.argeo.entity.EntityNames;
import org.argeo.entity.EntityType;
import org.argeo.jcr.JcrException;
@Override
public Binary getImageBinary(Node node) throws RepositoryException {
Node fileNode = null;
- if (DbkUtils.isDbk(node, DocBookType.imagedata)) {
+ if (DbkUtils.isDbk(node, DbkType.imagedata)) {
fileNode = getFileNode(node);
}
if (node.isNodeType(NT_FILE)) {
updateSize(fileNode, id);
String filePath = fileNode.getPath();
String relPath = filePath.substring(baseFolder.getPath().length() + 1);
- context.setProperty(DocBookNames.DBK_FILEREF, relPath);
+ context.setProperty(DbkAttr.fileref.name(), relPath);
}
@Override
public String getImageUrl(Node imageDataNode) throws RepositoryException {
// TODO factorise
String fileref = null;
- if (imageDataNode.hasProperty(DocBookNames.DBK_FILEREF))
- fileref = imageDataNode.getProperty(DocBookNames.DBK_FILEREF).getString();
+ if (imageDataNode.hasProperty(DbkAttr.fileref.name()))
+ fileref = imageDataNode.getProperty(DbkAttr.fileref.name()).getString();
if (fileref == null)
return null;
URI fileUri;
protected Node getFileNode(Node imageDataNode) throws RepositoryException {
// FIXME make URL use case more robust
String fileref = null;
- if (imageDataNode.hasProperty(DocBookNames.DBK_FILEREF))
- fileref = imageDataNode.getProperty(DocBookNames.DBK_FILEREF).getString();
+ if (imageDataNode.hasProperty(DbkAttr.fileref.name()))
+ fileref = imageDataNode.getProperty(DbkAttr.fileref.name()).getString();
if (fileref == null)
return null;
Node fileNode;
package org.argeo.docbook.ui;
import static org.argeo.docbook.DbkUtils.isDbk;
-import static org.argeo.docbook.DocBookType.para;
-import static org.argeo.docbook.DocBookType.title;
+import static org.argeo.docbook.DbkType.para;
+import static org.argeo.docbook.DbkType.title;
import java.io.IOException;
import java.io.StringReader;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.cms.ui.viewers.JcrVersionCmsEditable;
import org.argeo.cms.ui.widgets.ScrolledPage;
-import org.argeo.docbook.DocBookType;
+import org.argeo.docbook.DbkType;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
GridData textGd = CmsUiUtils.fillAll();
page.setLayoutData(textGd);
- if (context.isNodeType(DocBookType.article.get())) {
+ if (context.isNodeType(DbkType.article.get())) {
CmsEditable cmsEditable = new JcrVersionCmsEditable(context);
if (cmsEditable.canEdit())
new TextEditorHeader(cmsEditable, parent, SWT.NONE).setLayoutData(CmsUiUtils.fillWidth());
}
for (NodeIterator ni = context.getNodes(); ni.hasNext();) {
Node textNode = ni.nextNode();
- if (textNode.isNodeType(DocBookType.article.get()) && !textNode.getName().equals(WWW))
+ if (textNode.isNodeType(DbkType.article.get()) && !textNode.getName().equals(WWW))
new CmsLink(textNode.getName(), textNode.getPath()).createUi(parent, textNode);
}
}
import org.argeo.cms.ui.CmsEditable;
import org.argeo.cms.ui.util.CmsUiUtils;
import org.argeo.docbook.DbkUtils;
-import org.argeo.docbook.DocBookNames;
-import org.argeo.docbook.DocBookType;
-import org.argeo.jcr.Jcr;
-import org.argeo.jcr.JcrxType;
+import org.argeo.docbook.DbkType;
import org.eclipse.swt.widgets.Composite;
/** Text editor where sections and subsections can be managed by the user. */
@Override
protected Boolean isModelInitialized(Node textNode) throws RepositoryException {
- return textNode.hasNode(DocBookType.title.get()) || textNode.hasNode(DocBookType.para.get())
- || (!isFlat() && textNode.hasNode(DocBookType.section.get()));
+ return textNode.hasNode(DbkType.title.get()) || textNode.hasNode(DbkType.para.get())
+ || (!isFlat() && textNode.hasNode(DbkType.section.get()));
}
}
import org.argeo.cms.ui.AbstractCmsApp;
import org.argeo.cms.ui.CmsApp;
import org.argeo.cms.ui.CmsUiProvider;
-import org.argeo.docbook.DocBookType;
+import org.argeo.docbook.DbkType;
import org.argeo.docbook.ui.DocumentPage;
import org.argeo.jcr.Jcr;
import org.argeo.jcr.JcrUtils;
parent.setLayout(new GridLayout());
Node indexNode;
try {
- indexNode = JcrUtils.getOrAdd(Jcr.getRootNode(adminSession), DocumentPage.WWW, DocBookType.article.get());
+ indexNode = JcrUtils.getOrAdd(Jcr.getRootNode(adminSession), DocumentPage.WWW, DbkType.article.get());
adminSession.save();
} catch (RepositoryException e) {
throw new IllegalStateException(e);