package org.societies.personalisation.CACIDiscovery.test;
import java.io.IOException;
import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.societies.api.context.model.CtxAttribute;
import org.societies.api.context.model.CtxAttributeIdentifier;
import org.societies.api.context.model.CtxAttributeTypes;
import org.societies.api.context.model.CtxEntity;
import org.societies.api.context.model.CtxEntityIdentifier;
import org.societies.api.context.model.CtxHistoryAttribute;
import org.societies.api.context.model.util.SerialisationHelper;
import org.societies.api.personalisation.model.Action;
import org.societies.api.personalisation.model.IAction;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
//remove after testing
import org.societies.personalisation.CAUIDiscovery.impl.CAUIDiscovery;
public class UserHistoryB {
private static Long nextValue = 0L;
Map<CtxHistoryAttribute, List<CtxHistoryAttribute>> mapHocData = new LinkedHashMap<CtxHistoryAttribute, List<CtxHistoryAttribute>>();
private CtxEntity operator = null;
CAUIDiscovery discover = null;
UserHistoryB(){
System.out.println("creating user intent model for user B");
operator = createOperator();
discover = new CAUIDiscovery();
}
public Map<CtxHistoryAttribute, List<CtxHistoryAttribute>> createContextHistoryAttributesSet(){
//create actions
//IIdentity identity = new MockIdentity(IdentityType.CSS, "user", "societies.org");
ServiceResourceIdentifier serviceId1 = new ServiceResourceIdentifier();
ServiceResourceIdentifier serviceId2 = new ServiceResourceIdentifier();
try {
serviceId1.setIdentifier(new URI("http://testService1"));
serviceId2.setIdentifier(new URI("http://testService2"));
serviceId1.setServiceInstanceIdentifier("http://testService1");
serviceId2.setServiceInstanceIdentifier("http://testService2");
} catch (URISyntaxException e) {
e.printStackTrace();
}
//create actions
IAction action1 = new Action(serviceId1, "testService", "volume", "high");
IAction action2 = new Action(serviceId2, "testService", "volume", "low");
IAction action3 = new Action(serviceId1, "testService", "volume", "mute");
//IAction actionX = new Action(serviceId1, "testService", "XXXX", "XXXX");
//IAction action4 = new Action(serviceId2, "testService", "colour", "blue");
//IAction action5 = new Action(serviceId2, "testService", "colour", "green");
//IAction actionY = new Action(serviceId1, "testService", "YYYY", "YYYY");
//System.out.println ("action service ID "+actionY.getServiceID().getServiceInstanceIdentifier());
for (int i=0; i<4; i++){
monitorAction(action1,"country","free",10);
monitorAction(action2,"office","busy",15);
monitorAction(action3,"park","away",25);
}
return this.mapHocData;
}
//******************************************************************
// helper methods
//******************************************************************
private void monitorAction(IAction action, String location, String status, Integer temperature){
CtxHistoryAttribute mockPrimaryHocActionAttrX = createMockHocActionAttr(action);
List<CtxHistoryAttribute> escortingCtxDataX = new ArrayList<CtxHistoryAttribute>();
CtxHistoryAttribute attrLocationX = createMockHocAttr(CtxAttributeTypes.LOCATION_SYMBOLIC,location);
CtxHistoryAttribute attrStatusX = createMockHocAttr(CtxAttributeTypes.STATUS,status);
CtxHistoryAttribute attrTemperatureX = createMockHocAttr(CtxAttributeTypes.TEMPERATURE,temperature);
escortingCtxDataX.add(attrLocationX);
escortingCtxDataX.add(attrStatusX);
escortingCtxDataX.add(attrTemperatureX);
this.mapHocData.put(mockPrimaryHocActionAttrX, escortingCtxDataX);
}
private CtxHistoryAttribute createMockHocAttr(String ctxAttrType, Serializable ctxAttrValue){
CtxAttributeIdentifier ctxAttrID = new CtxAttributeIdentifier(operator.getId(),ctxAttrType.toString(),getNextValue());
CtxAttribute ctxAttr = new CtxAttribute(ctxAttrID);
if(ctxAttrValue instanceof String){
ctxAttr.setStringValue(ctxAttrValue.toString());
} else if (ctxAttrValue instanceof Double){
ctxAttr.setDoubleValue((Double)ctxAttrValue);
}else if (ctxAttrValue instanceof Integer){
ctxAttr.setIntegerValue((Integer)ctxAttrValue);
}
CtxHistoryAttribute ctxHocAttr = new CtxHistoryAttribute(ctxAttr,getNextValue());
return ctxHocAttr;
}
private CtxHistoryAttribute createMockHocActionAttr(IAction action){
CtxHistoryAttribute ctxHocAttr = null;
try {
CtxAttributeIdentifier ctxAttrID = new CtxAttributeIdentifier(operator.getId(),CtxAttributeTypes.LAST_ACTION,getNextValue());
CtxAttribute ctxAttr = new CtxAttribute(ctxAttrID);
ctxAttr.setBinaryValue(SerialisationHelper.serialise(action));
ctxHocAttr = new CtxHistoryAttribute(ctxAttr,getNextValue());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ctxHocAttr;
}
private CtxEntity createOperator(){
CtxEntityIdentifier ctxEntId = new CtxEntityIdentifier("operatorID","person",getNextValue());
CtxEntity ctxEntity = new CtxEntity(ctxEntId);
setOperatorEntity(ctxEntity);
return ctxEntity;
}
private void setOperatorEntity(CtxEntity entity){
operator = entity;
}
public static Long getNextValue() {
return nextValue++;
}
}