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