package org.societies.personalisation.CAUITaskManager.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.societies.api.context.model.CtxAttributeTypes;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
import org.societies.personalisation.CAUI.api.CAUITaskManager.ICAUITaskManager;
import org.societies.personalisation.CAUI.api.model.IUserIntentAction;
import org.societies.personalisation.CAUI.api.model.IUserIntentTask;
import org.societies.personalisation.CAUI.api.model.UserIntentModelData;
import org.societies.personalisation.CAUITaskManager.impl.CAUITaskManager;
public class CAUITaskModelManagerTest {
private ICAUITaskManager modelManager;
String taskID = "";
final UserIntentModelData modelData = null;
String actionIDString = null;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
modelManager = new CAUITaskManager();
}
@After
public void tearDown() throws Exception {
}
private static final long serialVersionUID = 1L;
@Test
public void testRetrieveModel() {
assertNull(modelData);
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
System.out.println(" "+modelData.getActionModel().size());
assertNotNull(modelData);
assertEquals(3,modelData.getActionModel().size());
}
@Test
public void testUpdateModel() {
modelManager.updateModel(null);
UserIntentModelData modelData = modelManager.retrieveModel();
assertNull(modelData);
createModel();
UserIntentModelData modelData2 = modelManager.retrieveModel();
//System.out.println(" modelData2 "+modelData2.getActionModel());
//System.out.println(" modelData2 size "+modelData2.getActionModel().size());
assertNotNull(modelData2);
assertEquals(3,modelData2.getActionModel().size());
modelManager.updateModel(null);
}
@Test
public void testCreateAction() {
ServiceResourceIdentifier serviceId = new ServiceResourceIdentifier();
try {
serviceId.setIdentifier(new URI("css://nikosk@societies.org/HelloEarth"));
serviceId.setServiceInstanceIdentifier("css://nikosk@societies.org/HelloEarth");
IUserIntentAction userActionA = modelManager.createAction(serviceId,"ServiceType","A-homePc","off");
userActionA.setDuration(12);
HashMap<String,Serializable> actionCtx = new HashMap<String,Serializable>();
actionCtx.put("temperature", 32);
actionCtx.put("noiseLevel", "loud");
userActionA.setActionContext(actionCtx);
userActionA.setConfidenceLevel(65);
userActionA.setTaskID("taskID");
assertNotNull(userActionA);
assertEquals(userActionA.getparameterName(),"A-homePc");
assertEquals(userActionA.getvalue(), "off");
assertEquals(userActionA.getActionContext().size(),2);
assertEquals(userActionA.getActionContext().get("temperature"),32);
assertEquals(userActionA.getActionContext().get("noiseLevel"),"loud");
assertEquals(userActionA.getConfidenceLevel(),65);
assertEquals(userActionA.getTaskID(),"taskID");
System.out.println("service id "+userActionA.getServiceID().getServiceInstanceIdentifier());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Ignore
@Test
public void testCreateTaskStringDouble() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveTask() {
fail("Not yet implemented");
}
@Test
public void testRetrieveAction() {
System.out.println("testRetrieveAction");
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
assertNotNull(modelData);
IUserIntentAction action = modelManager.retrieveAction(this.actionIDString);
assertEquals(actionIDString, action.getActionID());
}
@Test
public void testRetrieveActionsByTypeValue() {
System.out.println("testRetrieveActionsByTypeValue");
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
System.out.println("testRetrieveActionsByTypeValue getActionModel "+ modelData.getActionModel());
List<IUserIntentAction> userActionA = modelManager.retrieveActionsByTypeValue("A-homePc", "off");
//System.out.println("Retrieved_userActionA:"+ userActionA);
//System.out.println("Retrieved_userActionA:"+ userActionA.get(0));
assertEquals("css://nikosk@societies.org/HelloEarth#A-homePc=off/13", userActionA.get(0).toString());
}
@Test
public void testRetrieveActionsByServiceIDTypeValue() {
System.out.println("testRetrieveActionsByServiceIDTypeValue");
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
System.out.println("testRetrieveActionsByServiceIDTypeValue getActionModel "+ modelData.getActionModel());
List<IUserIntentAction> userActionList = modelManager.retrieveActionsByServiceTypeValue("css://nikosk@societies.org/HelloEarth","A-homePc", "off");
//System.out.println("userActionList:"+ userActionList);
IUserIntentAction userActionA = userActionList.get(0);
//System.out.println("userAction:"+ userActionA.getServiceID().toString());
assertEquals("css://nikosk@societies.org/HelloEarth", userActionA.getServiceID().getServiceInstanceIdentifier());
assertEquals(userActionA.getparameterName(),"A-homePc");
assertEquals(userActionA.getvalue(),"off");
}
@Test
public void testRetrieveActionsByServiceIDType() {
System.out.println("testRetrieveActionsByServiceIDType");
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
System.out.println("testRetrieveActionsByServiceIDType getActionModel "+ modelData.getActionModel());
List<IUserIntentAction> userActionList = modelManager.retrieveActionsByServiceType("css://nikosk@societies.org/HelloEarth","A-homePc");
System.out.println("userActionList:"+ userActionList);
assertEquals(2,userActionList.size());
IUserIntentAction userActionA = userActionList.get(0);
System.out.println("userAction service id :"+ userActionA.getServiceID().getServiceInstanceIdentifier());
}
@Test
public void testRetrieveActionsByContext() {
System.out.println("testRetrieveActionsByContext");
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
System.out.println("actionsList "+ modelData.getActionModel().keySet());
Map<String, Serializable> currentSituationConext1 = new HashMap<String, Serializable>();
currentSituationConext1.put(CtxAttributeTypes.LOCATION_SYMBOLIC, "moon");
currentSituationConext1.put(CtxAttributeTypes.STATUS, "busy");
List<IUserIntentAction> results1 = modelManager.retrieveActionsByContext(currentSituationConext1);
assertEquals(1,results1.size());
IUserIntentAction action1 = results1.get(0);
assertEquals("A-homePc",action1.getparameterName());
assertEquals("on",action1.getvalue());
HashMap<String,Serializable> context = action1.getActionContext();
assertEquals( "moon" , context.get(CtxAttributeTypes.LOCATION_SYMBOLIC));
assertEquals( "busy" , context.get(CtxAttributeTypes.STATUS));
System.out.println("estimated action "+ action1);
System.out.println("context loc "+ context.get(CtxAttributeTypes.LOCATION_SYMBOLIC));
System.out.println("context status "+ context.get(CtxAttributeTypes.STATUS));
///----------
Map<String, Serializable> situationConext2 = new HashMap<String, Serializable>();
situationConext2.put(CtxAttributeTypes.LOCATION_SYMBOLIC, "mars");
situationConext2.put(CtxAttributeTypes.STATUS, "online");
List<IUserIntentAction> results2 = modelManager.retrieveActionsByContext(situationConext2);
System.out.println("results2 "+ results2);
assertEquals(1,results2.size());
IUserIntentAction action2 = results2.get(0);
assertEquals("C-radio",action2.getparameterName());
assertEquals("mute",action2.getvalue());
HashMap<String,Serializable> context2 = action2.getActionContext();
assertEquals( "mars" , context2.get(CtxAttributeTypes.LOCATION_SYMBOLIC));
assertEquals( "online" , context2.get(CtxAttributeTypes.STATUS));
Map<String, Serializable> situationConext3 = new HashMap<String, Serializable>();
situationConext3.put(CtxAttributeTypes.LOCATION_SYMBOLIC, "null");
situationConext3.put(CtxAttributeTypes.STATUS, "free");
//situationConext2.put(CtxAttributeTypes.TEMPERATURE, "15");
List<IUserIntentAction> results3 = modelManager.retrieveActionsByContext(situationConext3);
//System.out.println("output 3 "+ results3);
assertEquals(1,results3.size());
Map<String, Serializable> situationConext4 = new HashMap<String, Serializable>();
situationConext4.put(CtxAttributeTypes.LOCATION_SYMBOLIC, "moon");
situationConext4.put(CtxAttributeTypes.STATUS, "free");
//situationConext2.put(CtxAttributeTypes.TEMPERATURE, "15");
List<IUserIntentAction> results4 = modelManager.retrieveActionsByContext(situationConext4);
System.out.println("output for ctx loc:moon and status:free "+ results4);
assertEquals(2,results4.size());
Map<String, Serializable> situationConext5 = new HashMap<String, Serializable>();
situationConext5.put(CtxAttributeTypes.LOCATION_SYMBOLIC, "xxx");
situationConext5.put(CtxAttributeTypes.STATUS, "yyyy");
//situationConext2.put(CtxAttributeTypes.TEMPERATURE, "15");
List<IUserIntentAction> results5 = modelManager.retrieveActionsByContext(situationConext5);
System.out.println("output for ctx loc:xxx and status:yyy "+ results5);
assertEquals(0,results5.size());
}
@Ignore
@Test
public void testRetrieveActionsByType() {
}
@Ignore
@Test
public void testSetNextActionLink() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testSetNextTaskLink() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveNodeTask() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveNodeAction() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveNextAction() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveNextTask() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveTasks() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testIdentifyActionTaskInModel() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testIdentifyNextAction() {
fail("Not yet implemented");
}
@Test
public void testCreateModel(){
assertNull(modelData);
createModel();
UserIntentModelData modelData = modelManager.retrieveModel();
//System.out.println(" "+modelData.getActionModel().size());
assertNotNull(modelData);
assertEquals(3,modelData.getActionModel().size());
}
@Ignore
@Test
public void testCreateTaskString() {
fail("Not yet implemented");
}
@Ignore
@Test
public void testRetrieveCurrentIntentAction() {
fail("Not yet implemented");
}
private void createModel(){
modelManager.createModel();
ServiceResourceIdentifier serviceId = new ServiceResourceIdentifier();
try {
serviceId.setIdentifier(new URI("css://nikosk@societies.org/HelloEarth"));
serviceId.setServiceInstanceIdentifier("css://nikosk@societies.org/HelloEarth");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//create Task A
IUserIntentAction userActionA = modelManager.createAction(serviceId,"ServiceType","A-homePc","off");
this.actionIDString = userActionA.getActionID();
HashMap<String,Serializable> contextMap = new HashMap<String,Serializable>();
contextMap.put(CtxAttributeTypes.LOCATION_SYMBOLIC,"earth");
contextMap.put(CtxAttributeTypes.STATUS,"free");
contextMap.put(CtxAttributeTypes.TEMPERATURE,15);
userActionA.setActionContext(contextMap);
IUserIntentAction userActionB = modelManager.createAction(serviceId,"ServiceType","A-homePc","on");
contextMap = new HashMap<String,Serializable>();
contextMap.put(CtxAttributeTypes.LOCATION_SYMBOLIC,"moon");
contextMap.put(CtxAttributeTypes.STATUS,"busy");
contextMap.put(CtxAttributeTypes.TEMPERATURE,15);
userActionB.setActionContext(contextMap);
IUserIntentAction userActionC = modelManager.createAction(serviceId,"ServiceType","C-radio","mute");
contextMap = new HashMap<String,Serializable>();
contextMap.put(CtxAttributeTypes.LOCATION_SYMBOLIC,"mars");
contextMap.put(CtxAttributeTypes.STATUS,"online");
contextMap.put(CtxAttributeTypes.TEMPERATURE,15);
userActionC.setActionContext(contextMap);
modelManager.setActionLink(userActionA, userActionB, 0.82);
modelManager.setActionLink(userActionB, userActionC, 0.42);
modelManager.setActionLink(userActionA, userActionC, 0.18);
LinkedHashMap<IUserIntentAction,HashMap<IUserIntentAction, Double>> actions = new LinkedHashMap<IUserIntentAction,HashMap<IUserIntentAction,Double>>();
HashMap<IUserIntentAction, Double> targetActionsMapActionA = new HashMap<IUserIntentAction, Double>();
targetActionsMapActionA.put(userActionB, 0.82);
targetActionsMapActionA.put(userActionC, 0.18);
actions.put(userActionA,targetActionsMapActionA);
HashMap<IUserIntentAction, Double> targetActionsMapActionB = new HashMap<IUserIntentAction, Double>();
targetActionsMapActionB.put(userActionC, 0.82);
actions.put(userActionB,targetActionsMapActionB);
//actions.put(userActionA, userActionB, 0.82)
//System.out.println("model : "+ actions);
IUserIntentTask task = modelManager.createTask("TaskA", actions);
taskID = task.getTaskID() ;
}
}