1 package org.argeo.connect.e4.resources.parts;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.PropertyIterator;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8 import javax.jcr.nodetype.NodeType;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
13 import org.argeo.connect.ConnectException;
14 import org.argeo.connect.e4.parts.AbstractConnectCTabEditor;
15 import org.argeo.connect.resources.ResourcesNames;
16 import org.argeo.connect.ui.util.LazyCTabControl;
17 import org.argeo.connect.util.ConnectJcrUtils;
18 import org.argeo.eclipse.ui.EclipseUiUtils;
19 import org.eclipse.jface.viewers.ColumnLabelProvider;
20 import org.eclipse.rap.rwt.RWT;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.custom.CTabFolder;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26
27
28
29
30
31 public class TemplateEditor extends AbstractConnectCTabEditor {
32
33 final static Log log = LogFactory.getLog(TemplateEditor.class);
34
35
36
37 private Node nodeTemplate;
38
39 public void init() {
40 super.init();
41 nodeTemplate = getNode();
42
43 try {
44 if (!nodeTemplate.isNodeType(NodeType.MIX_VERSIONABLE))
45 nodeTemplate.addMixin(NodeType.MIX_VERSIONABLE);
46 if (!nodeTemplate.isNodeType(NodeType.MIX_LAST_MODIFIED))
47 nodeTemplate.addMixin(NodeType.MIX_LAST_MODIFIED);
48 Session session = nodeTemplate.getSession();
49 if (session.hasPendingChanges()) {
50 session.save();
51 log.warn("Versionable and last modified mixins " + "have been added to " + nodeTemplate);
52 }
53 } catch (RepositoryException e) {
54 throw new ConnectException("Unable to add missing mixins for node template: " + nodeTemplate, e);
55 }
56
57 String shortName = getResourcesService()
58 .getItemDefaultEnLabel(ConnectJcrUtils.get(nodeTemplate, ResourcesNames.RESOURCES_TEMPLATE_ID));
59 setPartName(shortName);
60 }
61
62 protected void populateTabFolder(CTabFolder folder) {
63 String tooltip;
64 try {
65 PropertyIterator pit = nodeTemplate.getProperties();
66
67 loop: while (pit.hasNext()) {
68 Property property = pit.nextProperty();
69 String propName = property.getName();
70
71
72 if (!property.isMultiple() || propName.startsWith("jcr:"))
73 continue loop;
74
75 String propLabel = propName;
76
77 tooltip = "Manage and edit the \"" + propLabel + "\" catalogue";
78 LazyCTabControl oneBusinessPropertyCatalogue = new TemplateValueCatalogue(folder, SWT.NO_FOCUS, this,
79 getResourcesService(), getSystemWorkbenchService(), nodeTemplate, propName,
80 ConnectJcrUtils.get(nodeTemplate, ResourcesNames.RESOURCES_TEMPLATE_ID));
81 oneBusinessPropertyCatalogue.setLayoutData(EclipseUiUtils.fillAll());
82 addLazyTabToFolder(folder, oneBusinessPropertyCatalogue, propLabel,
83 TemplateValueCatalogue.CTAB_ID + "/" + propName, tooltip);
84 }
85 } catch (RepositoryException e) {
86 throw new ConnectException("unable to create property " + "tabs for node template " + nodeTemplate, e);
87 }
88 }
89
90 @Override
91 protected void populateHeader(final Composite parent) {
92 try {
93 parent.setLayout(new GridLayout());
94 final Label editionInfoROLbl = getManagedForm().getToolkit().createLabel(parent, "", SWT.WRAP);
95 editionInfoROLbl.setData(RWT.MARKUP_ENABLED, Boolean.TRUE);
96 final ColumnLabelProvider festivalLP = new EditionOLP();
97
98 final AbstractFormPart editPart = new AbstractFormPart() {
99
100 public void refresh() {
101 super.refresh();
102 String roText = festivalLP.getText(nodeTemplate);
103 editionInfoROLbl.setText(roText);
104 parent.layout();
105 }
106 };
107 editPart.initialize(getManagedForm());
108 getManagedForm().addPart(editPart);
109 } catch (Exception e) {
110 throw new ConnectException("Cannot create main info section", e);
111 }
112 }
113
114 @Override
115 protected boolean showDeleteButton() {
116 return false;
117 }
118
119 private class EditionOLP extends ColumnLabelProvider {
120
121 private static final long serialVersionUID = 1L;
122
123 @Override
124 public String getText(Object element) {
125 Node node = (Node) element;
126 StringBuilder builder = new StringBuilder();
127 builder.append("<span style='font-size:15px;'>");
128 builder.append("<b><big>");
129 builder.append(ConnectJcrUtils.get(node, ResourcesNames.RESOURCES_TEMPLATE_ID));
130 builder.append("</big></b> ");
131 builder.append("</span>");
132 return builder.toString();
133 }
134 }
135 }