package com.daifan.service;
import android.content.Context;
import android.util.Log;
import com.daifan.Singleton;
import com.daifan.dao.UserDao;
import com.daifan.domain.ApiInvokeResult;
import com.daifan.domain.LoginResult;
import com.daifan.domain.User;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
/**
* Created by ronghao on 13-7-5.
*/
public class UserService {
public static final String TAG = UserService.class.getSimpleName();
private UserDao userDao;
public UserService(Context context) {
userDao = new UserDao(context);
}
public User getCurrUser() {
if (isLoggedIn()) {
User u = userDao.getUser();
if (u.getId() != null && !u.getId().equals(""))
return u;
}
return null;
}
public User login(String email, String password) {
final String url = String.format(Singleton.REST_API + "/login?email=%s&password=%s&ver=1", email.trim(), password);
HttpHeaders requestHeaders = getHttpHeaders();
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter2());
ResponseEntity<LoginResult> responseEntity = null;
try {
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity,
LoginResult.class);
Log.d(Singleton.DAIFAN_TAG, "LoginResult:" + responseEntity.getBody());
User u = responseEntity.getBody().getUser();
if (responseEntity.getBody().getSuccess() == 1
&& u != null
&& email.trim().equals(u.getEmail())) {
userDao.addUser(u);
return u;
}
} catch (RestClientException e) {
Log.e(Singleton.DAIFAN_TAG, "failed to post login ", e);
}
return null;
}
public User register(String name, String email, String password) {
final String url = String.format(Singleton.REST_API + "/register?name=%s&email=%s&password=%s",
name.trim(), email.trim(), password);
HttpHeaders requestHeaders = getHttpHeaders();
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter2());
ResponseEntity<LoginResult> responseEntity = null;
try {
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity,
LoginResult.class);
Log.d(TAG, "RegisterResult:" + responseEntity.getBody());
User u = responseEntity.getBody().getUser();
if (responseEntity.getBody().getSuccess() == 1
&& u != null
&& email.trim().equals(u.getEmail())) {
userDao.addUser(u);
return u;
}
} catch (RestClientException e) {
Log.e(TAG, "failed to post register ", e);
}
return null;
}
public void pushRegister(String pushUserId, String pushChannelId) {
User user = userDao.getUser();
String userId = user.getId();
final String url = String.format(Singleton.REST_API + "/push_register?userId=%s&pushUserId=%s&pushChannelId=%s",
userId, pushUserId.trim(), pushChannelId.trim());
HttpHeaders requestHeaders = getHttpHeaders();
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter2());
ResponseEntity<ApiInvokeResult> responseEntity = null;
try {
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity,
ApiInvokeResult.class);
Log.d(TAG, "ApiInvokeResult:" + responseEntity.getBody());
} catch (RestClientException e) {
Log.e(TAG, "failed to post push register ", e);
}
}
private HttpHeaders getHttpHeaders() {
HttpHeaders requestHeaders = new HttpHeaders();
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON);
requestHeaders.setAccept(acceptableMediaTypes);
return requestHeaders;
}
public boolean isLoggedIn() {
int count = userDao.getRowCount();
return count > 0;
}
public boolean logout() {
userDao.resetTables();
return true;
}
}