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