use of org.obeonetwork.graal.Task in project InformationSystem by ObeoNetwork.
the class ActorUtils method getVisibleLinksToActorsFromTask.
/**
* Get the list of actors that should be visually connected to a task
* The list depends on inherited actors and already visible tasks on diagram
* @param task The task for which we want the actors list
* @param tasksOnDiagram List of visible tasks on diagram
* @return List of Actors
*/
private Collection<Actor> getVisibleLinksToActorsFromTask(Task task, final List<Task> tasksOnDiagram) {
if (task.getActors().isEmpty()) {
// Get using tasks that are displayed on diagram
List<Task> usingTasksOnDiagram = Lists.newArrayList(task.getUsedBy());
Iterables.retainAll(usingTasksOnDiagram, tasksOnDiagram);
// Filter the related actors to keep those not already associated with a displayed using task
List<Actor> relatedActors = Lists.newArrayList(task.getRelatedActors());
for (Task usingTask : usingTasksOnDiagram) {
if (!relatedActors.isEmpty()) {
Iterables.removeAll(relatedActors, usingTask.getRelatedActors());
} else {
break;
}
}
// we then have to display the whole actors list to prevent from misunderstanding
if (!relatedActors.isEmpty()) {
return task.getRelatedActors();
} else {
return Collections.emptyList();
}
} else {
return task.getActors();
}
}
use of org.obeonetwork.graal.Task in project InformationSystem by ObeoNetwork.
the class ActorUtils method getVisibleActors.
/**
* Returns the visible actors for a use case
* @param useCase
* @return
*/
public Set<Actor> getVisibleActors(UseCase useCase) {
HashMap<Task, Set<Actor>> cache = new HashMap<Task, Set<Actor>>();
Set<Actor> actors = new LinkedHashSet<Actor>();
List<Actor> actorsLeft = getAllActorsInContext(useCase);
for (AbstractTask abstractTask : useCase.getTasks()) {
actors.addAll(internalGetVisibleActors(abstractTask, cache, actorsLeft));
}
return actors;
}
use of org.obeonetwork.graal.Task in project InformationSystem by ObeoNetwork.
the class ActorUtils method internalGetVisibleActors.
/**
* Collect the visible actors for a task, using an internal cache
* @param abstractTask
* @param cache Map to store already calculated links between Tasks and Actors
* @param actorsLeft List of actors not yet in the final list (used to improve performance)
* @return
*/
private Set<Actor> internalGetVisibleActors(AbstractTask abstractTask, Map<Task, Set<Actor>> cache, List<Actor> actorsLeft) {
if (!actorsLeft.isEmpty()) {
if (abstractTask instanceof Task) {
Task task = (Task) abstractTask;
if (cache.containsKey(task)) {
return cache.get(task);
} else {
Set<Actor> actors = new LinkedHashSet<Actor>();
cache.put(task, actors);
if (task.getActors().isEmpty()) {
for (Task usingTask : task.getUsedBy()) {
if (!cache.containsKey(usingTask) && !actorsLeft.isEmpty()) {
actors.addAll(internalGetVisibleActors(usingTask, cache, actorsLeft));
}
}
} else {
actors.addAll(task.getActors());
actorsLeft.removeAll(actors);
}
cache.put(task, actors);
return actors;
}
} else if (abstractTask instanceof TasksGroup) {
Set<Actor> actors = new LinkedHashSet<Actor>();
TasksGroup group = (TasksGroup) abstractTask;
for (AbstractTask subTask : group.getTasks()) {
if (!actorsLeft.isEmpty()) {
actors.addAll(internalGetVisibleActors(subTask, cache, actorsLeft));
}
}
return actors;
}
}
return new LinkedHashSet<Actor>();
}
use of org.obeonetwork.graal.Task in project InformationSystem by ObeoNetwork.
the class ActorUtils method getVisibleActors.
/**
* Returns the visible actors for a system
* @param system
* @return
*/
public Set<Actor> getVisibleActors(System system) {
HashMap<Task, Set<Actor>> cache = new HashMap<Task, Set<Actor>>();
Set<Actor> actors = new LinkedHashSet<Actor>();
List<Actor> actorsLeft = getAllActorsInContext(system);
for (AbstractTask abstractTask : system.getTasks()) {
actors.addAll(internalGetVisibleActors(abstractTask, cache, actorsLeft));
}
return actors;
}
use of org.obeonetwork.graal.Task in project InformationSystem by ObeoNetwork.
the class TaskUtils method candidatesExpresssionForExistingTask.
/**
* Calculate the candidateExpression defines in creation tool Existing Tasks
* in Task Graph.
*
* @param context
* the context of call
* @param diagram
* the representation
* @return list of existing Tasks
*/
public List<AbstractTask> candidatesExpresssionForExistingTask(EObject context, DSemanticDiagram diagram) {
TreeIterator<EObject> eAllContents = getSystem(context).eAllContents();
List<AbstractTask> abstractTasks = new ArrayList<AbstractTask>();
while (eAllContents.hasNext()) {
EObject element = eAllContents.next();
if (element instanceof AbstractTask) {
abstractTasks.add((AbstractTask) element);
}
}
List<Task> tasksDiagram = new ArrayList<Task>();
List<EObject> eContents = diagram.getTarget().eContents();
for (EObject obj : eContents) {
if (obj instanceof Task) {
tasksDiagram.add((Task) obj);
}
}
abstractTasks.removeAll(tasksDiagram);
abstractTasks.remove(context);
return abstractTasks;
}
Aggregations