use of org.olat.portfolio.model.structel.PortfolioStructureMap in project OpenOLAT by OpenOLAT.
the class EPMultipleMapController method initOrUpdateMaps.
/**
*/
private void initOrUpdateMaps(UserRequest ureq) {
if (isLogDebugEnabled()) {
start = System.currentTimeMillis();
logDebug("start loading map overview at : ", String.valueOf(start));
}
List<PortfolioStructure> allUsersStruct = getUsersStructsToDisplay();
userMaps = new ArrayList<PortfolioStructureMap>();
if (allUsersStruct.isEmpty()) {
vC.contextPut("noMaps", true);
return;
} else
vC.contextRemove("noMaps");
// remove forward link (maybe it's not needed (last page) )
if (forwardLink != null)
vC.remove(forwardLink);
// now add paging-components if necessary and wanted
int elementCount = ePFMgr.countStructureElementsFromOthers(getIdentity(), mapOwner, ElementType.DEFAULT_MAP);
if (pagingAvailable && elementCount > ITEMS_PER_PAGE) {
vC.contextPut("showPaging", true);
int additionalPage = ((elementCount % ITEMS_PER_PAGE) > 0) ? 1 : 0;
int pageCount = (elementCount / ITEMS_PER_PAGE) + additionalPage;
List<Component> pagingLinks = new ArrayList<Component>();
for (int i = 1; i < pageCount + 1; i++) {
Link pageLink = LinkFactory.createCustomLink(PAGING_LINK_PREFIX + i, "switchPage", String.valueOf(i), Link.NONTRANSLATED, vC, this);
pageLink.setUserObject(new Integer(i));
pagingLinks.add(pageLink);
if (i == currentPageNum) {
pageLink.setEnabled(false);
}
}
vC.contextPut("pageLinks", pagingLinks);
if (currentPageNum < pageCount) {
forwardLink = LinkFactory.createCustomLink("forwardLink", "pagingFWD", "table.forward", Link.LINK, vC, this);
forwardLink.setIconRightCSS("o_icon o_icon_next_page");
}
}
// now display the maps
List<String> artAmount = new ArrayList<String>(userMaps.size());
List<Integer> childAmount = new ArrayList<Integer>(userMaps.size());
List<String> mapStyles = new ArrayList<String>(userMaps.size());
List<Date> deadLines = new ArrayList<Date>(userMaps.size());
List<String> restriStats = new ArrayList<String>(userMaps.size());
List<String> owners = new ArrayList<String>(userMaps.size());
List<String> amounts = new ArrayList<String>(userMaps.size());
int i = 1;
for (PortfolioStructure portfolioStructure : allUsersStruct) {
if (portfolioStructure.getRoot() == null) {
// only show maps
PortfolioStructureMap map = (PortfolioStructureMap) portfolioStructure;
EPSecurityCallback secCallback = EPSecurityCallbackFactory.getSecurityCallback(ureq, map, ePFMgr);
userMaps.add(map);
Link vLink = LinkFactory.createCustomLink(VIEW_LINK_PREFIX + i, "viewMap" + map.getResourceableId(), "view.map", Link.LINK, vC, this);
vLink.setUserObject(map);
vLink.setElementCssClass("o_sel_ep_open_map");
vLink.setIconRightCSS("o_icon o_icon-fw o_icon_start");
// can always try to delete your own map, but exercise only if the course was deleted
// remove as update could require hiding it
vC.remove(vC.getComponent(DELETE_LINK_PREFIX + i));
// can always try to delete your own map, but exercise only if the course was deleted
final boolean myMaps = (option.equals(EPMapRunViewOption.MY_DEFAULTS_MAPS) || option.equals(EPMapRunViewOption.MY_EXERCISES_MAPS));
boolean addDeleteLink = myMaps;
if ((map instanceof EPStructuredMap) && (((EPStructuredMap) map).getReturnDate() != null)) {
// it's a portfolio-task that was already handed in, so do not display delete-link
addDeleteLink = false;
}
if (addDeleteLink) {
final Link dLink = LinkFactory.createCustomLink(DELETE_LINK_PREFIX + i, "delMap" + map.getResourceableId(), "delete.map", Link.LINK, vC, this);
dLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item");
dLink.setUserObject(map);
}
Link cLink = LinkFactory.createCustomLink(COPY_LINK_PREFIX + i, "copyMap" + map.getResourceableId(), "copy.map", Link.LINK, vC, this);
cLink.setIconLeftCSS("o_icon o_icon_copy");
cLink.setUserObject(map);
// its not allowed to copy maps from a portfolio-task
if (map instanceof EPStructuredMap) {
cLink.setVisible(false);
}
// remove as update could require hiding it
vC.remove(vC.getComponent(SHARE_LINK_PREFIX + i));
if (myMaps && secCallback.canShareMap()) {
Link shareLink = LinkFactory.createCustomLink(SHARE_LINK_PREFIX + i, "shareMap" + map.getResourceableId(), "map.share", Link.LINK, vC, this);
shareLink.setIconLeftCSS("o_icon o_icon-fw o_icon_share");
shareLink.setUserObject(map);
boolean shared = ePFMgr.isMapShared(map);
if (shared || (map instanceof EPStructuredMap && ((EPStructuredMap) map).getTargetResource() != null)) {
shareLink.setCustomDisplayText(translate("map.share.shared"));
}
}
if (isLogDebugEnabled()) {
logDebug(" in loop : got share state at: ", String.valueOf(System.currentTimeMillis()));
}
// get deadline + link to course
if (map instanceof EPStructuredMap) {
EPStructuredMap structMap = (EPStructuredMap) map;
Date deadLine = structMap.getDeadLine();
deadLines.add(deadLine);
EPTargetResource resource = structMap.getTargetResource();
RepositoryEntry repoEntry = RepositoryManager.getInstance().lookupRepositoryEntry(resource.getOLATResourceable(), false);
if (repoEntry != null) {
vC.contextPut("courseName" + i, StringHelper.escapeHtml(repoEntry.getDisplayname()));
String url = Settings.getServerContextPathURI();
url += "/url/RepositoryEntry/" + repoEntry.getKey() + "/CourseNode/" + resource.getSubPath();
vC.contextPut("courseLink" + i, url);
}
if (isLogDebugEnabled()) {
logDebug(" in loop : looked up course at : ", String.valueOf(System.currentTimeMillis()));
}
// get some stats about the restrictions if available
String[] stats = ePFMgr.getRestrictionStatisticsOfMap(structMap);
int toCollect = 0;
if (stats != null) {
try {
toCollect = Integer.parseInt(stats[1]) - Integer.parseInt(stats[0]);
} catch (Exception e) {
// do nothing
toCollect = 0;
}
}
if (toCollect != 0) {
restriStats.add(String.valueOf(toCollect));
} else {
restriStats.add(null);
}
if (isLogDebugEnabled()) {
logDebug(" in loop : calculated restriction statistics at : ", String.valueOf(System.currentTimeMillis()));
}
} else {
deadLines.add(null);
restriStats.add(null);
}
// show owner on shared maps
if (!secCallback.isOwner()) {
owners.add(ePFMgr.getAllOwnersAsString(map));
} else
owners.add(null);
String artCount = String.valueOf(ePFMgr.countArtefactsInMap(map));
artAmount.add(artCount);
Integer childs = ePFMgr.countStructureChildren(map);
childAmount.add(childs);
amounts.add(translate("map.contains", new String[] { childs.toString(), artCount }));
mapStyles.add(ePFMgr.getValidStyleName(map));
if (isLogDebugEnabled()) {
logDebug(" in loop : got map details (artefact-amount, child-struct-amount, style) at : ", String.valueOf(System.currentTimeMillis()));
}
i++;
}
}
vC.contextPut("owners", owners);
vC.contextPut("deadLines", deadLines);
vC.contextPut("restriStats", restriStats);
vC.contextPut("mapStyles", mapStyles);
vC.contextPut("childAmount", childAmount);
vC.contextPut("artefactAmount", artAmount);
vC.contextPut("amounts", amounts);
vC.contextPut("userMaps", userMaps);
if (isLogDebugEnabled()) {
long now = System.currentTimeMillis();
logDebug("finished processing all maps at : ", String.valueOf(now));
logDebug("Total processing time for " + (i - 1) + " maps was : ", String.valueOf(now - start));
}
}
use of org.olat.portfolio.model.structel.PortfolioStructureMap in project OpenOLAT by OpenOLAT.
the class EPMultipleMapController method event.
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
* org.olat.core.gui.components.Component,
* org.olat.core.gui.control.Event)
*/
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if (source instanceof Link) {
Link srcLink = (Link) source;
if (srcLink.getUserObject() instanceof PortfolioStructureMap) {
PortfolioStructureMap selMap = (PortfolioStructureMap) srcLink.getUserObject();
if (srcLink.getComponentName().startsWith(VIEW_LINK_PREFIX)) {
activateMap(ureq, selMap);
fireEvent(ureq, new EPMapEvent(EPStructureEvent.SELECT, selMap));
} else if (srcLink.getComponentName().startsWith(DELETE_LINK_PREFIX)) {
deleteMap(ureq, selMap);
} else if (srcLink.getComponentName().startsWith(COPY_LINK_PREFIX)) {
List<String> buttonLabels = new ArrayList<String>();
String introKey = "copy.map.intro";
if (ePFMgr.isMapOwner(getIdentity(), selMap)) {
buttonLabels.add(translate("copy.with.artefacts"));
introKey = "copy.map.intro2";
}
buttonLabels.add(translate("copy.without.artefacts"));
buttonLabels.add(translate("copy.cancel"));
String text = translate(introKey, StringHelper.escapeHtml(selMap.getTitle()));
copyMapCtrl = activateGenericDialog(ureq, translate("copy.map.title"), text, buttonLabels, copyMapCtrl);
copyMapCtrl.setUserObject(selMap);
} else if (srcLink.getComponentName().startsWith(SHARE_LINK_PREFIX)) {
popUpShareBox(ureq, selMap);
} else if (srcLink.getComponentName().equals(RESTRICT_LINK)) {
restrictShareView = !restrictShareView;
initOrUpdateMaps(ureq);
}
} else {
if (srcLink.equals(forwardLink)) {
currentPageNum++;
initOrUpdateMaps(ureq);
} else if (srcLink.getComponentName().startsWith(PAGING_LINK_PREFIX)) {
Integer page = (Integer) srcLink.getUserObject();
currentPageNum = page.intValue();
initOrUpdateMaps(ureq);
} else if (srcLink.getComponentName().equals(RESTRICT_LINK)) {
restrictShareView = !restrictShareView;
initOrUpdateMaps(ureq);
}
}
}
}
use of org.olat.portfolio.model.structel.PortfolioStructureMap in project OpenOLAT by OpenOLAT.
the class EPCreateMapController method formOK.
/**
* @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
*/
@Override
protected void formOK(UserRequest ureq) {
String mapTitle = titleEl.getValue();
String mapDesc = descEl.getValue();
PortfolioStructureMap resMap = ePFMgr.createAndPersistPortfolioDefaultMap(getIdentity(), mapTitle, mapDesc);
// add a page, as each map should have at least one per default!
String title = translate("new.page.title");
String description = translate("new.page.desc");
ePFMgr.createAndPersistPortfolioPage(resMap, title, description);
// refresh to get all elements with db-keys
resMap = (PortfolioStructureMap) ePFMgr.loadPortfolioStructureByKey(resMap.getKey());
ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(resMap));
ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_MAP_CREATED, getClass());
fireEvent(ureq, new EPMapCreatedEvent(resMap));
}
use of org.olat.portfolio.model.structel.PortfolioStructureMap in project openolat by klemens.
the class PortfolioResultDetailsController method initMapsForm.
protected void initMapsForm(FormItemContainer formLayout) {
Formatter formatter = Formatter.getInstance(getLocale());
int count = 0;
for (PortfolioStructureMap map : maps) {
MapElements mapElements = new MapElements();
if (map instanceof EPStructuredMap) {
EPStructuredMap structuredMap = (EPStructuredMap) map;
if (maps.size() > 1 || !structuredMap.getStructuredMapSource().equals(templateMap)) {
String templateTitle = structuredMap.getStructuredMapSource().getTitle();
uifactory.addStaticTextElement("map.template." + count, "map.template", templateTitle, formLayout);
}
String copyDate = "";
if (structuredMap.getCopyDate() != null) {
copyDate = formatter.formatDateAndTime(structuredMap.getCopyDate());
}
uifactory.addStaticTextElement("map.copyDate." + count, "map.copyDate", copyDate, formLayout);
String returnDate = "";
if (structuredMap.getReturnDate() != null) {
returnDate = formatter.formatDateAndTime(structuredMap.getReturnDate());
}
uifactory.addStaticTextElement("map.returnDate." + count, "map.returnDate", returnDate, formLayout);
String deadLine = "";
if (structuredMap.getDeadLine() != null) {
deadLine = formatter.formatDateAndTime(structuredMap.getDeadLine());
}
mapElements.deadlineEl = uifactory.addStaticTextElement("map.deadline." + count, "map.deadline", deadLine, formLayout);
}
FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons." + count, getTranslator());
buttonsCont.setRootForm(mainForm);
formLayout.add(buttonsCont);
if (map instanceof EPStructuredMap) {
mapElements.changeDeadlineLink = uifactory.addFormLink("map.deadline.change." + count, "map.deadline.change", null, buttonsCont, Link.BUTTON);
mapElements.changeDeadlineLink.setUserObject(map);
}
mapElements.openMapLink = uifactory.addFormLink("open.map." + count, "open.map", null, buttonsCont, Link.BUTTON);
mapElements.openMapLink.setUserObject(map);
count++;
if (count != maps.size()) {
uifactory.addSpacerElement("spacer-" + count, formLayout, false);
}
mapToElements.put(map, mapElements);
}
}
use of org.olat.portfolio.model.structel.PortfolioStructureMap in project openolat by klemens.
the class PortfolioResultDetailsController method formInnerEvent.
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if (source instanceof FormLink) {
FormLink link = (FormLink) source;
String cmd = link.getCmd();
if (cmd != null && cmd.startsWith("map.deadline.change")) {
if (deadlineCalloutCtr == null) {
EPStructuredMap map = (EPStructuredMap) link.getUserObject();
popupDeadlineBox(ureq, map);
} else {
// close on second click
closeDeadlineBox();
}
} else if (link.getName().startsWith("open.map")) {
PortfolioStructureMap map = (PortfolioStructureMap) link.getUserObject();
doOpenMap(ureq, map);
} else if (link.getName().startsWith("open.binder")) {
Binder map = (Binder) link.getUserObject();
doOpenMap(ureq, map);
}
}
super.formInnerEvent(ureq, source, event);
}
Aggregations