/* 
 | 
 * Copyright (C) 2018 Baidu, Inc. All Rights Reserved. 
 | 
 */ 
 | 
package com.example.datalibrary.api; 
 | 
  
 | 
import android.content.Context; 
 | 
import android.text.TextUtils; 
 | 
import android.util.Log; 
 | 
  
 | 
import com.example.datalibrary.db.DBManager; 
 | 
import com.example.datalibrary.listener.DBLoadListener; 
 | 
import com.example.datalibrary.model.Group; 
 | 
import com.example.datalibrary.model.User; 
 | 
  
 | 
import org.json.JSONArray; 
 | 
import org.json.JSONObject; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.UUID; 
 | 
import java.util.regex.Matcher; 
 | 
import java.util.regex.Pattern; 
 | 
  
 | 
public class FaceApi { 
 | 
    private static FaceApi instance; 
 | 
  
 | 
    public boolean isDelete; 
 | 
  
 | 
    private List<User> users = new ArrayList<>(); 
 | 
  
 | 
  
 | 
    private FaceApi() { 
 | 
  
 | 
    } 
 | 
  
 | 
    public static synchronized FaceApi getInstance() { 
 | 
        if (instance == null) { 
 | 
            instance = new FaceApi(); 
 | 
        } 
 | 
        return instance; 
 | 
    } 
 | 
  
 | 
    public void  init(DBLoadListener dbLoadListener , Context context){ 
 | 
  
 | 
        users = new ArrayList<>(); 
 | 
        DBManager.getInstance().init(context); 
 | 
        DBManager.getInstance().queryAllUsers(dbLoadListener); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加用户组 
 | 
     */ 
 | 
    public boolean groupAdd(Group group) { 
 | 
        if (group == null || TextUtils.isEmpty(group.getGroupId())) { 
 | 
            return false; 
 | 
        } 
 | 
        Pattern pattern = Pattern.compile("^[0-9a-zA-Z_-]{1,}$"); 
 | 
        Matcher matcher = pattern.matcher(group.getGroupId()); 
 | 
        if (!matcher.matches()) { 
 | 
            return false; 
 | 
        } 
 | 
        boolean ret = DBManager.getInstance().addGroup(group); 
 | 
  
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询用户组(默认最多取1000个组) 
 | 
     */ 
 | 
    public List<Group> getGroupList(int start, int length) { 
 | 
        if (start < 0 || length < 0) { 
 | 
            return null; 
 | 
        } 
 | 
        if (length > 1000) { 
 | 
            length = 1000; 
 | 
        } 
 | 
        List<Group> groupList = DBManager.getInstance().queryGroups(start, length); 
 | 
        return groupList; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据groupId查询用户组 
 | 
     */ 
 | 
    public List<Group> getGroupListByGroupId(String groupId) { 
 | 
        if (TextUtils.isEmpty(groupId)) { 
 | 
            return null; 
 | 
        } 
 | 
        return DBManager.getInstance().queryGroupsByGroupId(groupId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据groupId删除用户组 
 | 
     */ 
 | 
    public boolean groupDelete(String groupId) { 
 | 
        if (TextUtils.isEmpty(groupId)) { 
 | 
            return false; 
 | 
        } 
 | 
        boolean ret = DBManager.getInstance().deleteGroup(groupId); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加用户 
 | 
     */ 
 | 
    public boolean userAdd(User user) { 
 | 
        if (user == null || TextUtils.isEmpty(user.getGroupId())) { 
 | 
            return false; 
 | 
        } 
 | 
        Pattern pattern = Pattern.compile("^[0-9a-zA-Z_-]{1,}$"); 
 | 
        Matcher matcher = pattern.matcher(user.getUserId()); 
 | 
        if (!matcher.matches()) { 
 | 
            return false; 
 | 
        } 
 | 
        boolean ret = DBManager.getInstance().addUser(user); 
 | 
        User newUser = DBManager.getInstance().queryUserByUserNameItem(user.getUserName()); 
 | 
        users.add(0 , newUser); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查找所有用户 
 | 
     */ 
 | 
    public synchronized List<User> getAllUserList() { 
 | 
            if (users == null && users.size() == 0){ 
 | 
                users = DBManager.getInstance().queryAllUsers(); 
 | 
            } 
 | 
            return users; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据userName查找用户(精确查找) 
 | 
     */ 
 | 
    public List<User> getUserListByUserName(String userName) { 
 | 
        if (TextUtils.isEmpty(userName)) { 
 | 
            return null; 
 | 
        } 
 | 
        return DBManager.getInstance().queryUserByUserNameAccu(userName); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据userName查找用户(模糊查找) 
 | 
     */ 
 | 
    public List<User> getUserListByUserNameVag(String userName) { 
 | 
        if (TextUtils.isEmpty(userName)) { 
 | 
            return null; 
 | 
        } 
 | 
        if (users != null && users.size() > 0){ 
 | 
            List list = new ArrayList(); 
 | 
            for (int i = 0 , k = users.size(); i < k; i++){ 
 | 
                User user = users.get(i); 
 | 
                if (user.getUserName().indexOf(userName) != -1){ 
 | 
                    user.setUserIndex(i); 
 | 
                    list.add(user); 
 | 
                } 
 | 
            } 
 | 
            return list; 
 | 
        }else { 
 | 
            return DBManager.getInstance().queryUserByUserNameVag(userName); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据_id查找用户 
 | 
     */ 
 | 
    public User getUserListById(int _id) { 
 | 
        if (_id < 0) { 
 | 
            return null; 
 | 
        } 
 | 
        List<User> userList = DBManager.getInstance().queryUserById(_id); 
 | 
        if (userList != null && userList.size() > 0) { 
 | 
            return userList.get(0); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据_id查找用户 
 | 
     */ 
 | 
    public User getByUserId(String group,String userId) { 
 | 
        if (TextUtils.isEmpty(userId)) { 
 | 
            return null; 
 | 
        } 
 | 
        return DBManager.getInstance().queryByUserId(group,userId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 更新用户 
 | 
     */ 
 | 
    public boolean userUpdate(User user) { 
 | 
        if (user == null) { 
 | 
            return false; 
 | 
        } 
 | 
        boolean ret = DBManager.getInstance().updateUser(user); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    public boolean userUpdateOnly(User user) { 
 | 
        if (user == null) { 
 | 
            return false; 
 | 
        } 
 | 
  
 | 
        boolean ret = DBManager.getInstance().onlyUpdateUser(user); 
 | 
        if(users!=null&&users.size()>0){ 
 | 
            for(User u:users){ 
 | 
                if(u.getId()==user.getId()){ 
 | 
                    boolean isUp = false; 
 | 
                    if(!TextUtils.isEmpty(user.getUserName())){ 
 | 
                        u.setUserName(user.getUserName()); 
 | 
                        isUp = true; 
 | 
                    } 
 | 
                    if(!TextUtils.isEmpty(user.getImageName())){ 
 | 
                        u.setImageName(user.getImageName()); 
 | 
                        isUp = true; 
 | 
                    } 
 | 
                    if(user.getFeature()!=null){ 
 | 
                        u.setFeature(user.getFeature()); 
 | 
                        u.setFaceToken(user.getFaceToken()); 
 | 
                        isUp = true; 
 | 
                    } 
 | 
                    if(isUp){ 
 | 
                        break; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 更新用户 
 | 
     */ 
 | 
    public boolean userUpdate(String userName, String imageName, byte[] feature) { 
 | 
        if (userName == null || imageName == null || feature == null) { 
 | 
            return false; 
 | 
        } 
 | 
  
 | 
        boolean ret = DBManager.getInstance().updateUser(userName, imageName, feature); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除用户 
 | 
     */ 
 | 
    public boolean userDelete(String userId) { 
 | 
        if (TextUtils.isEmpty(userId)) { 
 | 
            return false; 
 | 
        } 
 | 
        boolean ret = DBManager.getInstance().deleteUser(userId); 
 | 
        if (ret){ 
 | 
            for (int i = 0 , k = users.size(); i < k; i++){ 
 | 
                if (users.get(i).getUserId().equals(userId)){ 
 | 
                    users.remove(i); 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return ret; 
 | 
    } 
 | 
    /** 
 | 
     * 删除用户 
 | 
     */ 
 | 
    public boolean userDeletes(List<User> list , boolean isHave , DBLoadListener dbLoadListener) { 
 | 
//        boolean isUsers = list.equals(users) && ; 
 | 
        int count = list.size(); 
 | 
        boolean isAllCover = true; 
 | 
        if (list.size() == users.size()){ 
 | 
            for (int i = 0 , k = count; i < k; i++){ 
 | 
                if (!list.get(i).isChecked()){ 
 | 
                    isAllCover = false; 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } else { 
 | 
            isAllCover = false; 
 | 
        } 
 | 
        if (isAllCover){ 
 | 
            dbLoadListener.onLoad(count / 2 , 
 | 
                    count , 0.5f); 
 | 
            users = new ArrayList<>(); 
 | 
            DBManager.getInstance().clearTable(); 
 | 
            dbLoadListener.onComplete(null , count); 
 | 
            return true; 
 | 
        } 
 | 
        boolean rets = true; 
 | 
        int k = list.size(); 
 | 
        int i = 0; 
 | 
        dbLoadListener.onStart(count); 
 | 
            while (i < k && !Thread.currentThread().isInterrupted() && isDelete){ 
 | 
                User user = list.get(i); 
 | 
                int userId = user.getId(); 
 | 
                if (list.get(i).isChecked()) { 
 | 
                    long time = System.currentTimeMillis(); 
 | 
                    boolean ret = DBManager.getInstance().deleteUser(userId); 
 | 
                    if (ret){ 
 | 
                        /*User user1 = */list.remove(user); 
 | 
                        if (isHave){ 
 | 
                            users.remove(user); 
 | 
                        } 
 | 
                        k = list.size(); 
 | 
                        if (dbLoadListener != null){ 
 | 
                            dbLoadListener.onLoad(i + count - k , 
 | 
                                    count , ((float) (i + count - k) / (float) count)); 
 | 
                        } 
 | 
                    }else { 
 | 
                        rets = false; 
 | 
                        i++; 
 | 
                    } 
 | 
                } else { 
 | 
                    i++; 
 | 
                } 
 | 
            } 
 | 
        dbLoadListener.onComplete(null , count); 
 | 
            return rets; 
 | 
    } 
 | 
  
 | 
    public void userClean(){ 
 | 
  
 | 
        users = new ArrayList<>(); 
 | 
        DBManager.getInstance().clearTable(); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 远程删除用户 
 | 
     */ 
 | 
    public boolean userDeleteByName(String userName) { 
 | 
        if (TextUtils.isEmpty(userName)) { 
 | 
            return false; 
 | 
        } 
 | 
        boolean ret = DBManager.getInstance().userDeleteByName(userName); 
 | 
        if (ret){ 
 | 
            for (int i = 0 , k = users.size(); i < k; i++){ 
 | 
                if (users.get(i).getUserName().equals(userName)){ 
 | 
                    users.remove(i); 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 是否是有效姓名 
 | 
     * 
 | 
     * @param username 用户名 
 | 
     * @return 有效或无效信息 
 | 
     */ 
 | 
    public String isValidName(String username) { 
 | 
        if (username == null || "".equals(username.trim())) { 
 | 
            return "姓名为空"; 
 | 
        } 
 | 
  
 | 
        // 姓名过长 
 | 
        if (!isSpotString(username)) { 
 | 
            return "姓名过长"; 
 | 
        } 
 | 
  
 | 
       /* String regex0 = "[ `~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()—" 
 | 
                + "—+|{}【】‘;:”“’。,、?]|\n|\r|\t"; 
 | 
        Pattern p0 = Pattern.compile(regex0); 
 | 
        Matcher m0 = p0.matcher(username); 
 | 
        if (m0.find()) { 
 | 
            return "姓名中含有特殊符号"; 
 | 
        } 
 | 
*/ 
 | 
        // 含有特殊符号 
 | 
        String regex = "^[0-9a-zA-Z_\\u3E00-\\u9FA5]+$"; 
 | 
        Pattern p = Pattern.compile(regex); 
 | 
        Matcher m = p.matcher(username); 
 | 
        if (!m.find()) { 
 | 
            return "姓名中含有特殊符号"; 
 | 
        } 
 | 
        return "0"; 
 | 
    } 
 | 
    public static boolean isSpotString(String str){ 
 | 
        int n = 0; 
 | 
        String newStr = ""; 
 | 
        for (int i = 0 , k = str.length(); i < k ; i++){ 
 | 
            char item = str.charAt(i); 
 | 
            if (isChinese(item)){ 
 | 
                n += 2; 
 | 
            }else { 
 | 
                n += 1; 
 | 
            } 
 | 
            if (n > 10){ 
 | 
                return false; 
 | 
            } 
 | 
            newStr += item; 
 | 
        } 
 | 
        return true; 
 | 
    } 
 | 
    public static boolean isChinese(char c) { 
 | 
  
 | 
        return c >= 0x4E00 && c <= 0x9FA5; // 根据字节码判断 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    public boolean registerUserIntoDBmanager(String groupName,String uid, String userName, String picName, 
 | 
                                             String userInfo, byte[] faceFeature) { 
 | 
        boolean isSuccess = false; 
 | 
  
 | 
        User user = new User(); 
 | 
        user.setGroupId(groupName); 
 | 
        // 用户id(由数字、字母、下划线组成),长度限制128B 
 | 
        // uid为用户的id,百度对uid不做限制和处理,应该与您的帐号系统中的用户id对应。 
 | 
        //final String uid = UUID.randomUUID().toString(); 
 | 
        user.setUserId(uid); 
 | 
        user.setUserName(userName); 
 | 
        user.setFeature(faceFeature); 
 | 
        user.setImageName(picName); 
 | 
        if (userInfo != null) { 
 | 
            user.setUserInfo(userInfo); 
 | 
        } 
 | 
        // 添加用户信息到数据库 
 | 
        return FaceApi.getInstance().userAdd(user); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取底库数量 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public int getmUserNum() { 
 | 
        return users.size(); 
 | 
    } 
 | 
  
 | 
    // 删除识别记录 
 | 
    public boolean deleteRecords(String userName) { 
 | 
        boolean ret = false; 
 | 
        if (TextUtils.isEmpty(userName)) { 
 | 
            return ret; 
 | 
        } 
 | 
        ret = DBManager.getInstance().deleteRecords(userName); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    // 删除识别记录 
 | 
    public boolean deleteRecords(String startTime, String endTime) { 
 | 
        boolean ret = false; 
 | 
        if (TextUtils.isEmpty(startTime) && TextUtils.isEmpty(endTime)) { 
 | 
            return ret; 
 | 
        } 
 | 
//        ret = DBManager.getInstance().deleteRecords(startTime, endTime); 
 | 
        return ret; 
 | 
    } 
 | 
  
 | 
    // 清除识别记录 
 | 
    public int cleanRecords() { 
 | 
        boolean ret = false; 
 | 
        int num = DBManager.getInstance().cleanRecords(); 
 | 
        return num; 
 | 
    } 
 | 
  
 | 
    public void clean(){ 
 | 
        users = null; 
 | 
    } 
 | 
  
 | 
    public List<User> getUsers() { 
 | 
        return users; 
 | 
    } 
 | 
  
 | 
    public void setUsers(List<User> users) { 
 | 
        this.users = users; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |