001
014
015 package com.liferay.portlet.wiki.lar;
016
017 import com.liferay.portal.kernel.lar.PortletDataContext;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.util.GetterUtil;
021 import com.liferay.portal.kernel.util.MapUtil;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.Validator;
024 import com.liferay.portal.kernel.xml.Document;
025 import com.liferay.portal.kernel.xml.Element;
026 import com.liferay.portal.kernel.xml.SAXReaderUtil;
027 import com.liferay.portlet.journal.lar.JournalPortletDataHandler;
028 import com.liferay.portlet.wiki.NoSuchNodeException;
029 import com.liferay.portlet.wiki.model.WikiNode;
030 import com.liferay.portlet.wiki.model.WikiPage;
031 import com.liferay.portlet.wiki.service.persistence.WikiNodeUtil;
032 import com.liferay.portlet.wiki.util.WikiCacheUtil;
033
034 import java.util.Map;
035
036 import javax.portlet.PortletPreferences;
037
038
041 public class WikiDisplayPortletDataHandler extends WikiPortletDataHandler {
042
043 public WikiDisplayPortletDataHandler() {
044 setDataPortletPreferences("title", "nodeId");
045 }
046
047 @Override
048 protected PortletPreferences doDeleteData(
049 PortletDataContext portletDataContext, String portletId,
050 PortletPreferences portletPreferences)
051 throws Exception {
052
053 if (portletPreferences == null) {
054 return portletPreferences;
055 }
056
057 portletPreferences.setValue("title", StringPool.BLANK);
058 portletPreferences.setValue("nodeId", StringPool.BLANK);
059
060 return portletPreferences;
061 }
062
063 @Override
064 protected String doExportData(
065 PortletDataContext portletDataContext, String portletId,
066 PortletPreferences portletPreferences)
067 throws Exception {
068
069 long nodeId = GetterUtil.getLong(
070 portletPreferences.getValue("nodeId", StringPool.BLANK));
071
072 if (nodeId <= 0) {
073 if (_log.isWarnEnabled()) {
074 _log.warn(
075 "No node id found in preferences of portlet " + portletId);
076 }
077
078 return StringPool.BLANK;
079 }
080
081 String title = portletPreferences.getValue("title", null);
082
083 if (title == null) {
084 if (_log.isWarnEnabled()) {
085 _log.warn(
086 "No title found in preferences of portlet " + portletId);
087 }
088
089 return StringPool.BLANK;
090 }
091
092 WikiNode node = null;
093
094 try {
095 node = WikiNodeUtil.findByPrimaryKey(nodeId);
096 }
097 catch (NoSuchNodeException nsne) {
098 if (_log.isWarnEnabled()) {
099 _log.warn(nsne, nsne);
100 }
101
102 return StringPool.BLANK;
103 }
104
105 portletDataContext.addPermissions(
106 "com.liferay.portlet.wiki", portletDataContext.getScopeGroupId());
107
108 Element rootElement = addExportRootElement();
109
110 rootElement.addAttribute(
111 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
112
113 Element nodesElement = rootElement.addElement("nodes");
114 Element pagesElement = rootElement.addElement("pages");
115
116 WikiPortletDataHandler.exportNode(
117 portletDataContext, nodesElement, pagesElement, node);
118
119 return rootElement.formattedString();
120 }
121
122 @Override
123 protected PortletPreferences doImportData(
124 PortletDataContext portletDataContext, String portletId,
125 PortletPreferences portletPreferences, String data)
126 throws Exception {
127
128 portletDataContext.importPermissions(
129 "com.liferay.portlet.wiki", portletDataContext.getSourceGroupId(),
130 portletDataContext.getScopeGroupId());
131
132 if (Validator.isNull(data)) {
133 return null;
134 }
135
136 Document document = SAXReaderUtil.read(data);
137
138 Element rootElement = document.getRootElement();
139
140 Element nodesElement = rootElement.element("nodes");
141
142 for (Element nodeElement : nodesElement.elements("node")) {
143 String path = nodeElement.attributeValue("path");
144
145 if (!portletDataContext.isPathNotProcessed(path)) {
146 continue;
147 }
148
149 WikiNode node = (WikiNode)portletDataContext.getZipEntryAsObject(
150 path);
151
152 WikiPortletDataHandler.importNode(portletDataContext, node);
153 }
154
155 Element pagesElement = rootElement.element("pages");
156
157 JournalPortletDataHandler.importReferencedData(
158 portletDataContext, pagesElement);
159
160 for (Element pageElement : pagesElement.elements("page")) {
161 String path = pageElement.attributeValue("path");
162
163 if (!portletDataContext.isPathNotProcessed(path)) {
164 continue;
165 }
166
167 WikiPage page = (WikiPage)portletDataContext.getZipEntryAsObject(
168 path);
169
170 WikiPortletDataHandler.importPage(
171 portletDataContext, pageElement, page);
172 }
173
174 Map<Long, Long> nodeIds =
175 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
176 WikiNode.class);
177
178 for (long nodeId : nodeIds.values()) {
179 WikiCacheUtil.clearCache(nodeId);
180 }
181
182 long nodeId = GetterUtil.getLong(
183 portletPreferences.getValue("nodeId", StringPool.BLANK));
184
185 if (nodeId > 0) {
186 nodeId = MapUtil.getLong(nodeIds, nodeId, nodeId);
187
188 portletPreferences.setValue("nodeId", String.valueOf(nodeId));
189 }
190
191 return portletPreferences;
192 }
193
194 private static Log _log = LogFactoryUtil.getLog(
195 WikiDisplayPortletDataHandler.class);
196
197 }