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
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 = googleApps.getGNicknameManager();
130
131 GNickname gNickname = gNicknameManager.getGNickname(nickname);
132
133 if (gNickname != null) {
134 return getGUser(gNickname.getUserId());
135 }
136
137 return null;
138 }
139
140 @Override
141 public List<GUser> getGUsers() throws GoogleAppsException {
142 List<GUser> gUsers = new ArrayList<GUser>();
143
144 getGUsers(gUsers, userURL);
145
146 return gUsers;
147 }
148
149 @Override
150 public void updateActive(long userId, boolean active)
151 throws GoogleAppsException {
152
153 Document document = getDocument(getUserURL(userId));
154
155 if (hasError(document)) {
156 if (_log.isInfoEnabled()) {
157 _log.info(getErrorMessage(document));
158 }
159
160 return;
161 }
162
163 Element atomEntryElement = document.getRootElement();
164
165 Element appsLoginElement = atomEntryElement.element(
166 getAppsQName("login"));
167
168 appsLoginElement.addAttribute("suspended", String.valueOf(!active));
169
170 submitUpdate(getUserURL(userId), document);
171 }
172
173 @Override
174 public void updatePassword(long userId, String password)
175 throws GoogleAppsException {
176
177 Document document = getDocument(getUserURL(userId));
178
179 if (hasError(document)) {
180 if (_log.isInfoEnabled()) {
181 _log.info(getErrorMessage(document));
182 }
183
184 return;
185 }
186
187 Element atomEntryElement = document.getRootElement();
188
189 Element appsLoginElement = atomEntryElement.element(
190 getAppsQName("login"));
191
192 appsLoginElement.addAttribute("password", password);
193
194 submitUpdate(getUserURL(userId), document);
195 }
196
197 protected GUser getGUser(Element atomEntryElement) {
198 GUser gUser = new GUser();
199
200 Element appsLoginElement = atomEntryElement.element(
201 getAppsQName("login"));
202 Element appsNameElement = atomEntryElement.element(
203 getAppsQName("name"));
204
205 boolean active = !GetterUtil.getBoolean(
206 appsLoginElement.attributeValue("suspended"));
207
208 gUser.setActive(active);
209
210 boolean administrator = GetterUtil.getBoolean(
211 appsLoginElement.attributeValue("admin"));
212
213 gUser.setAdministrator(administrator);
214
215 boolean agreedToTermsOfUse = GetterUtil.getBoolean(
216 appsLoginElement.attributeValue("agreedToTerms"));
217
218 gUser.setAgreedToTermsOfUse(agreedToTermsOfUse);
219
220 String firstName = appsNameElement.attributeValue("givenName");
221
222 gUser.setFirstName(firstName);
223
224 String lastName = appsNameElement.attributeValue("familyName");
225
226 gUser.setLastName(lastName);
227
228 long userId = GetterUtil.getLong(
229 appsLoginElement.attributeValue("userName"));
230
231 gUser.setUserId(userId);
232
233 return gUser;
234 }
235
236 protected void getGUsers(final List<GUser> gUsers, String url)
237 throws GoogleAppsException {
238
239 Document document = getDocument(url);
240
241 Element atomFeedElement = document.getRootElement();
242
243 List<Element> atomEntryElements = atomFeedElement.elements(
244 getAtomQName("entry"));
245
246 for (Element atomEntryElement : atomEntryElements) {
247 GUser gUser = getGUser(atomEntryElement);
248
249 gUsers.add(gUser);
250 }
251
252 new GetNextItems(url, atomFeedElement) {
253
254 @Override
255 public void getNextItems(String nextURL)
256 throws GoogleAppsException {
257
258 getGUsers(gUsers, nextURL);
259 }
260
261 };
262 }
263
264 protected String getUserURL(long userId) {
265 return userURL.concat(StringPool.SLASH).concat(String.valueOf(userId));
266 }
267
268 protected String userURL;
269
270 private static Log _log = LogFactoryUtil.getLog(GUserManagerImpl.class);
271
272 }