Ignore:
Timestamp:
08/24/16 10:17:41 (8 years ago)
Author:
pharms
Message:
  • added possibility to select the minimal amount of action instances a detected sequence must cover
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/manager/TaskTreeManager.java

    r1889 r2132  
    1616 
    1717import java.util.Collection; 
     18import java.util.HashMap; 
    1819import java.util.LinkedList; 
    1920import java.util.List; 
     21import java.util.Map; 
    2022import java.util.logging.Level; 
    2123 
    2224import de.ugoe.cs.autoquest.eventcore.Event; 
     25import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality; 
    2326import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask; 
    2427import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel; 
     
    7275    /** 
    7376     * <p> 
     77     * The default task equality considered when comparing task instances initially 
     78     * </p> 
     79     */ 
     80    private TaskEquality minimalTaskEquality = TaskEquality.SEMANTICALLY_EQUAL; 
     81 
     82    /** 
     83     * <p> 
     84     * If this flag is set, then the task tree manager will not create new event tasks for any 
     85     * events. Instead, it will check using the hashcode and equal methods of the provided events 
     86     * if a certain event has already occurred, and if so, the corresponding event task will be 
     87     * reused. 
     88     * </p> 
     89     */ 
     90    private boolean useEventEqualityForTaskComparison; 
     91     
     92    /** 
     93     * <p> 
     94     * the minimum number of event task instances a sequence must cover to still detect it as a 
     95     * representative task 
     96     * </p> 
     97     */ 
     98    private int minimumSequenceCoverage;; 
     99 
     100    /** 
     101     * <p> 
     102     * If the flag {@link #useEventEqualityForTaskComparison} is set, then here the task tree 
     103     * manager stores the already created event tasks. 
     104     * </p> 
     105     */ 
     106    private Map<Event, IEventTask> eventTasks = new HashMap<>(); 
     107 
     108    /** 
     109     * <p> 
    74110     * initializes the task tree manager 
    75111     * </p> 
    76112     */ 
    77113    public TaskTreeManager() { 
    78         sessions = new LinkedList<IUserSession>(); 
     114        this.sessions = new LinkedList<IUserSession>(); 
    79115    } 
    80116 
     
    96132     *                               single events 
    97133     */ 
    98     public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions) { 
     134    public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions, 
     135                                                   boolean useEventEqualityForTaskComparison, 
     136                                                   int     minimumSequenceCoverage) 
     137    { 
    99138        if ((currentSession != null) || (sessions.size() > 0)) { 
    100139            throw new IllegalStateException("do not mix calls to this method with calls to the " + 
     
    102141                                            "variant instead."); 
    103142        } 
     143         
     144        this.useEventEqualityForTaskComparison = useEventEqualityForTaskComparison; 
     145         
     146        if (useEventEqualityForTaskComparison) { 
     147            // if we do this, we also need to consider identity of event tasks afterwards 
     148            minimalTaskEquality = TaskEquality.IDENTICAL; 
     149        } 
     150         
     151        this.minimumSequenceCoverage = minimumSequenceCoverage; 
    104152         
    105153        for (List<Event> newSession : newSessions) { 
     
    117165    /** 
    118166     * <p> 
     167     * call {@link #createTaskModel(Collection, boolean, int)} with false for use event equality 
     168     * for comparison and 0 for the minimum number of covered events per sequence 
     169     * </p> 
     170     *  
     171     * @param newSessions the user sessions of which the task model shall be created 
     172     *  
     173     * @return the task model created from the user sessions 
     174     *  
     175     * @throws IllegalStateException if the task manager is already used by providing it with 
     176     *                               single events 
     177     */ 
     178    public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions) { 
     179        return createTaskModel(newSessions, false, 0); 
     180    } 
     181 
     182    /** 
     183     * <p> 
    119184     * handles a single event that occurred in a user session. 
    120185     * </p> 
     
    124189    public void handleNewEvent(Event event) { 
    125190        assertSessionSequence(); 
    126         String description = event.getType().getName() + " \u21D2 " + event.getTarget(); 
    127         IEventTask eventTask = taskFactory.createNewEventTask(description); 
    128         taskBuilder.addExecutedTask 
    129             (currentSession, taskFactory.createNewTaskInstance(eventTask, event)); 
     191         
     192        if (!useEventEqualityForTaskComparison) { 
     193            String description = event.getType().getName() + " \u21D2 " + event.getTarget(); 
     194            IEventTask eventTask = taskFactory.createNewEventTask(description); 
     195            taskBuilder.addExecutedTask 
     196                (currentSession, taskFactory.createNewTaskInstance(eventTask, event)); 
     197        } 
     198        else { 
     199            IEventTask eventTask = eventTasks.get(event); 
     200            if (eventTask == null) { 
     201                String description = event.getType().getName() + " \u21D2 " + event.getTarget(); 
     202                eventTask = taskFactory.createNewEventTask(description); 
     203                eventTasks.put(event, eventTask); 
     204            } 
     205             
     206            taskBuilder.addExecutedTask 
     207                (currentSession, taskFactory.createNewTaskInstance(eventTask, event)); 
     208        } 
    130209    } 
    131210 
     
    157236            (Level.INFO, "applying temporal relationship generation rules for detecting tasks"); 
    158237         
    159         ComponentManager.getTemporalRelationshipRuleManager().applyTaskDetectionRule(sessions); 
     238        ComponentManager.getTemporalRelationshipRuleManager().applyTaskDetectionRule 
     239            (sessions, minimalTaskEquality, minimumSequenceCoverage); 
    160240 
    161241        return taskFactory.createTaskModel(sessions); 
Note: See TracChangeset for help on using the changeset viewer.