// Path: src/main/java/com/hantsylabs/restexample/springmvc/domain/User.java
// @Data
// @Builder
// @NoArgsConstructor
// @AllArgsConstructor
// @Entity
// @Table(name = "users")
// public class User implements UserDetails, Serializable {
// 
//     /**
//      *
//      */
//     private static final long serialVersionUID = 1L;
// 
//     @Id()
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     @Column(name = "id")
//     private Long id;
// 
//     @Column(name = "username")
//     private String username;
// 
//     @Column(name = "password")
//     private String password;
// 
//     @Column(name = "name")
//     private String name;
// 
//     @Column(name = "email")
//     private String email;
// 
//     @Column(name = "role")
//     private String role;
// 
//     @Column(name = "created_date")
//     @CreatedDate
//     private LocalDateTime createdDate;
// 
//     public String getName() {
//         if (this.name == null || this.name.trim().length() == 0) {
//             return this.username;
//         }
//         return name;
//     }
// 
//     @Override
//     public Collection<? extends GrantedAuthority> getAuthorities() {
//         return Arrays.asList(new SimpleGrantedAuthority("ROLE_" + this.role));
//     }
// 
//     @Override
//     public String getPassword() {
//         return this.password;
//     }
// 
//     @Override
//     public String getUsername() {
//         return this.username;
//     }
// 
//     @Override
//     public boolean isAccountNonExpired() {
//         return true;
//     }
// 
//     @Override
//     public boolean isAccountNonLocked() {
//         return true;
//     }
// 
//     @Override
//     public boolean isCredentialsNonExpired() {
//         return true;
//     }
// 
//     @Override
// 
//     public boolean isEnabled() {
//         return true;
//     }
// 
// 
// }


import com.hantsylabs.restexample.springmvc.domain.User;
import com.hantsylabs.restexample.springmvc.domain.User_;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
package com.hantsylabs.restexample.springmvc.repository;


/**
 *
 * @author Hantsy Bai<hantsy@gmail.com>
 *
 */
public class UserSpecifications {

    private UserSpecifications() {}

// Path: src/main/java/com/hantsylabs/restexample/springmvc/domain/User.java
// @Data
// @Builder
// @NoArgsConstructor
// @AllArgsConstructor
// @Entity
// @Table(name = "users")
// public class User implements UserDetails, Serializable {
// 
//     /**
//      *
//      */
//     private static final long serialVersionUID = 1L;
// 
//     @Id()
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     @Column(name = "id")
//     private Long id;
// 
//     @Column(name = "username")
//     private String username;
// 
//     @Column(name = "password")
//     private String password;
// 
//     @Column(name = "name")
//     private String name;
// 
//     @Column(name = "email")
//     private String email;
// 
//     @Column(name = "role")
//     private String role;
// 
//     @Column(name = "created_date")
//     @CreatedDate
//     private LocalDateTime createdDate;
// 
//     public String getName() {
//         if (this.name == null || this.name.trim().length() == 0) {
//             return this.username;
//         }
//         return name;
//     }
// 
//     @Override
//     public Collection<? extends GrantedAuthority> getAuthorities() {
//         return Arrays.asList(new SimpleGrantedAuthority("ROLE_" + this.role));
//     }
// 
//     @Override
//     public String getPassword() {
//         return this.password;
//     }
// 
//     @Override
//     public String getUsername() {
//         return this.username;
//     }
// 
//     @Override
//     public boolean isAccountNonExpired() {
//         return true;
//     }
// 
//     @Override
//     public boolean isAccountNonLocked() {
//         return true;
//     }
// 
//     @Override
//     public boolean isCredentialsNonExpired() {
//         return true;
//     }
// 
//     @Override
// 
//     public boolean isEnabled() {
//         return true;
//     }
// 
// 
// }


// Path: src/main/java/com/hantsylabs/restexample/springmvc/repository/UserSpecifications.java
import com.hantsylabs.restexample.springmvc.domain.User;
import com.hantsylabs.restexample.springmvc.domain.User_;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;

package com.hantsylabs.restexample.springmvc.repository;


/**
 *
 * @author Hantsy Bai<hantsy@gmail.com>
 *
 */
public class UserSpecifications {

    private UserSpecifications() {}

    public static Specification<User> filterUsersByKeyword(