use of org.olat.repository.model.RepositoryEntryLifecycle in project openolat by klemens.
the class ReminderRuleEngineTest method afterEndDate.
@Test
public void afterEndDate() {
// create a course with 3 members
Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("after-end-1");
Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("after-end-2");
Identity id3 = JunitTestHelper.createAndPersistIdentityAsRndUser("after-end-3");
ICourse course = CoursesWebService.createEmptyCourse(null, "initial-launch-dates", "course long name", null);
RepositoryEntry re = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
Calendar cal = Calendar.getInstance();
// now
cal.setTime(new Date());
cal.add(Calendar.DATE, -25);
Date validFrom = cal.getTime();
// - 3weeks
cal.add(Calendar.DATE, 4);
Date validTo = cal.getTime();
RepositoryEntryLifecycle cycle = lifecycleDao.create("Cycle 2", "Cycle soft 2", false, validFrom, validTo);
re = repositoryManager.setDescriptionAndName(re, null, null, null, null, null, null, null, cycle);
repositoryEntryRelationDao.addRole(id1, re, GroupRoles.owner.name());
repositoryEntryRelationDao.addRole(id2, re, GroupRoles.coach.name());
repositoryEntryRelationDao.addRole(id3, re, GroupRoles.participant.name());
dbInstance.commit();
{
// check after 2 days
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(2, LaunchUnit.day);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertTrue(match);
}
{
// check after 7 days (between begin and and date)
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(7, LaunchUnit.day);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertTrue(match);
}
{
// check after 2 week s
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(1, LaunchUnit.week);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertTrue(match);
}
{
// check after 21 days
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(21, LaunchUnit.day);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertTrue(match);
}
{
// check after 3 weeks
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(3, LaunchUnit.week);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertTrue(match);
}
{
// check after 22 days
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(22, LaunchUnit.day);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertFalse(match);
}
{
// check after 4 weeks
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(4, LaunchUnit.week);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertFalse(match);
}
{
// check after 1 month
List<ReminderRule> rules = getRepositoryEntryLifecycleRuleValidToRule(1, LaunchUnit.month);
boolean match = ruleEngine.evaluateRepositoryEntryRule(re, rules);
Assert.assertFalse(match);
}
}
use of org.olat.repository.model.RepositoryEntryLifecycle in project openolat by klemens.
the class RepositoryEntryLifecycleDAOTest method getLifeCycle.
@Test
public void getLifeCycle() {
String label = "My second life cycle";
String softKey = UUID.randomUUID().toString();
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, -1);
Date from = cal.getTime();
cal.add(Calendar.DATE, +2);
Date to = cal.getTime();
RepositoryEntryLifecycle relf = reLifeCycleDao.create(label, softKey, true, from, to);
dbInstance.commitAndCloseSession();
Assert.assertNotNull(relf);
Assert.assertNotNull(relf.getKey());
// check
RepositoryEntryLifecycle loadedLifeCycle = reLifeCycleDao.loadById(relf.getKey());
Assert.assertNotNull(loadedLifeCycle);
Assert.assertNotNull(loadedLifeCycle.getCreationDate());
Assert.assertNotNull(loadedLifeCycle.getLastModified());
Assert.assertEquals(relf.getKey(), loadedLifeCycle.getKey());
Assert.assertEquals("My second life cycle", loadedLifeCycle.getLabel());
Assert.assertEquals(softKey, loadedLifeCycle.getSoftKey());
Assert.assertTrue(loadedLifeCycle.isPrivateCycle());
Assert.assertNotNull(loadedLifeCycle.getValidFrom());
Assert.assertNotNull(loadedLifeCycle.getValidTo());
}
use of org.olat.repository.model.RepositoryEntryLifecycle in project openolat by klemens.
the class RepositoryEntryLifecycleTest method testGetEntries.
@Test
public void testGetEntries() throws IOException, URISyntaxException {
// create a public life cycle
RepositoryEntryLifecycle reLifeCycle = reLifeCycleDao.create("REST life cycle", "Unique", false, null, null);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DATE, -2);
Date from = cal.getTime();
cal.add(Calendar.DATE, 5);
Date to = cal.getTime();
RepositoryEntryLifecycle limitLifeCycle = reLifeCycleDao.create("REST life cycle", "Unique", false, from, to);
dbInstance.commitAndCloseSession();
// retrieve the public life cycles
RestConnection conn = new RestConnection();
assertTrue(conn.login("administrator", "openolat"));
URI request = UriBuilder.fromUri(getContextURI()).path("repo/lifecycle").build();
HttpGet method = conn.createGet(request, MediaType.APPLICATION_JSON, true);
HttpResponse response = conn.execute(method);
assertEquals(200, response.getStatusLine().getStatusCode());
InputStream body = response.getEntity().getContent();
List<RepositoryEntryLifecycleVO> entryVoes = parseRepoArray(body);
assertNotNull(entryVoes);
int found = 0;
for (RepositoryEntryLifecycleVO entryVo : entryVoes) {
if (reLifeCycle.getKey().equals(entryVo.getKey())) {
found++;
} else if (limitLifeCycle.getKey().equals(entryVo.getKey())) {
found++;
}
}
conn.shutdown();
Assert.assertEquals(2, found);
}
use of org.olat.repository.model.RepositoryEntryLifecycle in project openolat by klemens.
the class RepositoryManager method setDescriptionAndName.
/**
* The method updates empty and null values!
* @param re
* @param displayName
* @param externalRef
* @param authors
* @param description
* @param objectives
* @param requirements
* @param credits
* @param mainLanguage
* @param expenditureOfWork
* @param cycle
* @return
*/
public RepositoryEntry setDescriptionAndName(final RepositoryEntry re, String displayName, String externalRef, String authors, String description, String objectives, String requirements, String credits, String mainLanguage, String location, String expenditureOfWork, RepositoryEntryLifecycle cycle) {
RepositoryEntry reloadedRe = repositoryEntryDao.loadForUpdate(re);
if (reloadedRe == null) {
return null;
}
reloadedRe.setDisplayname(displayName);
reloadedRe.setAuthors(authors);
reloadedRe.setDescription(description);
reloadedRe.setExternalRef(externalRef);
reloadedRe.setObjectives(objectives);
reloadedRe.setRequirements(requirements);
reloadedRe.setCredits(credits);
reloadedRe.setMainLanguage(mainLanguage);
reloadedRe.setExpenditureOfWork(expenditureOfWork);
reloadedRe.setLocation(location);
RepositoryEntryLifecycle cycleToDelete = null;
RepositoryEntryLifecycle currentCycle = reloadedRe.getLifecycle();
if (currentCycle != null) {
// currently, it's a private cycle
if (currentCycle.isPrivateCycle()) {
// the new one is none or public, remove the private cycle
if (cycle == null || !cycle.isPrivateCycle()) {
cycleToDelete = currentCycle;
}
}
}
reloadedRe.setLifecycle(cycle);
reloadedRe.setLastModified(new Date());
RepositoryEntry updatedRe = dbInstance.getCurrentEntityManager().merge(reloadedRe);
if (cycleToDelete != null) {
dbInstance.getCurrentEntityManager().remove(cycleToDelete);
}
// fetch the values
updatedRe.getStatistics().getLaunchCounter();
if (updatedRe.getLifecycle() != null) {
updatedRe.getLifecycle().getCreationDate();
}
dbInstance.commit();
lifeIndexer.indexDocument(RepositoryEntryDocument.TYPE, updatedRe.getKey());
autoAccessManager.grantAccess(updatedRe);
return updatedRe;
}
use of org.olat.repository.model.RepositoryEntryLifecycle in project openolat by klemens.
the class RepositoryEditDescriptionController method initForm.
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormContextHelp("Info Page: Add Meta Data");
formLayout.setElementCssClass("o_sel_edit_repositoryentry");
String id = repositoryEntry.getResourceableId() == null ? "-" : repositoryEntry.getResourceableId().toString();
uifactory.addStaticTextElement("cif.id", id, formLayout);
String externalId = repositoryEntry.getExternalId();
if (StringHelper.containsNonWhitespace(externalId)) {
uifactory.addStaticTextElement("cif.externalid", externalId, formLayout);
}
String extRef = repositoryEntry.getExternalRef();
if (StringHelper.containsNonWhitespace(repositoryEntry.getManagedFlagsString())) {
if (StringHelper.containsNonWhitespace(extRef)) {
uifactory.addStaticTextElement("cif.externalref", extRef, formLayout);
}
} else {
externalRef = uifactory.addTextElement("cif.externalref", "cif.externalref", 100, extRef, formLayout);
externalRef.setHelpText(translate("cif.externalref.hover"));
externalRef.setHelpUrlForManualPage("Info Page#_identification");
externalRef.setDisplaySize(30);
}
String initalAuthor = repositoryEntry.getInitialAuthor() == null ? "-" : repositoryEntry.getInitialAuthor();
if (repositoryEntry.getInitialAuthor() != null) {
initalAuthor = userManager.getUserDisplayName(initalAuthor);
}
initalAuthor = StringHelper.escapeHtml(initalAuthor);
uifactory.addStaticTextElement("cif.initialAuthor", initalAuthor, formLayout);
// Add resource type
String typeName = null;
OLATResource res = repositoryEntry.getOlatResource();
if (res != null) {
typeName = res.getResourceableTypeName();
}
String typeDisplay;
if (typeName != null) {
// add image and typename code
typeDisplay = NewControllerFactory.translateResourceableTypeName(typeName, getLocale());
} else {
typeDisplay = translate("cif.type.na");
}
uifactory.addStaticTextElement("cif.type", typeDisplay, formLayout);
uifactory.addSpacerElement("spacer1", formLayout, false);
displayName = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, repositoryEntry.getDisplayname(), formLayout);
displayName.setDisplaySize(30);
displayName.setMandatory(true);
displayName.setEnabled(!RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.title));
authors = uifactory.addTextElement("cif.authors", "cif.authors", 255, repositoryEntry.getAuthors(), formLayout);
authors.setDisplaySize(60);
if (licenseModule.isEnabled(licenseHandler)) {
license = licenseService.loadOrCreateLicense(res);
LicenseSelectionConfig licenseSelectionConfig = LicenseUIFactory.createLicenseSelectionConfig(licenseHandler, license.getLicenseType());
licenseEl = uifactory.addDropdownSingleselect("cif.license", formLayout, licenseSelectionConfig.getLicenseTypeKeys(), licenseSelectionConfig.getLicenseTypeValues(getLocale()));
licenseEl.setElementCssClass("o_sel_repo_license");
licenseEl.setMandatory(licenseSelectionConfig.isLicenseMandatory());
if (licenseSelectionConfig.getSelectionLicenseTypeKey() != null) {
licenseEl.select(licenseSelectionConfig.getSelectionLicenseTypeKey(), true);
}
licenseEl.addActionListener(FormEvent.ONCHANGE);
licensorEl = uifactory.addTextElement("cif.licensor", 1000, license.getLicensor(), formLayout);
String freetext = licenseService.isFreetext(license.getLicenseType()) ? license.getFreetext() : "";
licenseFreetextEl = uifactory.addTextAreaElement("cif.freetext", 4, 72, freetext, formLayout);
LicenseUIFactory.updateVisibility(licenseEl, licensorEl, licenseFreetextEl);
}
language = uifactory.addTextElement("cif.mainLanguage", "cif.mainLanguage", 16, repositoryEntry.getMainLanguage(), formLayout);
location = uifactory.addTextElement("cif.location", "cif.location", 255, repositoryEntry.getLocation(), formLayout);
location.setEnabled(!RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.location));
RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(repositoryEntry);
mediaContainer = handler.getMediaContainer(repositoryEntry);
if (mediaContainer != null && mediaContainer.getName().equals("media")) {
mediaContainer = mediaContainer.getParentContainer();
mediaContainer.setDefaultItemFilter(new MediaContainerFilter(mediaContainer));
}
String desc = (repositoryEntry.getDescription() != null ? repositoryEntry.getDescription() : " ");
description = uifactory.addRichTextElementForStringData("cif.description", "cif.description", desc, 10, -1, false, mediaContainer, null, formLayout, ureq.getUserSession(), getWindowControl());
description.setEnabled(!RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.description));
description.getEditorConfiguration().setFileBrowserUploadRelPath("media");
uifactory.addSpacerElement("spacer2", formLayout, false);
if (CourseModule.getCourseTypeName().equals(repoEntryType)) {
String[] dateValues = new String[] { translate("cif.dates.none"), translate("cif.dates.private"), translate("cif.dates.public") };
dateTypesEl = uifactory.addRadiosVertical("cif.dates", formLayout, dateKeys, dateValues);
dateTypesEl.setElementCssClass("o_sel_repo_lifecycle_type");
if (repositoryEntry.getLifecycle() == null) {
dateTypesEl.select("none", true);
} else if (repositoryEntry.getLifecycle().isPrivateCycle()) {
dateTypesEl.select("private", true);
} else {
dateTypesEl.select("public", true);
}
dateTypesEl.addActionListener(FormEvent.ONCHANGE);
List<RepositoryEntryLifecycle> cycles = lifecycleDao.loadPublicLifecycle();
List<RepositoryEntryLifecycle> filteredCycles = new ArrayList<>();
// just make the upcomming and acutual running cycles or the pre-selected visible in the UI
LocalDateTime now = LocalDateTime.now();
for (RepositoryEntryLifecycle cycle : cycles) {
if (cycle.getValidTo() == null || now.isBefore(LocalDateTime.ofInstant(cycle.getValidTo().toInstant(), ZoneId.systemDefault())) || (repositoryEntry.getLifecycle() != null && repositoryEntry.getLifecycle().equals(cycle))) {
filteredCycles.add(cycle);
}
}
String[] publicKeys = new String[filteredCycles.size()];
String[] publicValues = new String[filteredCycles.size()];
int count = 0;
for (RepositoryEntryLifecycle cycle : filteredCycles) {
publicKeys[count] = cycle.getKey().toString();
StringBuilder sb = new StringBuilder(32);
boolean labelAvailable = StringHelper.containsNonWhitespace(cycle.getLabel());
if (labelAvailable) {
sb.append(cycle.getLabel());
}
if (StringHelper.containsNonWhitespace(cycle.getSoftKey())) {
if (labelAvailable)
sb.append(" - ");
sb.append(cycle.getSoftKey());
}
publicValues[count++] = sb.toString();
}
publicDatesEl = uifactory.addDropdownSingleselect("cif.public.dates", formLayout, publicKeys, publicValues, null);
String privateDatePage = velocity_root + "/cycle_dates.html";
privateDatesCont = FormLayoutContainer.createCustomFormLayout("private.date", getTranslator(), privateDatePage);
privateDatesCont.setRootForm(mainForm);
privateDatesCont.setLabel("cif.private.dates", null);
formLayout.add("private.date", privateDatesCont);
startDateEl = uifactory.addDateChooser("date.start", "cif.date.start", null, privateDatesCont);
startDateEl.setElementCssClass("o_sel_repo_lifecycle_validfrom");
endDateEl = uifactory.addDateChooser("date.end", "cif.date.end", null, privateDatesCont);
endDateEl.setElementCssClass("o_sel_repo_lifecycle_validto");
if (repositoryEntry.getLifecycle() != null) {
RepositoryEntryLifecycle lifecycle = repositoryEntry.getLifecycle();
if (lifecycle.isPrivateCycle()) {
startDateEl.setDate(lifecycle.getValidFrom());
endDateEl.setDate(lifecycle.getValidTo());
} else {
String key = lifecycle.getKey().toString();
for (String publicKey : publicKeys) {
if (key.equals(publicKey)) {
publicDatesEl.select(key, true);
break;
}
}
}
}
updateDatesVisibility();
uifactory.addSpacerElement("spacer3", formLayout, false);
expenditureOfWork = uifactory.addTextElement("cif.expenditureOfWork", "cif.expenditureOfWork", 100, repositoryEntry.getExpenditureOfWork(), formLayout);
expenditureOfWork.setExampleKey("details.expenditureOfWork.example", null);
String obj = (repositoryEntry.getObjectives() != null ? repositoryEntry.getObjectives() : " ");
objectives = uifactory.addRichTextElementForStringData("cif.objectives", "cif.objectives", obj, 10, -1, false, mediaContainer, null, formLayout, ureq.getUserSession(), getWindowControl());
objectives.setEnabled(!RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.objectives));
objectives.getEditorConfiguration().setFileBrowserUploadRelPath("media");
String req = (repositoryEntry.getRequirements() != null ? repositoryEntry.getRequirements() : " ");
requirements = uifactory.addRichTextElementForStringData("cif.requirements", "cif.requirements", req, 10, -1, false, mediaContainer, null, formLayout, ureq.getUserSession(), getWindowControl());
requirements.setEnabled(!RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.requirements));
requirements.getEditorConfiguration().setFileBrowserUploadRelPath("media");
requirements.setMaxLength(2000);
String cred = (repositoryEntry.getCredits() != null ? repositoryEntry.getCredits() : " ");
credits = uifactory.addRichTextElementForStringData("cif.credits", "cif.credits", cred, 10, -1, false, mediaContainer, null, formLayout, ureq.getUserSession(), getWindowControl());
credits.setEnabled(!RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.credits));
credits.getEditorConfiguration().setFileBrowserUploadRelPath("media");
credits.setMaxLength(2000);
uifactory.addSpacerElement("spacer4", formLayout, false);
}
boolean managed = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.details);
VFSLeaf img = repositoryManager.getImage(repositoryEntry);
fileUpload = uifactory.addFileElement(getWindowControl(), "rentry.pic", "rentry.pic", formLayout);
fileUpload.setExampleKey("rentry.pic.example", new String[] { RepositoryManager.PICTURE_WIDTH + "x" + (RepositoryManager.PICTURE_HEIGHT) });
fileUpload.setMaxUploadSizeKB(picUploadlimitKB, null, null);
fileUpload.setPreview(ureq.getUserSession(), true);
fileUpload.addActionListener(FormEvent.ONCHANGE);
fileUpload.setDeleteEnabled(!managed);
if (img instanceof LocalFileImpl) {
fileUpload.setPreview(ureq.getUserSession(), true);
fileUpload.setInitialFile(((LocalFileImpl) img).getBasefile());
}
fileUpload.setVisible(!managed);
fileUpload.limitToMimeType(imageMimeTypes, "cif.error.mimetype", new String[] { imageMimeTypes.toString() });
VFSLeaf movie = repositoryService.getIntroductionMovie(repositoryEntry);
movieUpload = uifactory.addFileElement(getWindowControl(), "rentry.movie", "rentry.movie", formLayout);
movieUpload.setExampleKey("rentry.movie.example", new String[] { "3:2" });
movieUpload.setMaxUploadSizeKB(movieUploadlimitKB, null, null);
movieUpload.setPreview(ureq.getUserSession(), true);
movieUpload.addActionListener(FormEvent.ONCHANGE);
movieUpload.setDeleteEnabled(!managed);
if (movie instanceof LocalFileImpl) {
movieUpload.setPreview(ureq.getUserSession(), true);
movieUpload.setInitialFile(((LocalFileImpl) movie).getBasefile());
}
movieUpload.setVisible(!managed);
FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttonContainer", getTranslator());
formLayout.add("buttonContainer", buttonContainer);
buttonContainer.setElementCssClass("o_sel_repo_save_details");
submit = uifactory.addFormSubmitButton("submit", buttonContainer);
submit.setVisible(!managed);
uifactory.addFormCancelButton("cancel", buttonContainer, ureq, getWindowControl());
}
Aggregations