/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.nodes.gta;
import java.io.File;
import java.util.List;
import org.olat.basesecurity.IdentityRef;
import org.olat.core.commons.services.notifications.PublisherData;
import org.olat.core.commons.services.notifications.SubscriptionContext;
import org.olat.core.id.Identity;
import org.olat.core.util.vfs.VFSContainer;
import org.olat.course.nodes.GTACourseNode;
import org.olat.course.nodes.gta.model.Membership;
import org.olat.course.nodes.gta.model.Solution;
import org.olat.course.nodes.gta.model.TaskDefinition;
import org.olat.course.nodes.gta.ui.events.SubmitEvent;
import org.olat.course.run.environment.CourseEnvironment;
import org.olat.group.BusinessGroup;
import org.olat.group.BusinessGroupRef;
import org.olat.modules.assessment.model.AssessmentEntryStatus;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryEntryRef;
import org.olat.resource.OLATResource;
/**
*
* Initial date: 24.02.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public interface GTAManager {
public static final String SOLUTIONS_DEFINITIONS = "solutionDefinitions.xml";
public static final String TASKS_DEFINITIONS = "taskDefinitions.xml";
public VFSContainer getTasksContainer(CourseEnvironment courseEnv, GTACourseNode cNode);
public File getTasksDirectory(CourseEnvironment courseEnv, GTACourseNode cNode);
/**
* Get (and eventually upgrade) the task definitions.
* @param courseEnv
* @param cNode
* @return
*/
public List<TaskDefinition> getTaskDefinitions(CourseEnvironment courseEnv, GTACourseNode cNode);
public void addTaskDefinition(TaskDefinition newTask, CourseEnvironment courseEnv, GTACourseNode cNode);
/**
*
* @param currentFilename the filename before the definition was updated
* @param task
* @param courseEnv
* @param cNode
*/
public void updateTaskDefinition(String currentFilename, TaskDefinition task, CourseEnvironment courseEnv, GTACourseNode cNode);
/**
* Remove the task definition and the file (if it's not used by an other task)
*
* @param removedTask The task definition to remove
* @param courseEnv The course environment
* @param cNode The course element
*/
public void removeTaskDefinition(TaskDefinition removedTask, CourseEnvironment courseEnv, GTACourseNode cNode);
public File getSubmitDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, IdentityRef person);
public File getSubmitDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, BusinessGroupRef assessedGroup);
public VFSContainer getSubmitContainer(CourseEnvironment courseEnv, GTACourseNode cNode, IdentityRef person);
public VFSContainer getSubmitContainer(CourseEnvironment courseEnv, GTACourseNode cNode, BusinessGroupRef group);
public File getCorrectionDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, IdentityRef person);
public VFSContainer getCorrectionContainer(CourseEnvironment courseEnv, GTACourseNode cNode, IdentityRef person);
public File getCorrectionDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, BusinessGroupRef group);
public VFSContainer getCorrectionContainer(CourseEnvironment courseEnv, GTACourseNode cNode, BusinessGroupRef group);
public File getRevisedDocumentsDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, IdentityRef person);
public VFSContainer getRevisedDocumentsContainer(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, IdentityRef person);
public File getRevisedDocumentsDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, BusinessGroupRef group);
public VFSContainer getRevisedDocumentsContainer(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, BusinessGroupRef group);
public File getRevisedDocumentsCorrectionsDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, IdentityRef person);
public VFSContainer getRevisedDocumentsCorrectionsContainer(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, IdentityRef person);
public File getRevisedDocumentsCorrectionsDirectory(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, BusinessGroupRef group);
public VFSContainer getRevisedDocumentsCorrectionsContainer(CourseEnvironment courseEnv, GTACourseNode cNode, int iteration, BusinessGroupRef group);
public File getSolutionsDirectory(CourseEnvironment courseEnv, GTACourseNode cNode);
public VFSContainer getSolutionsContainer(CourseEnvironment courseEnv, GTACourseNode cNode);
public List<Solution> getSolutions(CourseEnvironment courseEnv, GTACourseNode cNode);
public void addSolution(Solution newSolution, CourseEnvironment courseEnv, GTACourseNode cNode);
public void updateSolution(String currentFilename, Solution solution, CourseEnvironment courseEnv, GTACourseNode cNode);
public void removeSolution(Solution removedSolution, CourseEnvironment courseEnv, GTACourseNode cNode);
/**
* Create a subscription context.
* @param courseEnv The course environment
* @param cNode The course element
* @return The subscription context for this course and course element.
*/
public SubscriptionContext getSubscriptionContext(CourseEnvironment courseEnv, GTACourseNode cNode);
/**
* Create a subscription context.
* @param courseRes The course resource found in the repository entry
* @param cNode The course element
* @return The subscription context for this course and course element.
*/
public SubscriptionContext getSubscriptionContext(OLATResource courseRes, GTACourseNode cNode);
public PublisherData getPublisherData(CourseEnvironment courseEnv, GTACourseNode cNode);
/**
* Return the list of business groups configured in the course element
* following the areas.
*
* @param cNode
* @return
*/
public List<BusinessGroup> getBusinessGroups(GTACourseNode cNode);
/**
* The list of groups where the specified identity is participant.
*
* @param identity
* @param groupKeys
* @param areaKeys
* @return
*/
public List<BusinessGroup> getParticipatingBusinessGroups(IdentityRef identity, GTACourseNode gtaNode);
/**
* The list of groups where the specified identity is coach.
*
* @param identity
* @param groupKeys
* @param areaKeys
* @return
*/
public List<BusinessGroup> getCoachedBusinessGroups(IdentityRef identity, GTACourseNode gtaNode);
/**
* Filter the groups selected in the course element from the specified list.
*
* @param groups
* @param gtaNode
* @return
*/
public List<BusinessGroup> filterBusinessGroups(List<BusinessGroup> groups, GTACourseNode gtaNode);
/**
* Return a list of participants which are in several groups.
*
* @param gtaNode
* @return
*/
public List<IdentityRef> getDuplicatedMemberships(GTACourseNode gtaNode);
/**
* Are users already processing the tasks?
*
* @param entry
* @param gtaNode
* @return
*/
public boolean isTasksInProcess(RepositoryEntryRef entry, GTACourseNode gtaNode);
/**
* Convert the status of a task to the status used by the assessment tool.
* @param task
* @param cNode
* @return
*/
public AssessmentEntryStatus convertToAssessmentEntrystatus(Task task, GTACourseNode cNode);
/**
* Are users already processing this task?
*
* @param entry
* @param gtaNode
* @param taskName
* @return
*/
public boolean isTaskInProcess(RepositoryEntryRef entry, GTACourseNode gtaNode, String taskName);
/**
* Return the details, a string used by the assessment tool
* @return
*/
public String getDetails(Identity assessedIdentity, RepositoryEntryRef entry, GTACourseNode cNode);
public TaskList createIfNotExists(RepositoryEntry entry, GTACourseNode cNode);
public TaskList getTaskList(RepositoryEntryRef entry, GTACourseNode cNode);
public int updateTaskName(TaskList taskList, String currentTaskName, String newTaskName);
/**
* Delete the task list and the tasks of the specified course element of the course.
* @param entry The repository entry of the course
* @param cNode The course element
* @return
*/
public int deleteTaskList(RepositoryEntryRef entry, GTACourseNode cNode);
/**
* Delete all the task list and tasks of a course specified by its repository entry.
* @param entry
* @return
*/
public int deleteAllTaskLists(RepositoryEntryRef entry);
public Membership getMembership(IdentityRef identity, RepositoryEntryRef entry, GTACourseNode cNode);
public Task getTask(IdentityRef identity, TaskList taskList);
public Task getTask(BusinessGroupRef businessGroup, TaskList taskList);
public Task createTask(String taskName, TaskList taskList, TaskProcess status, BusinessGroup assessedGroup, Identity assessedIdentity, GTACourseNode cNode);
public Task nextStep(Task task, GTACourseNode cNode);
public List<Task> getTasks(TaskList taskList, GTACourseNode gtaNode);
public List<TaskLight> getTasksLight(RepositoryEntryRef entry, GTACourseNode gtaNode);
/**
* Return the tasks assigned to a person, individually or via a
* business group.
*
* @param identity
* @param cNode
* @return
*/
public List<Task> getTasks(IdentityRef identity, RepositoryEntryRef entry, GTACourseNode cNode);
public boolean isTaskAssigned(TaskList taskList, String taskName);
public List<String> getAssignedTasks(TaskList taskList);
public AssignmentResponse selectTask(Identity identity, TaskList taskList, GTACourseNode cNode, File task);
public AssignmentResponse selectTask(BusinessGroup group, TaskList taskList, GTACourseNode cNode, File task);
public AssignmentResponse assignTaskAutomatically(TaskList taskList, BusinessGroup assessedGroup, CourseEnvironment courseEnv, GTACourseNode cNode);
public AssignmentResponse assignTaskAutomatically(TaskList taskList, Identity assessedIdentity, CourseEnvironment courseEnv, GTACourseNode cNode);
public TaskProcess firstStep(GTACourseNode cNode);
public TaskProcess previousStep(TaskProcess currentStep, GTACourseNode cNode);
public TaskProcess nextStep(TaskProcess currentStep, GTACourseNode cNode);
public Task updateTask(Task task, TaskProcess newStatus, GTACourseNode cNode);
public Task updateTask(Task task, TaskProcess newStatus, int iteration, GTACourseNode cNode);
public void log(String step, String operation, Task assignedTask, Identity actor, Identity assessedIdentity, BusinessGroup assessedGroup,
CourseEnvironment courseEnv, GTACourseNode cNode);
public void log(String step, SubmitEvent event, Task assignedTask, Identity actor, Identity assessedIdentity, BusinessGroup assessedGroup,
CourseEnvironment courseEnv, GTACourseNode cNode);
}