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