package org.societies.personalisation.preference.api.model.util;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import org.societies.api.context.model.CtxAttributeIdentifier;
import org.societies.api.context.model.CtxModelBeanTranslator;
import org.societies.api.context.model.MalformedCtxIdentifierException;
import org.societies.api.identity.IIdentityManager;
import org.societies.api.internal.personalisation.model.PreferenceDetails;
import org.societies.api.internal.schema.personalisation.model.ContextPreferenceConditionBean;
import org.societies.api.internal.schema.personalisation.model.OperatorConstantsBean;
import org.societies.api.internal.schema.personalisation.model.PreferenceDetailsBean;
import org.societies.api.internal.schema.personalisation.model.PreferenceTreeModelBean;
import org.societies.api.internal.schema.personalisation.model.PreferenceTreeNodeBean;
import org.societies.api.internal.servicelifecycle.ServiceModelUtils;
import org.societies.api.personalisation.model.Action;
import org.societies.api.personalisation.model.IAction;
import org.societies.api.schema.personalisation.model.ActionBean;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
import org.societies.personalisation.preference.api.model.ContextPreferenceCondition;
import org.societies.personalisation.preference.api.model.IPreference;
import org.societies.personalisation.preference.api.model.IPreferenceCondition;
import org.societies.personalisation.preference.api.model.IPreferenceOutcome;
import org.societies.personalisation.preference.api.model.IPreferenceTreeModel;
import org.societies.personalisation.preference.api.model.OperatorConstants;
import org.societies.personalisation.preference.api.model.PreferenceOutcome;
import org.societies.personalisation.preference.api.model.PreferenceTreeModel;
import org.societies.personalisation.preference.api.model.PreferenceTreeNode;
public class PreferenceUtils {
public static PreferenceDetails toPreferenceDetails(PreferenceDetailsBean bean){
PreferenceDetails details = new PreferenceDetails();
details.setPreferenceName(bean.getPreferenceName());
details.setServiceID(bean.getServiceID());
details.setServiceType(bean.getServiceType());
return details;
}
public static PreferenceDetailsBean toPreferenceDetailsBean(PreferenceDetails details){
PreferenceDetailsBean bean = new PreferenceDetailsBean();
bean.setPreferenceName(details.getPreferenceName());
bean.setServiceID(details.getServiceID());
bean.setServiceType(details.getServiceType());
return bean;
}
public static ContextPreferenceConditionBean toContextPreferenceConditionBean(IPreferenceCondition condition){
ContextPreferenceConditionBean bean = new ContextPreferenceConditionBean();
bean.setCtxIdentifier(CtxModelBeanTranslator.getInstance().fromCtxIdentifier(condition.getCtxIdentifier()));
bean.setName(condition.getname());
bean.setOperator(toOperatorConstantsBean(condition.getoperator()));
bean.setType(condition.getType());
bean.setValue(condition.getvalue());
return bean;
}
public static ContextPreferenceCondition toContextPreferenceCondition(ContextPreferenceConditionBean bean){
try {
return new ContextPreferenceCondition(
(CtxAttributeIdentifier) CtxModelBeanTranslator.getInstance().fromCtxIdentifierBean(bean.getCtxIdentifier()),
toOperatorConstants(bean.getOperator()),
bean.getValue(),
bean.getName());
} catch (MalformedCtxIdentifierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static PreferenceTreeNode toPreferenceTreeNode(PreferenceTreeNodeBean bean){
if (bean.getCondition()!=null){
PreferenceTreeNode node = new PreferenceTreeNode(toContextPreferenceCondition(bean.getCondition()));
if (bean.getChildren()!=null){
List<PreferenceTreeNodeBean> children = bean.getChildren();
for (PreferenceTreeNodeBean child : children){
node.add(toPreferenceTreeNode(child));
}
}
return node;
}else if (bean.getOutcome()!=null){
return new PreferenceTreeNode(toPreferenceOutcome(bean.getOutcome()));
}
PreferenceTreeNode node = new PreferenceTreeNode();
if (bean.getChildren()!=null){
List<PreferenceTreeNodeBean> children = bean.getChildren();
for (PreferenceTreeNodeBean child : children){
node.add(toPreferenceTreeNode(child));
}
}
return node;
}
public static PreferenceTreeNodeBean toPreferenceTreeNodeBean(IPreference node){
PreferenceTreeNodeBean bean = new PreferenceTreeNodeBean();
if (node.isLeaf()){
bean.setOutcome(toActionBean(node.getOutcome()));
return bean;
}
if (node.getCondition()!=null){
bean.setCondition(toContextPreferenceConditionBean(node.getCondition()));
}
Enumeration<IPreference> children = node.children();
ArrayList<IPreference> preferencesBelow = new ArrayList<IPreference>();
while(children.hasMoreElements()){
preferencesBelow.add(children.nextElement());
}
return bean;
}
public static PreferenceTreeModel toPreferenceTreeModel(PreferenceTreeModelBean bean){
PreferenceTreeNode preference = toPreferenceTreeNode(bean.getPreference());
PreferenceDetails details = toPreferenceDetails(bean.getPreferenceDetails());
return new PreferenceTreeModel(details, preference);
}
public static PreferenceTreeModelBean toPreferenceTreeModelBean(IPreferenceTreeModel model){
PreferenceTreeModelBean bean = new PreferenceTreeModelBean();
bean.setPreference(toPreferenceTreeNodeBean(model.getRootPreference()));
bean.setPreferenceDetails(toPreferenceDetailsBean(model.getPreferenceDetails()));
return bean;
}
public static Action toAction(ActionBean bean){
return new Action(bean.getServiceID(), bean.getServiceType(), bean.getParameterName(), bean.getValue(), bean.isImplementable(), bean.isContextDependent(), bean.isProactive());
}
public static PreferenceOutcome toPreferenceOutcome(ActionBean bean){
return new PreferenceOutcome(bean.getServiceID(), bean.getServiceType(), bean.getParameterName(), bean.getValue(), bean.isImplementable(), bean.isContextDependent(), bean.isProactive());
}
public static ActionBean toActionBean(IAction action){
ActionBean bean = new ActionBean();
bean.setContextDependent(action.isContextDependent());
bean.setImplementable(action.isImplementable());
bean.setProactive(action.isProactive());
bean.setParameterName(action.getparameterName());
bean.setServiceID(action.getServiceID());
bean.setServiceType(action.getServiceType());
bean.setValue(action.getvalue());
return bean;
}
public static OperatorConstantsBean toOperatorConstantsBean(OperatorConstants operator){
switch (operator) {
case EQUALS : return OperatorConstantsBean.EQUALS;
case GREATER_OR_EQUAL_THAN : return OperatorConstantsBean.GREATER_OR_EQUAL_THAN;
case GREATER_THAN : return OperatorConstantsBean.GREATER_THAN;
case LESS_OR_EQUAL_THAN : return OperatorConstantsBean.LESS_OR_EQUAL_THAN;
case LESS_THAN : return OperatorConstantsBean.LESS_THAN;
default : return OperatorConstantsBean.EQUALS;
}
}
public static OperatorConstants toOperatorConstants(OperatorConstantsBean bean){
switch (bean){
case EQUALS : return OperatorConstants.EQUALS;
case GREATER_OR_EQUAL_THAN : return OperatorConstants.GREATER_OR_EQUAL_THAN;
case GREATER_THAN : return OperatorConstants.GREATER_THAN;
case LESS_OR_EQUAL_THAN: return OperatorConstants.LESS_OR_EQUAL_THAN;
case LESS_THAN: return OperatorConstants.LESS_THAN;
default: return OperatorConstants.EQUALS;
}
}
public static PreferenceDetails getCommunityPreferenceManagerDetails(IIdentityManager idm, ServiceResourceIdentifier serviceIDOf3pService, String downloadOrUpload) throws URISyntaxException{
PreferenceDetails details = new PreferenceDetails();
ServiceResourceIdentifier serviceID = new ServiceResourceIdentifier();
serviceID.setIdentifier(new URI(idm.getThisNetworkNode().getBareJid()));
serviceID.setServiceInstanceIdentifier("CommunityPreferenceManager");
details.setServiceID(serviceID);
details.setServiceType(downloadOrUpload);
details.setPreferenceName(ServiceModelUtils.serviceResourceIdentifierToString(serviceIDOf3pService));
return details;
}
}