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