001
014
015 package com.liferay.portlet.rolesadmin.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.dao.orm.Property;
020 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
024 import com.liferay.portal.kernel.lar.DataLevel;
025 import com.liferay.portal.kernel.lar.PortletDataContext;
026 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
027 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
028 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
029 import com.liferay.portal.kernel.lar.StagedModelType;
030 import com.liferay.portal.kernel.xml.Element;
031 import com.liferay.portal.model.Role;
032 import com.liferay.portal.model.Team;
033 import com.liferay.portal.service.RoleLocalServiceUtil;
034 import com.liferay.portal.service.UserLocalServiceUtil;
035 import com.liferay.portal.service.persistence.RoleExportActionableDynamicQuery;
036 import com.liferay.portal.util.PortalUtil;
037
038 import java.util.List;
039
040 import javax.portlet.PortletPreferences;
041
042
046 public class RolesAdminPortletDataHandler extends BasePortletDataHandler {
047
048 public static final String NAMESPACE = "roles_admin";
049
050 public RolesAdminPortletDataHandler() {
051 setDataLevel(DataLevel.PORTAL);
052 setDeletionSystemEventStagedModelTypes(new StagedModelType(Role.class));
053 setExportControls(
054 new PortletDataHandlerBoolean(
055 NAMESPACE, "roles", true, true,
056 new PortletDataHandlerControl[] {
057 new PortletDataHandlerBoolean(
058 NAMESPACE, "system-roles", true, false)
059 },
060 Role.class.getName()
061 ));
062 setSupportsDataStrategyCopyAsNew(false);
063 }
064
065 @Override
066 protected PortletPreferences doDeleteData(
067 PortletDataContext portletDataContext, String portletId,
068 PortletPreferences portletPreferences)
069 throws Exception {
070
071 if (portletDataContext.addPrimaryKey(
072 RolesAdminPortletDataHandler.class, "deleteData")) {
073
074 return portletPreferences;
075 }
076
077 List<Role> roles = RoleLocalServiceUtil.getRoles(
078 portletDataContext.getCompanyId());
079
080 for (Role role : roles) {
081 if (!PortalUtil.isSystemRole(role.getName()) && !role.isTeam()) {
082 RoleLocalServiceUtil.deleteRole(role);
083 }
084 }
085
086 return portletPreferences;
087 }
088
089 @Override
090 protected String doExportData(
091 final PortletDataContext portletDataContext, String portletId,
092 PortletPreferences portletPreferences)
093 throws Exception {
094
095 portletDataContext.addPortalPermissions();
096
097 Element rootElement = addExportDataRootElement(portletDataContext);
098
099 rootElement.addAttribute(
100 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
101
102 ActionableDynamicQuery actionableDynamicQuery =
103 getRoleActionableDynamicQuery(portletDataContext, true);
104
105 actionableDynamicQuery.performActions();
106
107 return getExportDataRootElementString(rootElement);
108 }
109
110 @Override
111 protected PortletPreferences doImportData(
112 PortletDataContext portletDataContext, String portletId,
113 PortletPreferences portletPreferences, String data)
114 throws Exception {
115
116 portletDataContext.importPortalPermissions();
117
118 Element rolesElement = portletDataContext.getImportDataGroupElement(
119 Role.class);
120
121 List<Element> roleElements = rolesElement.elements();
122
123 for (Element roleElement : roleElements) {
124 StagedModelDataHandlerUtil.importStagedModel(
125 portletDataContext, roleElement);
126 }
127
128 return null;
129 }
130
131 @Override
132 protected void doPrepareManifestSummary(
133 PortletDataContext portletDataContext,
134 PortletPreferences portletPreferences)
135 throws Exception {
136
137 ActionableDynamicQuery actionableDynamicQuery =
138 getRoleActionableDynamicQuery(portletDataContext, false);
139
140 actionableDynamicQuery.performCount();
141 }
142
143 protected ActionableDynamicQuery getRoleActionableDynamicQuery(
144 final PortletDataContext portletDataContext, final boolean export)
145 throws SystemException {
146
147 return new RoleExportActionableDynamicQuery(portletDataContext) {
148
149 @Override
150 protected void addCriteria(DynamicQuery dynamicQuery) {
151 portletDataContext.addDateRangeCriteria(
152 dynamicQuery, "modifiedDate");
153
154 long classNameId = PortalUtil.getClassNameId(Team.class);
155
156 Property classNameIdProperty = PropertyFactoryUtil.forName(
157 "classNameId");
158
159 dynamicQuery.add(classNameIdProperty.ne(classNameId));
160 }
161
162 @Override
163 protected void performAction(Object object)
164 throws PortalException, SystemException {
165
166 if (!export) {
167 return;
168 }
169
170 Role role = (Role)object;
171
172 long defaultUserId = UserLocalServiceUtil.getDefaultUserId(
173 portletDataContext.getCompanyId());
174
175 if (!portletDataContext.getBooleanParameter(
176 NAMESPACE, "system-roles") &&
177 (role.getUserId() == defaultUserId)) {
178
179 return;
180 }
181
182 super.performAction(object);
183 }
184 };
185 }
186
187 }