001
014
015 package com.liferay.portal.googleapps;
016
017 import com.liferay.portal.kernel.googleapps.GNickname;
018 import com.liferay.portal.kernel.googleapps.GNicknameManager;
019 import com.liferay.portal.kernel.googleapps.GUser;
020 import com.liferay.portal.kernel.googleapps.GUserManager;
021 import com.liferay.portal.kernel.googleapps.GoogleAppsException;
022 import com.liferay.portal.kernel.log.Log;
023 import com.liferay.portal.kernel.log.LogFactoryUtil;
024 import com.liferay.portal.kernel.util.CharPool;
025 import com.liferay.portal.kernel.util.GetterUtil;
026 import com.liferay.portal.kernel.util.StringBundler;
027 import com.liferay.portal.kernel.util.StringPool;
028 import com.liferay.portal.kernel.util.Validator;
029 import com.liferay.portal.kernel.xml.Document;
030 import com.liferay.portal.kernel.xml.Element;
031 import com.liferay.portal.kernel.xml.SAXReaderUtil;
032 import com.liferay.portal.model.User;
033 import com.liferay.portal.service.UserLocalServiceUtil;
034
035 import java.util.ArrayList;
036 import java.util.List;
037
038
041 public class GUserManagerImpl extends GBaseManagerImpl implements GUserManager {
042
043 public GUserManagerImpl(GoogleApps googleApps) {
044 super(googleApps);
045
046 GAuthenticator gAuthenticator = googleApps.getGAuthenticator();
047
048 StringBundler sb = new StringBundler(4);
049
050 sb.append(APPS_URL);
051 sb.append(StringPool.SLASH);
052 sb.append(gAuthenticator.getDomain());
053 sb.append("/user/2.0");
054
055 userURL = sb.toString();
056 }
057
058 @Override
059 public void addGUser(
060 long userId, String password, String firstName, String lastName)
061 throws GoogleAppsException {
062
063 Document document = SAXReaderUtil.createDocument();
064
065 Element atomEntryElement = addAtomEntry(document);
066
067 addAtomCategory(atomEntryElement, "user");
068
069 Element appsLoginElement = atomEntryElement.addElement("apps:login");
070
071 appsLoginElement.addAttribute("password", password);
072 appsLoginElement.addAttribute("userName", String.valueOf(userId));
073
074 Element appsNameElement = atomEntryElement.addElement("apps:name");
075
076 appsNameElement.addAttribute("familyName", lastName);
077 appsNameElement.addAttribute("givenName", firstName);
078
079 submitAdd(userURL, document);
080 }
081
082 @Override
083 public void deleteGUser(long userId) throws GoogleAppsException {
084 submitDelete(getUserURL(userId));
085 }
086
087 @Override
088 public GUser getGUser(long userId) throws GoogleAppsException {
089 Document document = getDocument(getUserURL(userId));
090
091 if (hasError(document)) {
092 if (_log.isInfoEnabled()) {
093 _log.info(getErrorMessage(document));
094 }
095
096 return null;
097 }
098
099 Element atomEntryElement = document.getRootElement();
100
101 return getGUser(atomEntryElement);
102 }
103
104 @Override
105 public GUser getGUser(String emailAddress) throws GoogleAppsException {
106 int pos = emailAddress.indexOf(CharPool.AT);
107
108 if (pos == -1) {
109 return null;
110 }
111
112 String nickname = emailAddress.substring(0, pos);
113
114 if (Validator.isNumber(nickname)) {
115 long userId = GetterUtil.getLong(nickname);
116
117 return getGUser(userId);
118 }
119 else {
120 try {
121 User user = UserLocalServiceUtil.getUserByEmailAddress(
122 getCompanyId(), emailAddress);
123
124 return getGUser(user.getUserId());
125 }
126 catch (Exception e) {
127 }
128
129 GNicknameManager gNicknameManager =
130 googleApps.getGNicknameManager();
131
132 GNickname gNickname = gNicknameManager.getGNickname(nickname);
133
134 if (gNickname != null) {
135 return getGUser(gNickname.getUserId());
136 }
137
138 return null;
139 }
140 }
141
142 @Override
143 public List<GUser> getGUsers() throws GoogleAppsException {
144 List<GUser> gUsers = new ArrayList<GUser>();
145
146 getGUsers(gUsers, userURL);
147
148 return gUsers;
149 }
150
151 @Override
152 public void updateActive(long userId, boolean active)
153 throws GoogleAppsException {
154
155 Document document = getDocument(getUserURL(userId));
156
157 if (hasError(document)) {
158 if (_log.isInfoEnabled()) {
159 _log.info(getErrorMessage(document));
160 }
161
162 return;
163 }
164
165 Element atomEntryElement = document.getRootElement();
166
167 Element appsLoginElement = atomEntryElement.element(
168 getAppsQName("login"));
169
170 appsLoginElement.addAttribute("suspended", String.valueOf(!active));
171
172 submitUpdate(getUserURL(userId), document);
173 }
174
175 @Override
176 public void updatePassword(long userId, String password)
177 throws GoogleAppsException {
178
179 Document document = getDocument(getUserURL(userId));
180
181 if (hasError(document)) {
182 if (_log.isInfoEnabled()) {
183 _log.info(getErrorMessage(document));
184 }
185
186 return;
187 }
188
189 Element atomEntryElement = document.getRootElement();
190
191 Element appsLoginElement = atomEntryElement.element(
192 getAppsQName("login"));
193
194 appsLoginElement.addAttribute("password", password);
195
196 submitUpdate(getUserURL(userId), document);
197 }
198
199 protected GUser getGUser(Element atomEntryElement) {
200 GUser gUser = new GUser();
201
202 Element appsLoginElement = atomEntryElement.element(
203 getAppsQName("login"));
204 Element appsNameElement = atomEntryElement.element(
205 getAppsQName("name"));
206
207 boolean active = !GetterUtil.getBoolean(
208 appsLoginElement.attributeValue("suspended"));
209
210 gUser.setActive(active);
211
212 boolean administrator = GetterUtil.getBoolean(
213 appsLoginElement.attributeValue("admin"));
214
215 gUser.setAdministrator(administrator);
216
217 boolean agreedToTermsOfUse = GetterUtil.getBoolean(
218 appsLoginElement.attributeValue("agreedToTerms"));
219
220 gUser.setAgreedToTermsOfUse(agreedToTermsOfUse);
221
222 String firstName = appsNameElement.attributeValue("givenName");
223
224 gUser.setFirstName(firstName);
225
226 String lastName = appsNameElement.attributeValue("familyName");
227
228 gUser.setLastName(lastName);
229
230 long userId = GetterUtil.getLong(
231 appsLoginElement.attributeValue("userName"));
232
233 gUser.setUserId(userId);
234
235 return gUser;
236 }
237
238 protected void getGUsers(final List<GUser> gUsers, String url)
239 throws GoogleAppsException {
240
241 Document document = getDocument(url);
242
243 Element atomFeedElement = document.getRootElement();
244
245 List<Element> atomEntryElements = atomFeedElement.elements(
246 getAtomQName("entry"));
247
248 for (Element atomEntryElement : atomEntryElements) {
249 GUser gUser = getGUser(atomEntryElement);
250
251 gUsers.add(gUser);
252 }
253
254 new GetNextItems(url, atomFeedElement) {
255
256 @Override
257 public void getNextItems(String nextURL)
258 throws GoogleAppsException {
259
260 getGUsers(gUsers, nextURL);
261 }
262
263 };
264 }
265
266 protected String getUserURL(long userId) {
267 return userURL.concat(StringPool.SLASH).concat(String.valueOf(userId));
268 }
269
270 protected String userURL;
271
272 private static Log _log = LogFactoryUtil.getLog(GUserManagerImpl.class);
273
274 }