package com.mysema.rdfbean.model;
import javax.annotation.Nullable;
import com.mysema.query.types.Ops;
import com.mysema.query.types.Order;
import com.mysema.query.types.OrderSpecifier;
import com.mysema.query.types.expr.Param;
import com.mysema.query.types.expr.StringExpression;
import com.mysema.query.types.expr.StringOperation;
/**
* @author tiwe
*
* @param <T>
*/
public class QNODE<T extends NODE> extends Param<T> {
private static final long serialVersionUID = 1134119241723346776L;
public static final QID s = new QID("s");
public static final QUID p = new QUID("p");
public static final QNODE<NODE> o = new QNODE<NODE>(NODE.class, "o");
public static final QID c = new QID("c");
public static final QID type = new QID("type");
public static final QID typeContext = new QID("typeContext");
public static final QNODE<NODE> first = new QNODE<NODE>(NODE.class, "first");
public static final QID rest = new QID("rest");
@Nullable
private volatile QLIT lit;
@Nullable
private volatile QID id;
@Nullable
private volatile StringExpression stringCast;
@Nullable
@SuppressWarnings("unchecked")
private volatile OrderSpecifier asc, desc;
public QNODE(Class<T> type, String variable) {
super(type, variable);
}
public PatternBlock is(Object predicate, Object subject) {
return Blocks.pattern(subject, predicate, this);
}
@SuppressWarnings("unchecked")
public OrderSpecifier asc() {
if (asc == null) {
asc = new OrderSpecifier(Order.ASC, this);
}
return asc;
}
@SuppressWarnings("unchecked")
public OrderSpecifier desc() {
if (desc == null) {
desc = new OrderSpecifier(Order.DESC, this);
}
return desc;
}
public QID id() {
if (id == null) {
id = new QID(getName());
}
return id;
}
public QLIT lit() {
if (lit == null) {
lit = new QLIT(getName());
}
return lit;
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (o instanceof QNODE<?>) {
QNODE<?> other = (QNODE<?>) o;
return other.getName().equals(getName());
} else {
return false;
}
}
/**
* Get a cast to String expression
*
* @see java.lang.Object#toString()
* @return
*/
public StringExpression stringValue() {
if (stringCast == null) {
stringCast = StringOperation.create(Ops.STRING_CAST, this);
}
return stringCast;
}
}