/**
* Copyright (C) 2015 Orange
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.francetelecom.clara.cloud.coremodel;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.*;
/**
* Created by sbortolussi on 20/07/2015.
*/
public class ApplicationSpecifications {
public static Specification<Application> isActive() {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(applications.get("state"), ApplicationStateEnum.CREATED);
}
};
}
public static Specification<Application> isRemoved() {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(applications.get("state"), ApplicationStateEnum.REMOVED);
}
};
}
public static Specification<Application> isPublic() {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(applications.get("isPublic"), Boolean.TRUE);
}
};
}
public static Specification<Application> hasForMember(SSOId ssoId) {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(applications.join("members").get("value"),ssoId.getValue());
}
};
}
public static Specification<Application> isPublicOrHasForMember(SSOId ssoId) {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
final Join<Object, Object> members = applications.join("members", JoinType.LEFT);
final Predicate isPublic = criteriaBuilder.equal(applications.get("isPublic"), Boolean.TRUE);
final Predicate hasForMember = criteriaBuilder.equal(members.get("value"), ssoId.getValue());
return criteriaBuilder.or(isPublic, hasForMember);
}
};
}
public static Specification<Application> hasCode(String code) {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(applications.get("code"), code);
}
};
}
public static Specification<Application> hasLabel(String label) {
return new Specification<Application>() {
@Override
public Predicate toPredicate(Root<Application> applications, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(applications.get("label"), label);
}
};
}
}