Something went wrong on our end
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CurriculumService.java 17.07 KiB
/**
* <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.modules.curriculum;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.olat.basesecurity.IdentityRef;
import org.olat.core.id.Identity;
import org.olat.core.id.Organisation;
import org.olat.core.id.Roles;
import org.olat.modules.curriculum.model.CurriculumCopySettings;
import org.olat.modules.curriculum.model.CurriculumElementInfos;
import org.olat.modules.curriculum.model.CurriculumElementMembershipChange;
import org.olat.modules.curriculum.model.CurriculumElementRepositoryEntryViews;
import org.olat.modules.curriculum.model.CurriculumElementSearchInfos;
import org.olat.modules.curriculum.model.CurriculumElementSearchParams;
import org.olat.modules.curriculum.model.CurriculumElementWebDAVInfos;
import org.olat.modules.curriculum.model.CurriculumInfos;
import org.olat.modules.curriculum.model.CurriculumMember;
import org.olat.modules.curriculum.model.CurriculumSearchParameters;
import org.olat.modules.curriculum.model.SearchMemberParameters;
import org.olat.modules.taxonomy.TaxonomyLevel;
import org.olat.modules.taxonomy.TaxonomyLevelRef;
import org.olat.repository.RepositoryEntry;
import org.olat.repository.RepositoryEntryRef;
/**
*
* Initial date: 9 févr. 2018<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public interface CurriculumService {
/**
* Create and persist a curriculum.
*
* @param identifier The identifier
* @param displayName The name
* @param description The description
* @param organisation The organisation
* @return A persisted curriculum
*/
public Curriculum createCurriculum(String identifier, String displayName, String description, Organisation organisation);
public Curriculum getCurriculum(CurriculumRef ref);
public Curriculum updateCurriculum(Curriculum curriculum);
public List<Curriculum> getCurriculums(Collection<? extends CurriculumRef> refs);
public List<Curriculum> getCurriculums(CurriculumSearchParameters params);
public List<CurriculumInfos> getCurriculumsWithInfos(CurriculumSearchParameters params);
/**
* The list of curriculums the identity participates.
*
* @param identity The identity
* @return A list of curriculums
*/
public List<Curriculum> getMyCurriculums(Identity identity);
/**
* The list of curriculums the identity participates.
*
* @param identity The identity
* @return A list of curriculums
*/
public List<CurriculumRef> getMyActiveCurriculumRefs(Identity identity);
/**
* Get the list of members of the specified curriculum with their roles.
*
* @param curriculum The curriculum
* @return A list of memberships
*/
public List<CurriculumMember> getMembers(CurriculumRef curriculum, SearchMemberParameters params);
/**
* Get the list of members of the specified curriculum with the specified
* role.
*
* @param curriculum The curriculum
* @param role The role (mandatory)
* @return A list of identities
*/
public List<Identity> getMembersIdentity(CurriculumRef curriculum, CurriculumRoles role);
/**
* Get the list of members with the specified role in the list of curriculum
* elements.
*
* @param curriculumElementKeys A list of curriculum element keys
* @param role The role (mandatory)
* @return A list of identities
*/
public List<Identity> getMembersIdentity(List<Long> curriculumElementKeys, CurriculumRoles role);
/**
*
* @return
*/
public boolean hasRoleExpanded(CurriculumRef curriculum, IdentityRef identity, String... role);
/**
* @param identity The identity
* @return true if the identity is manager of at least one curriculum
*/
public boolean isCurriculumManager(IdentityRef identity);
/**
* @param identity The identity
* @return true if the identity is manager of at least one curriculum or
* is course owner of a course in a curriculum.
*/
public boolean isCurriculumManagerOrOwner(IdentityRef identity);
/**
* Add a member to the curriculum with the specified role.
*
* @param curriculum The curriculum
* @param identity The identity which member
* @param role The role
*/
public void addMember(Curriculum curriculum, Identity identity, CurriculumRoles role);
/**
* Remove a member of the curriculum with the specified role.
*
* @param curriculum The curriculum
* @param identity The identity which loose its membership
* @param role The role
*/
public void removeMember(Curriculum curriculum, IdentityRef member, CurriculumRoles role);
/**
* Remove all memberships of the curriculum for the specified member.
* The method doesn't propagate to the elements of the curriculum.
*
* @param curriculum The curriculum
* @param member The identity which loose its memberships
*/
public void removeMember(Curriculum curriculum, IdentityRef member);
/**
* The list of all types available.
*
* @return A list of curriculum element types
*/
public List<CurriculumElementType> getCurriculumElementTypes();
/**
* Load the curriculum element type with the specified primary key.
*
* @param ref The reference of the type
* @return A curriculum element type
*/
public CurriculumElementType getCurriculumElementType(CurriculumElementTypeRef typeRef);
public CurriculumElementType createCurriculumElementType(String identifier, String displayName, String description, String externalId);
/**
* Update only the curriculum element type with the allowed sub-types.
*
* @param elementType The curriculum element type to update
* @return The merged curriculum element type
*/
public CurriculumElementType updateCurriculumElementType(CurriculumElementType elementType);
/**
* Update only the curriculum element type and the relations to the allowed sub-types.
*
* @param elementType The curriculum element type to updates
* @param allowedSubTypes The allowed sub-types
* @return A merged curriculum element type
*/
public CurriculumElementType updateCurriculumElementType(CurriculumElementType elementType, List<CurriculumElementType> allowedSubTypes);
/**
* Add a sub-type in the list of allowed sub-types of the specified
* curriculum element type.
*
* @param parentType The parent curriculum element type
* @param allowedSubType The sub-type to allow
*/
public void allowCurriculumElementSubType(CurriculumElementType parentType, CurriculumElementType allowedSubType);
/**
* Remove a sub-type of the list of allowed sub-types in the specified
* curriculum element type.
*
* @param parentType The parent curriculum element type
* @param allowedSubType The sub-type to remove
*/
public void disallowCurriculumElementSubType(CurriculumElementType parentType, CurriculumElementType disallowedSubType);
public CurriculumElementType cloneCurriculumElementType(CurriculumElementTypeRef typeRef);
public boolean deleteCurriculumElementType(CurriculumElementTypeRef typeRef);
public CurriculumElement createCurriculumElement(String identifier, String displayName,
CurriculumElementStatus status, Date beginDate, Date endDate,
CurriculumElementRef parent, CurriculumElementType elementType, CurriculumCalendars calendars,
CurriculumLectures lectures, Curriculum curriculum);
/**
*
* @param curriculum The curriculum of the cloned element
* @param parentElement The parent element for the new clone
* @param elementToClone The element to clone
* @param settings The settings to clone elements
* @return The root element
*/
public CurriculumElement cloneCurriculumElement(Curriculum curriculum, CurriculumElement parentElement,
CurriculumElement elementToClone, CurriculumCopySettings settings, Identity identity);
public CurriculumElement getCurriculumElement(CurriculumElementRef element);
public List<CurriculumElement> getCurriculumElements(Collection<? extends CurriculumElementRef> elementRefs);
public void deleteCurriculumElement(CurriculumElementRef element);
/**
* Return all the elements of a curriculum, but flat.
*
* @param curriculum The curriculum
* @param status List of status (mandatory)
* @return A list of curriculum elements
*/
public List<CurriculumElement> getCurriculumElements(CurriculumRef curriculum, CurriculumElementStatus[] status);
public List<CurriculumElement> getCurriculumElementsByCurriculums(Collection<? extends CurriculumRef> curriculumRefs);
/**
* Return all the elements of a curriculum, flat, with additional informations
* like the number of resources linked to the elements. List element in state
* active and inactive.
*
* @param curriculum The curriculum
* @return A list of curriculum elements with additional informations
*/
public List<CurriculumElementInfos> getCurriculumElementsWithInfos(CurriculumRef curriculum);
/**
* Retrieve the children elements of the specified curriculum element. The method
* returns all the children, inclusive the elements marked as deleted.
*
* @param parentElement The parent element
* @return A list of curriculum elements
*/
public List<CurriculumElement> getCurriculumElements(CurriculumElementRef parentElement);
/**
* Return all the curriculum elements linked to the specified repository entry.
* The method fetch the curriculums and organizations associated with elements.
*
* @param entry A repository entry
* @return A list of curriculum elements
*/
public List<CurriculumElement> getCurriculumElements(RepositoryEntry entry);
/**
* Return the curriculum elements linked to the specified repository entry and a
* the specified identity.
*
* @param entry
* @param identity
* @param roles Restrict to this roles. If roles is null or empty, no restriction is active.
* @return
*/
public List<CurriculumElement> getCurriculumElements(RepositoryEntryRef entry, Identity identity,
Collection<CurriculumRoles> roles);
/**
* Search curriculum elements in all curriculums. The search is an exact match (think about Syncher).
*
* @param externalId The external id (optional)
* @param identifier The identifier (optional)
* @param key The primary (optional)
* @return A list of curriculum elements
*/
public List<CurriculumElement> searchCurriculumElements(String externalId, String identifier, Long key);
/**
*
* @param params
* @return A list of curriculum elements
*/
public List<CurriculumElementSearchInfos> searchCurriculumElements(CurriculumElementSearchParams params);
/**
* Return the parent line of the specified curriculum element.
*
* @param element A curriculum element
* @return A list of curriculum elements
*/
public List<CurriculumElement> getCurriculumElementParentLine(CurriculumElement element);
public CurriculumElement updateCurriculumElement(CurriculumElement element);
/**
*
* @param elementToMove The element to move
* @param newParent The new parent or null if root
* @param siblingBefore The sibling before the new position or null if at the first place
*/
public CurriculumElement moveCurriculumElement(CurriculumElement elementToMove, CurriculumElement newParent, CurriculumElement siblingBefore);
/**
* Move a root curriculum element from a curriculum to an other. This operation
* is committed asap.
*
* @param rootElement The curriculum element (must be a root one)
* @param curriculum The target curriculum
* @return The update element
*/
public CurriculumElement moveCurriculumElement(CurriculumElement rootElement, Curriculum curriculum);
/**
* The list of members of the specified curriculum element.
*
* @param element The curriculum element
* @return The list of memberships
*/
public List<CurriculumMember> getMembers(CurriculumElement element, SearchMemberParameters params);
/**
* The list of members of the specified curriculum element with the specified role.
*
* @param element The curriculum element
* @param role The role
* @return The list of memberships
*/
public List<Identity> getMembersIdentity(CurriculumElementRef element, CurriculumRoles role);
public List<CurriculumElementMembership> getCurriculumElementMemberships(Collection<CurriculumElement> elements, Identity... identities);
public void updateCurriculumElementMemberships(Identity doer, Roles roles, List<CurriculumElementMembershipChange> changes);
/**
* Add a member with the specified role to the curriculum element. The
* inheritance mode of the membership is per default "none".
*
* @param element The curriculum element
* @param member The identity to make a member of
* @param role The role of the member
*/
public void addMember(CurriculumElement element, Identity member, CurriculumRoles role);
/**
* Remove a member of the curriculum element and discard all its roles.
*
* @param element The curriculum element
* @param member The identity to remove
*/
public void removeMember(CurriculumElement element, IdentityRef member);
/**
* Remove the membership of a user with the specified role.
*
* @param element The curriculum element
* @param member The identity which loose the membership
* @param role The role
*/
public void removeMember(CurriculumElement element, IdentityRef member, CurriculumRoles role);
/**
* Remove the members of the curriculum elements linked to the repository entry.<br>
* The method respect the managed flags!
*
* @param entry The repository entry
* @param members The memberss
*/
public void removeMembers(CurriculumElement element, List<Identity> members, boolean overrideManaged);
/**
* The all list of repository entries hold by the specified curriculum element.
*
* @param element The curriculum element
* @return A list of repository entries
*/
public List<RepositoryEntry> getRepositoryEntries(CurriculumElementRef element);
/**
* The all list of repository entries hold by the specified curriculum element and
* its descendants elements.
*
* @param element The curriculum element
* @return A list of repository entries
*/
public List<RepositoryEntry> getRepositoryEntriesWithDescendants(CurriculumElement element);
/**
* The all list of repository entries hold by the specified curriculum element and
* its descendants elements, reduced to the
*
* @param element The curriculum element
* @param identity Specify the identity to check the permissions of the repository entries
* @return A list of repository entries with lectures enabled
*/
public List<RepositoryEntry> getRepositoryEntriesWithLecturesAndDescendants(CurriculumElement element, Identity identity);
/**
* Check if the repository entry is already in relation with the specified
* curriculum element.
*
* @param element The curriculum element
* @param entry The repository entry
* @return True if the repository entry and curriculum element share a group
*/
public boolean hasRepositoryEntry(CurriculumElement element, RepositoryEntryRef entry);
/**
* This will add a relation between the curriculum element and the repository
* entry and it will add the base group of the curriculum to the set of groups
* of the repository entry.
*
*
* @param element The curriculum element
* @param entry The repository entry
* @param master If the relation is the master one
*/
public void addRepositoryEntry(CurriculumElement element, RepositoryEntryRef entry, boolean master);
public void removeRepositoryEntry(CurriculumElement element, RepositoryEntryRef entry);
/**
* Remove the repository entry from all the curriculum elements.
*
* @param entry
*/
public void removeRepositoryEntry(RepositoryEntry entry);
/**
* The list of taxonomy levels of the curriculum element.
*
* @param element The curriculum element
* @return A list of taxonomy levels
*/
public List<TaxonomyLevel> getTaxonomy(CurriculumElement element);
public List<CurriculumElement> getCurriculumElements(TaxonomyLevelRef level);
/**
* Remove from the list the curriculum elements which are not manageable with the specified roles.
* @param elements A list of curriculum elements with the organization loaded
* @param roles The roles
* @return The list of curriculum elements which can be managed
*/
public List<CurriculumElement> filterElementsWithoutManagerRole(List<CurriculumElement> elements, Roles roles);
public List<CurriculumElementRepositoryEntryViews> getCurriculumElements(Identity identity, Roles roles, List<CurriculumRef> curriculum);
public List<CurriculumElementWebDAVInfos> getCurriculumElementInfosForWebDAV(IdentityRef identity);
}