package com.ourlinc.helloworld.service.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import com.ourlinc.helloworld.DataSource;
import com.ourlinc.helloworld.model.Activity;
import com.ourlinc.helloworld.model.User;
import com.ourlinc.helloworld.service.ActivityService;
import com.ourlinc.helloworld.service.UserService;
import com.ourlinc.omni.persistence.Persistence;
import com.ourlinc.omni.persistence.Persister;
import com.ourlinc.omni.persistence.PersisterStorage;
import com.ourlinc.omni.search.Searcher;
import com.ourlinc.swift.util.ResultPage;
/**
* 用户模块接口实现
*
* @author lipeiying
*
*/
public class UserServiceImpl implements UserService {
final DataSource m_DataSource;
final UserPodiImpl m_Podi;
ActivityService m_ActivityService;
public void setActivityService(ActivityService activityService) {
m_ActivityService = activityService;
}
public UserServiceImpl(DataSource ds) {
m_DataSource = ds;
m_Podi = new UserPodiImpl();
}
class UserPodiImpl implements UserPodi {
final PersisterStorage<User> psUser;
UserPodiImpl() {
psUser = m_DataSource.newPersister(User.class, this);
}
@SuppressWarnings("unchecked")
public <E extends Persistence> Persister<E> getPersister(
Class<E> classOf) {
if (User.class == classOf) {
return (Persister<E>) psUser;
}
return m_DataSource.getPersister(classOf);
}
public Searcher getSearcher() {
return null;
}
public Activity getActivity(String actId) {
return m_ActivityService.getActivity(actId);
}
public User getUserById(String id) {
return m_Podi.psUser.get(id);
}
}// 内部类结束
public User userToAdmin(User user) {
return user.userToAdmin();
}
public User AdminToUser(User admin) {
return admin.adminToUser();
}
public ResultPage<User> listUser() {
List<User> result = new ArrayList<User>();
ResultPage<User> rp = m_Podi.psUser.startsWith(null);
rp.setPageSize(128);
while (rp.gotoPage(rp.getPage() + 1)) {
while (rp.hasNext()) {
User user = rp.next();
result.add(user);
}
}
Collections.sort(result);
return ResultPage.OnList.wrap(result);
}
public User login(String email, String password) {
if (null == email || null == password) {
throw new NullPointerException("用户名密码不能为空!");
}
ResultPage<User> rp = m_Podi.psUser.startsWith(null);
rp.setPageSize(128);
while (rp.gotoPage(rp.getPage() + 1)) {
while (rp.hasNext()) {
User user = rp.next();
if (email.equals(user.getEmail())
&& password.equals(user.getPassword())) {
return user;
}
}
}
return null;
}
public User registerUser(String username, String password,
String department, String email, Date birthday, Date entryDate) {
return new User(m_Podi, username, password, department, email,
birthday, entryDate);
}
public User getUser(String userId) {
return m_Podi.psUser.get(userId);
}
public User adminLogin(String email, String password) {
if (null == email || null == password) {
throw new NullPointerException("用户名密码不能为空!");
}
ResultPage<User> rp = m_Podi.psUser.startsWith(null);
rp.setPageSize(128);
while (rp.gotoPage(rp.getPage() + 1)) {
while (rp.hasNext()) {
User admin = rp.next();
if (email.equals(admin.getEmail())
&& password.equals(admin.getPassword())) {
if (admin.getAuthority() == User.ADMIN)
return admin;
}
}
}
return null;
}
public User getUserByEmail(String email) {
if (null == email) {
return null;
}
ResultPage<User> rp = m_Podi.psUser.startsWith(null);
rp.setPageSize(128);
while (rp.gotoPage(rp.getPage() + 1)) {
while (rp.hasNext()) {
User user = rp.next();
if (email.equals(user.getEmail())) {
return user;
}
}
}
return null;
}
public List<User> getUserByUsername(String username) {
List<User> result = new ArrayList<User>();
if (null == username) {
return result;
}
ResultPage<User> rp = m_Podi.psUser.startsWith(null);
rp.setPageSize(128);
while (rp.gotoPage(rp.getPage() + 1)) {
while (rp.hasNext()) {
User user = rp.next();
if (username.equals(user.getUsername())) {
result.add(user);
}
}
}
return result;
}
public List<String> listUserEmail() {
ResultPage<User> rp = listUser();
rp.setPageSize(2000);
rp.gotoPage(1);
List<String> result = new ArrayList<String>();
for (User user : rp) {
if (User.ON_JOB == user.isOnJob()) {
result.add(user.getEmail());
}
}
return result;
}
}