1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.googleapps;
16  
17  import com.liferay.portal.kernel.googleapps.GNickname;
18  import com.liferay.portal.kernel.googleapps.GNicknameManager;
19  import com.liferay.portal.kernel.googleapps.GoogleAppsException;
20  import com.liferay.portal.kernel.log.Log;
21  import com.liferay.portal.kernel.log.LogFactoryUtil;
22  import com.liferay.portal.kernel.util.GetterUtil;
23  import com.liferay.portal.kernel.util.StringBundler;
24  import com.liferay.portal.kernel.util.StringPool;
25  import com.liferay.portal.kernel.xml.Document;
26  import com.liferay.portal.kernel.xml.Element;
27  import com.liferay.portal.kernel.xml.SAXReaderUtil;
28  
29  import java.util.ArrayList;
30  import java.util.List;
31  
32  /**
33   * <a href="GNicknameManagerImpl.java.html"><b><i>View Source</i></b></a>
34   *
35   * @author Brian Wing Shun Chan
36   */
37  public class GNicknameManagerImpl
38      extends GBaseManagerImpl implements GNicknameManager {
39  
40      public GNicknameManagerImpl(GoogleApps googleApps) {
41          super(googleApps);
42  
43          GAuthenticator gAuthenticator = googleApps.getGAuthenticator();
44  
45          StringBundler sb = new StringBundler(4);
46  
47          sb.append(APPS_URL);
48          sb.append(StringPool.SLASH);
49          sb.append(gAuthenticator.getDomain());
50          sb.append("/nickname/2.0");
51  
52          nicknameURL = sb.toString();
53      }
54  
55      public void addGNickname(long userId, String nickname)
56          throws GoogleAppsException {
57  
58          Document document = SAXReaderUtil.createDocument();
59  
60          Element atomEntryElement = addAtomEntry(document);
61  
62          addAtomCategory(atomEntryElement, "nickname");
63  
64          Element appsLoginElement = atomEntryElement.addElement("apps:login");
65  
66          appsLoginElement.addAttribute("userName", String.valueOf(userId));
67  
68          Element appsNicknameElement = atomEntryElement.addElement(
69              "apps:nickname");
70  
71          appsNicknameElement.addAttribute("name", nickname);
72  
73          submitAdd(nicknameURL, document);
74      }
75  
76      public void deleteGNickname(String nickname) throws GoogleAppsException {
77          submitDelete(getNicknameURL(nickname));
78      }
79  
80      public GNickname getGNickname(String nickname) throws GoogleAppsException {
81          Document document = getDocument(getNicknameURL(nickname));
82  
83          if (hasError(document)) {
84              if (_log.isInfoEnabled()) {
85                  _log.info(getErrorMessage(document));
86              }
87  
88              return null;
89          }
90  
91          Element atomEntryElement = document.getRootElement();
92  
93          return getGNickname(atomEntryElement);
94      }
95  
96      public List<GNickname> getGNicknames() throws GoogleAppsException {
97          List<GNickname> gNicknames = new ArrayList<GNickname>();
98  
99          getGNicknames(gNicknames, nicknameURL);
100 
101         return gNicknames;
102     }
103 
104     protected GNickname getGNickname(Element atomEntryElement) {
105         GNickname gNickname = new GNickname();
106 
107         Element appsLoginElement = atomEntryElement.element(
108             getAppsQName("login"));
109         Element appsNicknameElement = atomEntryElement.element(
110             getAppsQName("nickname"));
111 
112         String nickname = appsNicknameElement.attributeValue("name");
113 
114         gNickname.setNickname(nickname);
115 
116         long userId = GetterUtil.getLong(
117             appsLoginElement.attributeValue("userName"));
118 
119         gNickname.setUserId(userId);
120 
121         return gNickname;
122     }
123 
124     protected void getGNicknames(final List<GNickname> gNicknames, String url)
125         throws GoogleAppsException {
126 
127         Document document = getDocument(url);
128 
129         Element atomFeedElement = document.getRootElement();
130 
131         List<Element> atomEntryElements = atomFeedElement.elements(
132             getAtomQName("entry"));
133 
134         for (Element atomEntryElement : atomEntryElements) {
135             GNickname gNickname = getGNickname(atomEntryElement);
136 
137             gNicknames.add(gNickname);
138         }
139 
140         new GetNextItems(url, atomFeedElement) {
141 
142             public void getNextItems(String nextURL)
143                 throws GoogleAppsException {
144 
145                 getGNicknames(gNicknames, nextURL);
146             }
147 
148         };
149     }
150 
151     protected String getNicknameURL(String nickname) {
152         return nicknameURL.concat(StringPool.SLASH).concat(nickname);
153     }
154 
155     protected String nicknameURL;
156 
157     private static Log _log = LogFactoryUtil.getLog(GNicknameManagerImpl.class);
158 
159 }