package org.activityinfo.core.shared.criteria;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.core.shared.Projection;
import org.activityinfo.model.form.FormInstance;
import javax.annotation.Nonnull;
import java.util.Objects;
/**
* Criteria that filters on the parent's id
*/
public class ParentCriteria implements Criteria {
private final ResourceId parentId;
private ParentCriteria(ResourceId id) {
this.parentId = id;
}
@Override
public void accept(CriteriaVisitor visitor) {
visitor.visitParentCriteria(this);
}
public boolean selectsRoot() {
return parentId == null;
}
public ResourceId getParentId() {
return parentId;
}
@Override
public boolean apply(@Nonnull FormInstance instance) {
return Objects.equals(parentId, instance.getOwnerId());
}
@Override
public boolean apply(@Nonnull Projection projection) {
// todo
return true;
}
public static ParentCriteria isRoot() {
return new ParentCriteria(null);
}
public static ParentCriteria isChildOf(ResourceId id) {
return new ParentCriteria(id);
}
}