Initial commit
[mustard2:mustard2.git] / src / org / mustard2 / android / Account.java
1 /**
2  * MUSTARD: Android's Client for StatusNet
3  * 
4  * Copyright (C) 2009-2010 macno.org, Michele Azzolari
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14  * for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  * 
20  */
21 package org.mustard2.android;
22
23 import java.io.Serializable;
24
25 import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
26
27 import org.mustard2.manager.OAuthManager;
28 import org.mustard2.manager.ProviderManager;
29 import org.mustard2.provider.MicroBlogProvider;
30 import org.mustard2.provider.Provider;
31
32 import android.content.Context;
33 import android.util.Log;
34
35 /**
36  * @author macno
37  *
38  */
39 public class Account implements Serializable {
40
41         private static final long serialVersionUID = 6972942780380644939L;
42         
43         private long mId;
44         private String mAccountId;
45         private String mNickname;
46         private String mPassword;
47         private String mOauthKey;
48         private String mOauthSecret;
49         private boolean mUseOauth;
50 //      private String mInstance;
51 //      private String mURL;
52 //      private URL mInstanceURL;
53         private boolean mDefault;
54         private boolean mToMerge;
55         // Default is disabled
56         private int mInterval = -1;
57         private long mLastCheck = -1;
58         private String mVersion;
59 //      private String mApiType;
60         private int mTextLimit;
61         private String mAvatarUrl;
62         private Provider mProvider;
63         
64         
65         /**
66          * @return the provider
67          */
68         public Provider getProvider() {
69                 return mProvider;
70         }
71
72         /**
73          * @param provider the provider to set
74          */
75         public void setProvider(Provider provider) {
76                 this.mProvider = provider;
77         }
78
79         /**
80          * @return the lastCheck
81          */
82         public long getLastCheck() {
83                 return mLastCheck;
84         }
85
86         /**
87          * @param lastCheck the lastCheck to set
88          */
89         public void setLastCheck(long lastCheck) {
90                 this.mLastCheck = lastCheck;
91         }
92
93         /**
94          * @return the avatarUrl
95          */
96         public String getAvatarUrl() {
97                 return mAvatarUrl;
98         }
99
100         /**
101          * @param avatarUrl the avatarUrl to set
102          */
103         public void setAvatarUrl(String avatarUrl) {
104                 this.mAvatarUrl = avatarUrl;
105         }
106
107         /**
108          * @return the apiType
109          */
110 //      public String getApiType() {
111 //              return mApiType;
112 //      }
113 //
114         /**
115          * @param apiType the apiType to set
116          */
117 //      public void setApiType(String apiType) {
118 //              this.mApiType = apiType;
119 //      }
120
121         public String getVersion() {
122                 return mVersion;
123         }
124         
125         public void setVersion(String version) {
126                 mVersion=version;
127         }
128         
129         public void setAutomaticCheckIntervalMinutes(int interval) {
130                 mInterval=interval;
131         }
132         
133         public int getAutomaticCheckIntervalMinutes() {
134                 return mInterval;
135         }
136         
137         public void setTextLimit(int textLimit) {
138                 mTextLimit=textLimit;
139         }
140         
141         public int getTextLimit() {
142                 return mTextLimit;
143         }
144         
145         public void setDefault(boolean dflt) {
146                 mDefault = dflt;
147         }
148         
149         public boolean isDefault() {
150                 return mDefault;
151         }
152
153         public void setToMerge(boolean merge) {
154                 mToMerge = merge;
155         }
156         
157         public boolean isToMerge() {
158                 return mToMerge;
159         }
160
161         /**
162          * @return the instance
163          */
164         public String getInstance() {
165                 return mProvider.url.getHost();
166         }
167         
168         public String getURL() {
169                 return mProvider.url.toExternalForm();
170         }
171
172 //      /**
173 //       * @param instance the instance to set
174 //       * @throws MalformedURLException 
175 //       */
176 //      public void setInstance(String instance) throws MalformedURLException {
177 //              this.mInstance = instance;
178 //              mInstanceURL = new URL(instance);
179 //      }
180
181         /**
182          * @return the useOauth
183          */
184         public boolean isUseOauth() {
185                 return mUseOauth;
186         }
187         /**
188          * @param useOauth the useOauth to set
189          */
190         public void setUseOauth(boolean useOauth) {
191                 this.mUseOauth = useOauth;
192         }
193         /**
194          * @return the nickname
195          */
196         public String getNickname() {
197                 return mNickname;
198         }
199         /**
200          * @param nickname the nickname to set
201          */
202         public void setNickname(String nickname) {
203                 this.mNickname = nickname;
204         }
205         public String getAccountId() {
206                 return mAccountId;
207         }
208         public void setAccountId(String accountId) {
209                 mAccountId=accountId;
210         }
211         /**
212          * Password in cryped, remember to decrypt it before using it!!!
213          * 
214          * @return the password
215          */
216         public String getPassword() {
217                 return mPassword;
218         }
219         /**
220          * @param password the password to set
221          */
222         public void setPassword(String password) {
223                 this.mPassword = password;
224         }
225         /**
226          * @return the uRL
227          */
228 //      public String getURL() {
229 //              return mURL;
230 //      }
231 //      /**
232 //       * @param uRL the uRL to set
233 //       */
234 //      public void setURL(String uRL) {
235 //              mURL = uRL;
236 //      }
237         /**
238          * @return the oauthKey
239          */
240         public String getOauthKey() {
241                 return mOauthKey;
242         }
243         /**
244          * @param oauthKey the oauthKey to set
245          */
246         public void setOauthKey(String oauthKey) {
247                 this.mOauthKey = oauthKey;
248         }
249         /**
250          * @return the oauthSecret
251          */
252         public String getOauthSecret() {
253                 return mOauthSecret;
254         }
255         /**
256          * @param oauthSecret the oauthSecret to set
257          */
258         public void setOauthSecret(String oauthSecret) {
259                 this.mOauthSecret = oauthSecret;
260         }
261
262         /**
263          * @return the id
264          */
265         public long getId() {
266                 return mId;
267         }
268         /**
269          * @param id the id to set
270          */
271         public void setId(long id) {
272                 this.mId = id;
273         }
274         
275         
276         public boolean isVibrate() {
277                 // TODO
278                 return false;
279         }
280         
281         public String getRingtone() {
282                 // TODO
283                 return null;
284         }
285         
286         public String getDescription() {
287                 return mNickname + "@" + mProvider.url.getHost();
288         }
289         
290         public MicroBlogProvider getProvider(Context ctx) throws MustardException {
291                 
292                 Object o = null;
293 //              String provider = Providers.getProviderByApi(mApiType);
294                 String provider = ProviderManager.getProviderByApi(mProvider.apiType);
295                 if (provider == null) {
296                         throw new MustardException("can not instantiate MicroBlogProvider object for " + mProvider.apiType);
297                 }
298         try {
299             Class<?> c = Class.forName(provider);
300             // and invoke "newInstance" class method and instantiate store object.
301             o = c.newInstance();
302             
303         } catch (Exception e) {
304                 e.printStackTrace();
305             Log.d("mustard/Account", String.format(
306                     "exception %s invoking %s.newInstance.()",
307                     e.toString(), provider));
308             throw new MustardException("can not instantiate MicroBlogProvider object for " + provider);
309         }
310         if (!(o instanceof MicroBlogProvider)) {
311             throw new MustardException(
312                     provider + " is not a compatible object");
313         }
314         
315         MicroBlogProvider mb = (MicroBlogProvider)o;
316         mb.setContext(ctx);
317         mb.setURL(mProvider.url);
318         
319         String instance = mProvider.url.toExternalForm();
320         
321         if(mOauthKey!=null && !"".equals(mOauthKey)) {
322                 String instanceNoPrefix = instance.startsWith("https") ? instance.substring(8) : instance.substring(7);
323                         OAuthManager om = new OAuthManager(ctx) ;
324                         OAuthManager.OAuthInstance oi =  om.get(instanceNoPrefix);
325                         om.close();
326                     CommonsHttpOAuthConsumer consumer =  new CommonsHttpOAuthConsumer (
327                                 oi.key,
328                             oi.secret);
329                         
330                         consumer.setTokenWithSecret( mOauthKey, mOauthSecret);
331                         
332                 mb.setCredentials(consumer, mNickname);
333         } else {
334                 mb.setCredentials(mNickname, mPassword);
335         }
336                 return mb;
337         }
338         
339 }