package org.societies.personalisation.CAUIDiscovery.impl; import java.io.Serializable; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.internal.context.broker.ICtxBroker; 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; public class ConstructUIModel { private static Logger LOG = LoggerFactory.getLogger(ConstructUIModel.class); private ICAUITaskManager cauiTaskManager; //private ICtxBroker ctxBroker; public ConstructUIModel(ICAUITaskManager cauiTaskManager,ICtxBroker ctxBroker ){ this.cauiTaskManager = cauiTaskManager; //this.ctxBroker = ctxBroker; } public ConstructUIModel(ICAUITaskManager cauiTaskManager ){ this.cauiTaskManager = cauiTaskManager; } public LinkedHashMap<String,HashMap<String,Double>> filterDictionary(LinkedHashMap<String,HashMap<String,Double>> dictionary, Double limit){ LinkedHashMap<String,HashMap<String,Double>> filtered = new LinkedHashMap<String,HashMap<String,Double>>(); for(String actions : dictionary.keySet()){ HashMap<String,Double> transTargets = dictionary.get(actions); //System.out.println("Action:"+actions+ "| target: "+transTargets); for(String targetAction : transTargets.keySet()){ if(transTargets.get(targetAction) >= limit){ filtered.put(actions, transTargets); } } } System.out.println("filterDictionary results for limit "+limit+ "| filtered: "+filtered); return filtered; } public UserIntentModelData constructNewModel(LinkedHashMap<List<String>,HashMap<String,Double>> transDictionaryAll, HashMap<String,List<String>> ctxActionsMap, Map<String , ServiceResourceIdentifier> sriMap){ System.out.println("cauiTaskManager "+cauiTaskManager); UserIntentModelData modelData = cauiTaskManager.createModel(); //create all actions and assign context for (List<String> actionTempList : transDictionaryAll.keySet()){ String actionTemp = actionTempList.get(0); String [] action = actionTemp.split("\\#"); // add here the serviceID / //LOG.info("action details > serviceID: "+action[0]+" paramName: "+action[1]+" paramValue:"+action[2]); String serviceStringId = action[0]; //System.out.println("serviceId="+serviceId); ServiceResourceIdentifier sri = new ServiceResourceIdentifier(); if(!sriMap.isEmpty() && sriMap.containsKey(serviceStringId)){ sri = sriMap.get(serviceStringId); } IUserIntentAction userAction = cauiTaskManager.createAction(sri,action[3],action[1],action[2]); LOG.debug("2 userAction created "+userAction); LOG.debug("2 userAction service id "+userAction.getServiceID()); LOG.debug("2 userAction service instance id "+userAction.getServiceID().getServiceInstanceIdentifier()); LOG.debug("2 userAction service id "+userAction.getServiceID().getIdentifier()); if(ctxActionsMap.get(actionTemp)!=null){ List<String> contexValuesStringList = ctxActionsMap.get(actionTemp); HashMap<String,Serializable> context = new HashMap<String,Serializable>(); for(String contextTypeValueConc : contexValuesStringList){ String [] contextTypeValue = contextTypeValueConc.split("="); //LOG.info("constructNewModel "+contextTypeValue); if(contextTypeValue.length == 2 ){ String contextType = contextTypeValue[0]; String contextValue = contextTypeValue[1]; //LOG.info("constructNewModel type:"+contextType+" value:"+contextValue); context.put(contextType, contextValue); } } userAction.setActionContext(context); } // LOG.info("3 act id :"+userAction.getActionID()+" context :"+userAction.getActionContext()); } // set links among actions // LOG.info("4 set links among actions"); for (List<String> sourceActionConcList : transDictionaryAll.keySet()){ //System.out.println("sourceActionConcList "+sourceActionConcList); String sourceActionConc = sourceActionConcList.get(0); //System.out.println("sourceActionConc "+sourceActionConc); String [] sourceAction = sourceActionConc.split("\\#"); List<IUserIntentAction> sourceActionList = cauiTaskManager.retrieveActionsByTypeValue(sourceAction[1],sourceAction[2]); // System.out.println("sourceActionList "+sourceActionList); // LOG.info("5 sourceActionList "+ sourceActionList); IUserIntentAction sourceActionObj = sourceActionList.get(0); // System.out.println("sourceActionObj "+sourceActionObj); HashMap<String,Double> targetActionsMap = transDictionaryAll.get(sourceActionConcList); //System.out.println("transDictionaryAll "+transDictionaryAll); //System.out.println("targetActionsMap "+targetActionsMap); // LOG.info("6 targetActionsMap "+ targetActionsMap); for(String targetActionString : targetActionsMap.keySet()){ String [] actionStringTarg = targetActionString.split("\\#"); Double transProb = targetActionsMap.get(targetActionString); // LOG.info("7a actionStringTarg[0] "+ actionStringTarg[0]); // LOG.info("7b actionStringTarg[1] "+ actionStringTarg[1]); List<IUserIntentAction> actionObjTargetList = cauiTaskManager.retrieveActionsByTypeValue(actionStringTarg[1],actionStringTarg[2]); // more than one target action might exist with the same param and value!! // LOG.info("8 actionObjTargetList "+ actionObjTargetList); if(actionObjTargetList.size()>0){ IUserIntentAction targetActionObj = actionObjTargetList.get(0); // LOG.info("9 targetActionObj "+ targetActionObj); cauiTaskManager.setActionLink(sourceActionObj, targetActionObj, transProb); } } } modelData = cauiTaskManager.retrieveModel(); //LOG.info("10 modelData action model:"+ modelData.getActionModel()); return modelData; } /* * debugging helper class */ public void printTransProbDictionary (LinkedHashMap<String,HashMap<String,Double>> transProbDictionary){ //System.out.println ("** ConstructUIModel ** total number of entries: " + transProbDictionary.size()); for(String actions : transProbDictionary.keySet()){ HashMap<String,Double> transTargets = transProbDictionary.get(actions); System.out.println("Action:"+actions+ "| target: "+transTargets); } } }