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.addPermissions(
119 WikiPermission.RESOURCE_NAME, portletDataContext.getScopeGroupId());
120
121 rootElement.addAttribute(
122 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
123
124 ActionableDynamicQuery nodeActionableDynamicQuery =
125 new WikiNodeExportActionableDynamicQuery(portletDataContext);
126
127 nodeActionableDynamicQuery.performActions();
128
129 ActionableDynamicQuery pageActionableDynamicQuery =
130 new WikiPageExportActionableDynamicQuery(portletDataContext);
131
132 pageActionableDynamicQuery.performActions();
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 if (!portletDataContext.getBooleanParameter(NAMESPACE, "wiki-pages")) {
144 return null;
145 }
146
147 portletDataContext.importPermissions(
148 WikiPermission.RESOURCE_NAME, portletDataContext.getSourceGroupId(),
149 portletDataContext.getScopeGroupId());
150
151 Element nodesElement = portletDataContext.getImportDataGroupElement(
152 WikiNode.class);
153
154 List<Element> nodeElements = nodesElement.elements();
155
156 for (Element nodeElement : nodeElements) {
157 StagedModelDataHandlerUtil.importStagedModel(
158 portletDataContext, nodeElement);
159 }
160
161 Element pagesElement = portletDataContext.getImportDataGroupElement(
162 WikiPage.class);
163
164 List<Element> pageElements = pagesElement.elements();
165
166 for (Element pageElement : pageElements) {
167 StagedModelDataHandlerUtil.importStagedModel(
168 portletDataContext, pageElement);
169 }
170
171 Map<Long, Long> nodeIds =
172 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
173 WikiNode.class);
174
175 for (long nodeId : nodeIds.values()) {
176 WikiCacheUtil.clearCache(nodeId);
177 }
178
179 return null;
180 }
181
182 @Override
183 protected void doPrepareManifestSummary(
184 PortletDataContext portletDataContext,
185 PortletPreferences portletPreferences)
186 throws Exception {
187
188 ActionableDynamicQuery nodeActionableDynamicQuery =
189 new WikiNodeExportActionableDynamicQuery(portletDataContext);
190
191 nodeActionableDynamicQuery.performCount();
192
193 ActionableDynamicQuery pageExportActionableDynamicQuery =
194 new WikiPageExportActionableDynamicQuery(portletDataContext);
195
196 pageExportActionableDynamicQuery.performCount();
197 }
198
199 @Override
200 protected PortletPreferences doProcessExportPortletPreferences(
201 PortletDataContext portletDataContext, String portletId,
202 PortletPreferences portletPreferences, Element rootElement)
203 throws Exception {
204
205 Portlet portlet = PortletLocalServiceUtil.getPortletById(
206 portletDataContext.getCompanyId(), portletId);
207
208 String hiddenNodeNames = portletPreferences.getValue(
209 "hiddenNodes", null);
210
211 for (String hiddenNodeName : StringUtil.split(hiddenNodeNames)) {
212 WikiNode wikiNode =
213 WikiNodeLocalServiceUtil.getNode(
214 portletDataContext.getScopeGroupId(), hiddenNodeName);
215
216 portletDataContext.addReferenceElement(
217 portlet, rootElement, wikiNode, WikiNode.class,
218 PortletDataContext.REFERENCE_TYPE_DEPENDENCY,
219 !portletDataContext.getBooleanParameter(
220 NAMESPACE, "wiki-pages"));
221 }
222
223 String visibleNodeNames = portletPreferences.getValue(
224 "visibleNodes", null);
225
226 for (String visibleNodeName : StringUtil.split(visibleNodeNames)) {
227 WikiNode wikiNode =
228 WikiNodeLocalServiceUtil.getNode(
229 portletDataContext.getScopeGroupId(), visibleNodeName);
230
231 portletDataContext.addReferenceElement(
232 portlet, rootElement, wikiNode, WikiNode.class,
233 PortletDataContext.REFERENCE_TYPE_DEPENDENCY,
234 !portletDataContext.getBooleanParameter(
235 NAMESPACE, "wiki-pages"));
236 }
237
238 return portletPreferences;
239 }
240
241 }