import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Observer;
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;
import org.argeo.cms.text.TextSection;
import org.argeo.cms.ui.CmsEditable;
import org.argeo.cms.ui.widgets.EditableText;
import org.argeo.cms.ui.widgets.Img;
import org.argeo.cms.ui.widgets.StyledControl;
+import org.argeo.entity.EntityType;
+import org.argeo.jcr.JcrException;
import org.argeo.jcr.JcrUtils;
import org.eclipse.rap.fileupload.FileDetails;
import org.eclipse.rap.fileupload.FileUploadEvent;
protected AbstractDbkViewer(Section parent, int style, CmsEditable cmsEditable) {
super(parent, style, cmsEditable);
CmsView cmsView = CmsView.getCmsView(parent);
- imageManager = cmsView.getImageManager();
+// imageManager = cmsView.getImageManager();
+ imageManager = new DbkImageManager();
flat = SWT.FLAT == (style & SWT.FLAT);
if (getCmsEditable().canEdit()) {
fileUploadListener = new FUL();
- styledTools = new DbkContextMenu(this, parent.getDisplay());
+ styledTools = new DbkContextMenu(this, parent.getShell());
}
this.mainSection = parent;
initModelIfNeeded(mainSection.getNode());
updateContent(title);
}
- for (NodeIterator ni = node.getNodes(DocBookNames.DBK_PARA); ni.hasNext();) {
+ for (NodeIterator ni = node.getNodes(); ni.hasNext();) {
Node child = ni.nextNode();
- final SectionPart sectionPart;
- if (child.isNodeType(DocBookTypes.IMAGEDATA) || child.isNodeType(NodeType.NT_FILE)) {
- // FIXME adapt to DocBook
- sectionPart = newImg(textSection, child);
+ SectionPart sectionPart = null;
+ if (child.isNodeType(DocBookTypes.MEDIAOBJECT)) {
+ if (child.hasNode(DocBookTypes.IMAGEOBJECT)) {
+ Node imageNode = child.getNode(DocBookTypes.IMAGEOBJECT).getNode(DocBookTypes.INFO)
+ .getNode(EntityType.box.get());
+ sectionPart = newImg(textSection, imageNode);
+ }
} else if (child.isNodeType(DocBookTypes.PARA)) {
sectionPart = newParagraph(textSection, child);
} else {
sectionPart = newSectionPart(textSection, child);
- if (sectionPart == null)
- throw new CmsException("Unsupported node " + child);
+// if (sectionPart == null)
+// throw new IllegalArgumentException("Unsupported node " + child);
// TODO list node types in exception
}
- if (sectionPart instanceof Control)
+ if (sectionPart != null && sectionPart instanceof Control)
((Control) sectionPart).setLayoutData(CmsUiUtils.fillWidth());
}
for (Section s : section.getSubSections().values())
refresh(s);
}
- // section.layout();
+ // section.layout(true, true);
}
/** To be overridden in order to provide additional SectionPart types */
return paragraph;
}
- protected Img newImg(TextSection parent, Node node) throws RepositoryException {
- Img img = new Img(parent, parent.getStyle(), node) {
- private static final long serialVersionUID = 1297900641952417540L;
+ protected Img newImg(TextSection parent, Node node) {
+ try {
+ Img img = new Img(parent, parent.getStyle(), node, imageManager) {
+ private static final long serialVersionUID = 1297900641952417540L;
- @Override
- protected void setContainerLayoutData(Composite composite) {
- composite.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT));
- }
+ @Override
+ protected void setContainerLayoutData(Composite composite) {
+ composite.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT));
+ }
- @Override
- protected void setControlLayoutData(Control control) {
- control.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT));
- }
- };
- img.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT));
- updateContent(img);
- img.setMouseListener(getMouseListener());
- return img;
+ @Override
+ protected void setControlLayoutData(Control control) {
+ control.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT));
+ }
+ };
+ img.setLayoutData(CmsUiUtils.grabWidth(SWT.CENTER, SWT.DEFAULT));
+ updateContent(img);
+ img.setMouseListener(getMouseListener());
+ return img;
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot add new image " + node, e);
+ }
}
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;
if (part instanceof EditableText) {
EditableText paragraph = (EditableText) part;
if (paragraph == getEdited())
- paragraph.setText(textInterpreter.read(partNode));
- else
paragraph.setText(textInterpreter.raw(partNode));
+ else
+ paragraph.setText(textInterpreter.readSimpleHtml(partNode));
} else if (part instanceof EditableImage) {
EditableImage editableImage = (EditableImage) part;
imageManager.load(partNode, part.getControl(), editableImage.getPreferredImageSize());
return;
String text = ((Text) et.getControl()).getText();
- String[] lines = text.split("[\r\n]+");
+ // String[] lines = text.split("[\r\n]+");
+ String[] lines = { text };
assert lines.length != 0;
saveLine(part, lines[0]);
if (lines.length > 1) {
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());
} else if (part instanceof PropertyPart) {
saveLine(((PropertyPart) part).getProperty(), line);
} else {
- throw new CmsException("Unsupported part " + part);
+ throw new IllegalArgumentException("Unsupported part " + part);
}
}
void setParagraphStyle(Paragraph paragraph, String style) {
try {
Node paragraphNode = paragraph.getNode();
- paragraphNode.setProperty(DocBookNames.DBK_ROLE, style);
+ if (style == null) {// default
+ if (paragraphNode.hasProperty(DocBookNames.DBK_ROLE))
+ paragraphNode.getProperty(DocBookNames.DBK_ROLE).remove();
+ } else {
+ paragraphNode.setProperty(DocBookNames.DBK_ROLE, style);
+ }
persistChanges(paragraphNode);
updateContent(paragraph);
- layout(paragraph);
+ layoutPage();
} catch (RepositoryException e1) {
- throw new CmsException("Cannot set style " + style + " on " + paragraph, e1);
+ throw new JcrException("Cannot set style " + style + " on " + paragraph, e1);
}
}
- void deletePart(SectionPart paragraph) {
+ void insertPart(Section section, Node node) {
try {
- Node paragraphNode = paragraph.getNode();
- Section section = paragraph.getSection();
- Session session = paragraphNode.getSession();
- paragraphNode.remove();
+ refresh(section);
+ layoutPage();
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot insert part " + node + " in section " + section.getNode(), e);
+ }
+ }
+
+ void deletePart(SectionPart sectionPart) {
+ try {
+ Node node = sectionPart.getNode();
+ Session session = node.getSession();
+ if (sectionPart instanceof Img) {
+ // FIXME make it more robust
+ node = node.getParent().getParent().getParent();
+ }
+ node.remove();
+ session.save();
+ if (sectionPart instanceof Control)
+ ((Control) sectionPart).dispose();
+ layoutPage();
+ } catch (RepositoryException e1) {
+ throw new JcrException("Cannot delete " + sectionPart, e1);
+ }
+ }
+
+ void deleteSection(Section section) {
+ try {
+ Node node = section.getNode();
+ Session session = node.getSession();
+ node.remove();
session.save();
- if (paragraph instanceof Control)
- ((Control) paragraph).dispose();
- layout(section);
+ section.dispose();
+ layoutPage();
} catch (RepositoryException e1) {
- throw new CmsException("Cannot delete " + paragraph, e1);
+ throw new JcrException("Cannot delete " + section, e1);
}
}
edit(paragraph, 0);
}
} catch (RepositoryException e) {
- throw new CmsException("Cannot split " + getEdited(), e);
+ throw new JcrException("Cannot split " + getEdited(), e);
}
}
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);
}
}
paragraphMergedWithNext(paragraph, removed);
edit(paragraph, txt.length());
} catch (RepositoryException e) {
- throw new CmsException("Cannot stop editing", e);
+ throw new JcrException("Cannot stop editing", e);
}
}
if (getEdited() == part)
return;
edit(part, null);
- layout(part.getControl());
+ layoutPage();
}
}
} catch (RepositoryException e) {
- throw new CmsException("Cannot upload", e);
+ throw new JcrException("Cannot upload", e);
}
}
persistChanges(previousSectionN);
}
} catch (RepositoryException e) {
- throw new CmsException("Cannot deepen " + getEdited(), e);
+ throw new JcrException("Cannot deepen " + getEdited(), e);
}
}
try {
if (getEdited() instanceof Paragraph) {
upload(getEdited());
- } else if (getEdited() instanceof SectionTitle) {
- SectionTitle sectionTitle = (SectionTitle) getEdited();
+ } else if (getEdited() instanceof DocBookSectionTitle) {
+ DocBookSectionTitle sectionTitle = (DocBookSectionTitle) getEdited();
Section section = sectionTitle.getSection();
Node sectionNode = section.getNode();
Section parentSection = section.getParentSection();
persistChanges(mergedNode);
}
} catch (RepositoryException e) {
- throw new CmsException("Cannot undeepen " + getEdited(), e);
+ throw new JcrException("Cannot undeepen " + getEdited(), e);
}
}
try {
// Common
if (ke.keyCode == SWT.ESC) {
- cancelEdit();
+// cancelEdit();
+ saveEdit();
} else if (ke.character == '\r') {
- splitEdit();
+ if (!shiftPressed)
+ splitEdit();
+ } else if (ke.character == 'z') {
+ if (ctrlPressed)
+ cancelEdit();
} else if (ke.character == 'S') {
if (ctrlPressed)
saveEdit();
public void mouseDoubleClick(MouseEvent e) {
if (e.button == 1) {
Control source = (Control) e.getSource();
- if (getCmsEditable().canEdit()) {
- if (getCmsEditable().isEditing() && !(getEdited() instanceof Img)) {
- if (source == mainSection)
- return;
- EditablePart part = findDataParent(source);
- upload(part);
- } else {
- getCmsEditable().startEditing();
+ EditablePart composite = findDataParent(source);
+ Point point = new Point(e.x, e.y);
+ if (composite instanceof Img) {
+ if (getCmsEditable().canEdit()) {
+ if (getCmsEditable().isEditing() && !(getEdited() instanceof Img)) {
+ if (source == mainSection)
+ return;
+ EditablePart part = findDataParent(source);
+ upload(part);
+ } else {
+ getCmsEditable().startEditing();
+ }
}
- }
+ } else
+ edit(composite, source.toDisplay(point));
}
}
@Override
public void mouseDown(MouseEvent e) {
if (getCmsEditable().isEditing()) {
- if (e.button == 1) {
- Control source = (Control) e.getSource();
- EditablePart composite = findDataParent(source);
- Point point = new Point(e.x, e.y);
- if (!(composite instanceof Img))
- edit(composite, source.toDisplay(point));
- } else if (e.button == 3) {
+ if (e.button == 3) {
EditablePart composite = findDataParent((Control) e.getSource());
- if (styledTools != null)
- styledTools.show(composite, new Point(e.x, e.y));
+ if (styledTools != null) {
+ List<String> styles = getAvailableStyles(composite);
+ styledTools.show(composite, new Point(e.x, e.y), styles);
+ }
}
}
}
}
}
+ protected List<String> getAvailableStyles(EditablePart editablePart) {
+ return new ArrayList<>();
+ }
+
// FILE UPLOAD LISTENER
private class FUL implements FileUploadListener {
public void uploadProgress(FileUploadEvent event) {
}
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) {