001
014
015 package com.liferay.portlet.bookmarks.lar;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
021 import com.liferay.portal.kernel.lar.PortletDataContext;
022 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
023 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
024 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
025 import com.liferay.portal.kernel.xml.Document;
026 import com.liferay.portal.kernel.xml.Element;
027 import com.liferay.portal.kernel.xml.SAXReaderUtil;
028 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
029 import com.liferay.portlet.bookmarks.model.BookmarksFolder;
030 import com.liferay.portlet.bookmarks.model.BookmarksFolderConstants;
031 import com.liferay.portlet.bookmarks.service.BookmarksEntryLocalServiceUtil;
032 import com.liferay.portlet.bookmarks.service.BookmarksFolderLocalServiceUtil;
033 import com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryActionableDynamicQuery;
034 import com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderActionableDynamicQuery;
035
036 import javax.portlet.PortletPreferences;
037
038
046 public class BookmarksPortletDataHandler extends BasePortletDataHandler {
047
048 public static final String NAMESPACE = "bookmarks";
049
050 public BookmarksPortletDataHandler() {
051 setAlwaysExportable(true);
052 setExportControls(
053 new PortletDataHandlerBoolean(
054 NAMESPACE, "folders-and-entries", true, true));
055 setExportMetadataControls(
056 new PortletDataHandlerBoolean(
057 NAMESPACE, "bookmarks", true,
058 new PortletDataHandlerControl[] {
059 new PortletDataHandlerBoolean(NAMESPACE, "categories"),
060 new PortletDataHandlerBoolean(NAMESPACE, "ratings"),
061 new PortletDataHandlerBoolean(NAMESPACE, "tags")
062 }));
063 setPublishToLiveByDefault(true);
064 }
065
066 @Override
067 protected PortletPreferences doDeleteData(
068 PortletDataContext portletDataContext, String portletId,
069 PortletPreferences portletPreferences)
070 throws Exception {
071
072 if (portletDataContext.addPrimaryKey(
073 BookmarksPortletDataHandler.class, "deleteData")) {
074
075 return portletPreferences;
076 }
077
078 BookmarksFolderLocalServiceUtil.deleteFolders(
079 portletDataContext.getScopeGroupId());
080
081 BookmarksEntryLocalServiceUtil.deleteEntries(
082 portletDataContext.getScopeGroupId(),
083 BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID);
084
085 return portletPreferences;
086 }
087
088 @Override
089 protected String doExportData(
090 final PortletDataContext portletDataContext, String portletId,
091 PortletPreferences portletPreferences)
092 throws Exception {
093
094 portletDataContext.addPermissions(
095 "com.liferay.portlet.bookmarks",
096 portletDataContext.getScopeGroupId());
097
098 Element rootElement = addExportRootElement();
099
100 rootElement.addAttribute(
101 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
102
103 final Element foldersElement = rootElement.addElement("folders");
104
105 ActionableDynamicQuery folderActionableDynamicQuery =
106 new BookmarksFolderActionableDynamicQuery() {
107
108 @Override
109 protected void addCriteria(DynamicQuery dynamicQuery) {
110 portletDataContext.addDateRangeCriteria(
111 dynamicQuery, "modifiedDate");
112 }
113
114 @Override
115 protected void performAction(Object object) throws PortalException {
116 BookmarksFolder folder = (BookmarksFolder)object;
117
118 StagedModelDataHandlerUtil.exportStagedModel(
119 portletDataContext, foldersElement, folder);
120 }
121
122 };
123
124 folderActionableDynamicQuery.setGroupId(
125 portletDataContext.getScopeGroupId());
126
127 folderActionableDynamicQuery.performActions();
128
129 final Element entriesElement = rootElement.addElement("entries");
130
131 ActionableDynamicQuery entryActionableDynamicQuery =
132 new BookmarksEntryActionableDynamicQuery() {
133
134 @Override
135 protected void addCriteria(DynamicQuery dynamicQuery) {
136 portletDataContext.addDateRangeCriteria(
137 dynamicQuery, "modifiedDate");
138 }
139
140 @Override
141 protected void performAction(Object object) throws PortalException {
142 BookmarksEntry entry = (BookmarksEntry)object;
143
144 StagedModelDataHandlerUtil.exportStagedModel(
145 portletDataContext,
146 new Element[] {foldersElement, entriesElement}, entry);
147 }
148
149 };
150
151 entryActionableDynamicQuery.setGroupId(
152 portletDataContext.getScopeGroupId());
153
154 entryActionableDynamicQuery.performActions();
155
156 return rootElement.formattedString();
157 }
158
159 @Override
160 protected PortletPreferences doImportData(
161 PortletDataContext portletDataContext, String portletId,
162 PortletPreferences portletPreferences, String data)
163 throws Exception {
164
165 portletDataContext.importPermissions(
166 "com.liferay.portlet.bookmarks",
167 portletDataContext.getSourceGroupId(),
168 portletDataContext.getScopeGroupId());
169
170 Document document = SAXReaderUtil.read(data);
171
172 Element rootElement = document.getRootElement();
173
174 Element foldersElement = rootElement.element("folders");
175
176 for (Element folderElement : foldersElement.elements("folder")) {
177 StagedModelDataHandlerUtil.importStagedModel(
178 portletDataContext, folderElement);
179 }
180
181 Element entriesElement = rootElement.element("entries");
182
183 for (Element entryElement : entriesElement.elements("entry")) {
184 StagedModelDataHandlerUtil.importStagedModel(
185 portletDataContext, entryElement);
186 }
187
188 return null;
189 }
190
191 }