001
014
015 package com.liferay.portlet.wiki.lar;
016
017 import com.liferay.portal.kernel.dao.orm.QueryUtil;
018 import com.liferay.portal.kernel.lar.DataLevel;
019 import com.liferay.portal.kernel.lar.ManifestSummary;
020 import com.liferay.portal.kernel.lar.PortletDataContext;
021 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
022 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
023 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
024 import com.liferay.portal.kernel.lar.StagedModelType;
025 import com.liferay.portal.kernel.log.Log;
026 import com.liferay.portal.kernel.log.LogFactoryUtil;
027 import com.liferay.portal.kernel.util.GetterUtil;
028 import com.liferay.portal.kernel.util.MapUtil;
029 import com.liferay.portal.kernel.util.StringPool;
030 import com.liferay.portal.kernel.xml.Element;
031 import com.liferay.portlet.wiki.model.WikiNode;
032 import com.liferay.portlet.wiki.model.WikiPage;
033 import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
034 import com.liferay.portlet.wiki.service.permission.WikiPermission;
035 import com.liferay.portlet.wiki.service.persistence.WikiNodeUtil;
036
037 import java.util.List;
038 import java.util.Map;
039
040 import javax.portlet.PortletPreferences;
041
042
046 public class WikiDisplayPortletDataHandler extends WikiPortletDataHandler {
047
048 public WikiDisplayPortletDataHandler() {
049 setDataLevel(DataLevel.PORTLET_INSTANCE);
050 setDataPortletPreferences("title", "nodeId");
051 setExportControls(
052 new PortletDataHandlerBoolean(
053 NAMESPACE, "selected-node", true, true,
054 new PortletDataHandlerControl[] {
055 new PortletDataHandlerBoolean(
056 NAMESPACE, "referenced-content")
057 },
058 WikiPage.class.getName()));
059 }
060
061 @Override
062 protected PortletPreferences doDeleteData(
063 PortletDataContext portletDataContext, String portletId,
064 PortletPreferences portletPreferences)
065 throws Exception {
066
067 if (portletPreferences == null) {
068 return portletPreferences;
069 }
070
071 portletPreferences.setValue("title", StringPool.BLANK);
072 portletPreferences.setValue("nodeId", StringPool.BLANK);
073
074 return portletPreferences;
075 }
076
077 @Override
078 protected String doExportData(
079 PortletDataContext portletDataContext, String portletId,
080 PortletPreferences portletPreferences)
081 throws Exception {
082
083 long nodeId = GetterUtil.getLong(
084 portletPreferences.getValue("nodeId", StringPool.BLANK));
085
086 if (nodeId <= 0) {
087 if (_log.isWarnEnabled()) {
088 _log.warn(
089 "No node id found in preferences of portlet " + portletId);
090 }
091
092 return StringPool.BLANK;
093 }
094
095 String title = portletPreferences.getValue("title", null);
096
097 if (title == null) {
098 if (_log.isWarnEnabled()) {
099 _log.warn(
100 "No title found in preferences of portlet " + portletId);
101 }
102
103 return StringPool.BLANK;
104 }
105
106 WikiNode node = WikiNodeUtil.fetchByPrimaryKey(nodeId);
107
108 if (node == null) {
109 if (_log.isWarnEnabled()) {
110 _log.warn("Unable to find wiki node");
111 }
112
113 return StringPool.BLANK;
114 }
115
116 portletDataContext.addPermissions(
117 WikiPermission.RESOURCE_NAME, portletDataContext.getScopeGroupId());
118
119 Element rootElement = addExportDataRootElement(portletDataContext);
120
121 rootElement.addAttribute(
122 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
123
124 StagedModelDataHandlerUtil.exportStagedModel(portletDataContext, node);
125
126 List<WikiPage> pages = WikiPageLocalServiceUtil.getPages(
127 node.getNodeId(), QueryUtil.ALL_POS, QueryUtil.ALL_POS);
128
129 for (WikiPage page : pages) {
130 StagedModelDataHandlerUtil.exportStagedModel(
131 portletDataContext, page);
132 }
133
134 return getExportDataRootElementString(rootElement);
135 }
136
137 @Override
138 protected PortletPreferences doImportData(
139 PortletDataContext portletDataContext, String portletId,
140 PortletPreferences portletPreferences, String data)
141 throws Exception {
142
143 portletDataContext.importPermissions(
144 WikiPermission.RESOURCE_NAME, portletDataContext.getSourceGroupId(),
145 portletDataContext.getScopeGroupId());
146
147 super.importData(
148 portletDataContext, portletId, portletPreferences, data);
149
150 long nodeId = GetterUtil.getLong(
151 portletPreferences.getValue("nodeId", StringPool.BLANK));
152
153 if (nodeId > 0) {
154 Map<Long, Long> nodeIds =
155 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
156 WikiNode.class);
157
158 nodeId = MapUtil.getLong(nodeIds, nodeId, nodeId);
159
160 portletPreferences.setValue("nodeId", String.valueOf(nodeId));
161 }
162
163 return portletPreferences;
164 }
165
166 @Override
167 protected void doPrepareManifestSummary(
168 PortletDataContext portletDataContext,
169 PortletPreferences portletPreferences)
170 throws Exception {
171
172 ManifestSummary manifestSummary =
173 portletDataContext.getManifestSummary();
174
175 if ((portletPreferences == null) ||
176 (manifestSummary.getModelAdditionCount(WikiPage.class) > -1)) {
177
178 return;
179 }
180
181 long nodeId = GetterUtil.getLong(
182 portletPreferences.getValue("nodeId", StringPool.BLANK));
183
184 if (nodeId > 0) {
185 manifestSummary.addModelAdditionCount(
186 new StagedModelType(WikiPage.class),
187 WikiPageLocalServiceUtil.getPagesCount(nodeId));
188 }
189 }
190
191 private static Log _log = LogFactoryUtil.getLog(
192 WikiDisplayPortletDataHandler.class);
193
194 }