001
014
015 package com.liferay.portlet.wiki.lar;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
019 import com.liferay.portal.kernel.lar.PortletDataContext;
020 import com.liferay.portal.kernel.lar.PortletDataException;
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.util.StringUtil;
026 import com.liferay.portal.kernel.xml.Element;
027 import com.liferay.portlet.wiki.model.WikiNode;
028 import com.liferay.portlet.wiki.model.WikiPage;
029 import com.liferay.portlet.wiki.service.WikiNodeLocalServiceUtil;
030 import com.liferay.portlet.wiki.service.permission.WikiPermission;
031 import com.liferay.portlet.wiki.service.persistence.WikiNodeExportActionableDynamicQuery;
032 import com.liferay.portlet.wiki.service.persistence.WikiPageExportActionableDynamicQuery;
033 import com.liferay.portlet.wiki.util.WikiCacheThreadLocal;
034 import com.liferay.portlet.wiki.util.WikiCacheUtil;
035
036 import java.util.List;
037 import java.util.Map;
038
039 import javax.portlet.PortletPreferences;
040
041
049 public class WikiPortletDataHandler extends BasePortletDataHandler {
050
051 public static final String NAMESPACE = "wiki";
052
053 public WikiPortletDataHandler() {
054 setDataPortletPreferences("hiddenNodes, visibleNodes");
055 setDeletionSystemEventStagedModelTypes(
056 new StagedModelType(WikiNode.class),
057 new StagedModelType(WikiPage.class));
058 setExportControls(
059 new PortletDataHandlerBoolean(
060 NAMESPACE, "wiki-pages", true, false,
061 new PortletDataHandlerControl[] {
062 new PortletDataHandlerBoolean(
063 NAMESPACE, "referenced-content")
064 },
065 WikiPage.class.getName()));
066 setImportControls(getExportControls());
067 }
068
069 @Override
070 public PortletPreferences importData(
071 PortletDataContext portletDataContext, String portletId,
072 PortletPreferences portletPreferences, String data)
073 throws PortletDataException {
074
075 WikiCacheThreadLocal.setClearCache(false);
076
077 try {
078 return super.importData(
079 portletDataContext, portletId, portletPreferences, data);
080 }
081 finally {
082 WikiCacheThreadLocal.setClearCache(true);
083 }
084 }
085
086 @Override
087 protected PortletPreferences doDeleteData(
088 PortletDataContext portletDataContext, String portletId,
089 PortletPreferences portletPreferences)
090 throws Exception {
091
092 if (portletDataContext.addPrimaryKey(
093 WikiPortletDataHandler.class, "deleteData")) {
094
095 return portletPreferences;
096 }
097
098 WikiNodeLocalServiceUtil.deleteNodes(
099 portletDataContext.getScopeGroupId());
100
101 return portletPreferences;
102 }
103
104 @Override
105 protected String doExportData(
106 final PortletDataContext portletDataContext, String portletId,
107 PortletPreferences portletPreferences)
108 throws Exception {
109
110 Element rootElement = addExportDataRootElement(portletDataContext);
111
112 if (!portletDataContext.getBooleanParameter(NAMESPACE, "wiki-pages")) {
113 return getExportDataRootElementString(rootElement);
114 }
115
116 portletDataContext.addPortletPermissions(WikiPermission.RESOURCE_NAME);
117
118 rootElement.addAttribute(
119 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
120
121 ActionableDynamicQuery nodeActionableDynamicQuery =
122 new WikiNodeExportActionableDynamicQuery(portletDataContext);
123
124 nodeActionableDynamicQuery.performActions();
125
126 ActionableDynamicQuery pageActionableDynamicQuery =
127 new WikiPageExportActionableDynamicQuery(portletDataContext);
128
129 pageActionableDynamicQuery.performActions();
130
131 return getExportDataRootElementString(rootElement);
132 }
133
134 @Override
135 protected PortletPreferences doImportData(
136 PortletDataContext portletDataContext, String portletId,
137 PortletPreferences portletPreferences, String data)
138 throws Exception {
139
140 if (!portletDataContext.getBooleanParameter(NAMESPACE, "wiki-pages")) {
141 return null;
142 }
143
144 portletDataContext.importPortletPermissions(
145 WikiPermission.RESOURCE_NAME);
146
147 Element nodesElement = portletDataContext.getImportDataGroupElement(
148 WikiNode.class);
149
150 List<Element> nodeElements = nodesElement.elements();
151
152 for (Element nodeElement : nodeElements) {
153 StagedModelDataHandlerUtil.importStagedModel(
154 portletDataContext, nodeElement);
155 }
156
157 Element pagesElement = portletDataContext.getImportDataGroupElement(
158 WikiPage.class);
159
160 List<Element> pageElements = pagesElement.elements();
161
162 for (Element pageElement : pageElements) {
163 StagedModelDataHandlerUtil.importStagedModel(
164 portletDataContext, pageElement);
165 }
166
167 Map<Long, Long> nodeIds =
168 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
169 WikiNode.class);
170
171 for (long nodeId : nodeIds.values()) {
172 WikiCacheUtil.clearCache(nodeId);
173 }
174
175 return null;
176 }
177
178 @Override
179 protected void doPrepareManifestSummary(
180 PortletDataContext portletDataContext,
181 PortletPreferences portletPreferences)
182 throws Exception {
183
184 ActionableDynamicQuery nodeActionableDynamicQuery =
185 new WikiNodeExportActionableDynamicQuery(portletDataContext);
186
187 nodeActionableDynamicQuery.performCount();
188
189 ActionableDynamicQuery pageExportActionableDynamicQuery =
190 new WikiPageExportActionableDynamicQuery(portletDataContext);
191
192 pageExportActionableDynamicQuery.performCount();
193 }
194
195 @Override
196 protected PortletPreferences doProcessExportPortletPreferences(
197 PortletDataContext portletDataContext, String portletId,
198 PortletPreferences portletPreferences)
199 throws Exception {
200
201 String hiddenNodeNames = portletPreferences.getValue(
202 "hiddenNodes", null);
203
204 for (String hiddenNodeName : StringUtil.split(hiddenNodeNames)) {
205 WikiNode wikiNode =
206 WikiNodeLocalServiceUtil.getNode(
207 portletDataContext.getScopeGroupId(), hiddenNodeName);
208
209 StagedModelDataHandlerUtil.exportReferenceStagedModel(
210 portletDataContext, portletId, wikiNode);
211 }
212
213 String visibleNodeNames = portletPreferences.getValue(
214 "visibleNodes", null);
215
216 for (String visibleNodeName : StringUtil.split(visibleNodeNames)) {
217 WikiNode wikiNode =
218 WikiNodeLocalServiceUtil.getNode(
219 portletDataContext.getScopeGroupId(), visibleNodeName);
220
221 StagedModelDataHandlerUtil.exportReferenceStagedModel(
222 portletDataContext, portletId, wikiNode);
223 }
224
225 return portletPreferences;
226 }
227
228 @Override
229 protected PortletPreferences doProcessImportPortletPreferences(
230 PortletDataContext portletDataContext, String portletId,
231 PortletPreferences portletPreferences)
232 throws Exception {
233
234 StagedModelDataHandlerUtil.importReferenceStagedModels(
235 portletDataContext, WikiNode.class);
236
237 return portletPreferences;
238 }
239
240 }