package org.cloudgraph.web.model.profile;
import org.cloudgraph.web.sdo.personalization.DefaultElementSetting;
import org.cloudgraph.web.sdo.personalization.Element;
import org.cloudgraph.web.sdo.personalization.Profile;
import org.cloudgraph.web.sdo.personalization.RoleName;
import org.cloudgraph.web.sdo.personalization.User;
import org.plasma.query.model.Expression;
import org.plasma.query.model.From;
import org.plasma.query.model.Path;
import org.plasma.query.model.Property;
import org.plasma.query.model.Query;
import org.plasma.query.model.Select;
import org.plasma.query.model.Where;
public class ProfileQuery {
public static Query createDefaultSettingQuery(RoleName role) {
// Note: do NOT traverse into profile-element-setting here
// or we will get settings for (potentially) every user
Select select = new Select(new String[] {
"*",
"defaultElementSetting/*",
"defaultElementSetting/role/*",
"defaultElementSetting/setting/*",
"child/*",
"child/defaultElementSetting/*",
"child/defaultElementSetting/role/*",
"child/defaultElementSetting/setting/*",
"child/child/*",
"child/child/defaultElementSetting/*",
"child/child/defaultElementSetting/role/*",
"child/child/defaultElementSetting/setting/*",
"child/child/child/*",
"child/child/child/defaultElementSetting/*",
"child/child/child/defaultElementSetting/role/*",
"child/child/child/defaultElementSetting/setting/*",
});
From from = new From(Element.TYPE_NAME_ELEMENT, Element.NAMESPACE_URI);
Where where = new Where();
where.addExpression(Property.forName(Element.PROPERTY.name.name(),
new Path(Element.PROPERTY.defaultElementSetting.name(),
DefaultElementSetting.PROPERTY.role.name())).eq(
role.getInstanceName()));
where.addExpression(Expression.and());
where.addExpression(Property.forName(
Element.PROPERTY.parent.name()).isNull());
Query query = new Query(select, from, where);
return query;
}
public static Query createProfileQuery(String username) {
Select select = new Select(new String[] {
"*",
"user/*",
"user/person/*",
"profileElementSetting/*",
"profileElementSetting/profile/*",
"profileElementSetting/setting/*",
"profileElementSetting/element/*",
});
From from = new From(Profile.TYPE_NAME_PROFILE, Profile.NAMESPACE_URI);
Where where = new Where();
where.addExpression(Property.forName(User.PROPERTY.username.name(),
new Path(Profile.PROPERTY.user.name())).eq(
username));
Query query = new Query(select, from, where);
return query;
}
}