/**
* <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.portfolio.ui;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.segmentedview.SegmentViewComponent;
import org.olat.core.gui.components.segmentedview.SegmentViewEvent;
import org.olat.core.gui.components.segmentedview.SegmentViewFactory;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.id.Identity;
import org.olat.modules.forms.EvaluationFormManager;
import org.olat.modules.forms.EvaluationFormSession;
import org.olat.modules.forms.EvaluationFormSessionStatus;
import org.olat.modules.forms.ui.CompareEvaluationsFormController;
import org.olat.modules.forms.ui.EvaluationFormController;
import org.olat.modules.forms.ui.model.Evaluator;
import org.olat.modules.portfolio.PageBody;
import org.olat.repository.RepositoryEntry;
import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 14 déc. 2016<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class MultiEvaluationFormController extends BasicController {
private int count = 0;
private final PageBody anchor;
private final Identity owner;
private final boolean readOnly;
private final boolean doneFirst;
private final RepositoryEntry formEntry;
private Link ownerLink;
private Link compareLink;
private final VelocityContainer mainVC;
private final SegmentViewComponent segmentView;
private List<Evaluator> evaluators = new ArrayList<>();
private List<Link> otherEvaluatorLinks = new ArrayList<>();
private EvaluationFormController currentEvalutionFormCtrl;
private CompareEvaluationsFormController compareEvaluationCtrl;
@Autowired
private UserManager userManager;
@Autowired
private EvaluationFormManager evaluationFormManager;
public MultiEvaluationFormController(UserRequest ureq, WindowControl wControl,
Identity owner, List<Identity> otherEvaluators, PageBody anchor, RepositoryEntry formEntry,
boolean doneFirst, boolean readOnly, boolean anonym) {
super(ureq, wControl);
this.owner = owner;
this.anchor = anchor;
this.readOnly = readOnly;
this.doneFirst = doneFirst;
this.formEntry = formEntry;
mainVC = createVelocityContainer("multi_evaluation_form");
segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this);
boolean viewOthers;
if(doneFirst) {
EvaluationFormSession session = evaluationFormManager.getSessionForPortfolioEvaluation(getIdentity(), anchor);
viewOthers = session == null ? false : session.getEvaluationFormSessionStatus() == EvaluationFormSessionStatus.done;
} else {
viewOthers = true;
}
if(owner != null) {
String ownerFullname = userManager.getUserDisplayName(owner);
evaluators.add(new Evaluator(owner, ownerFullname));
String id = "eva-" + (count++);
ownerLink = LinkFactory.createCustomLink(id, id, ownerFullname, Link.BUTTON | Link.NONTRANSLATED, mainVC, this);
ownerLink.setUserObject(owner);
boolean me = owner.equals(ureq.getIdentity());
segmentView.addSegment(ownerLink, me);
if(me) {
doOpenEvalutationForm(ureq, owner);
}
}
if(otherEvaluators != null && otherEvaluators.size() > 0) {
int countEva = 1;
for(Identity evaluator:otherEvaluators) {
boolean me = evaluator.equals(ureq.getIdentity());
String evaluatorFullname;
if(!me && anonym) {
evaluatorFullname = translate("anonym.evaluator", new String[] { Integer.toString(countEva++) });
} else {
evaluatorFullname = userManager.getUserDisplayName(evaluator);
}
evaluators.add(new Evaluator(evaluator, evaluatorFullname));
String id = "eva-" + (count++);
Link evaluatorLink = LinkFactory.createCustomLink(id, id, evaluatorFullname, Link.BUTTON | Link.NONTRANSLATED, mainVC, this);
evaluatorLink.setUserObject(evaluator);
otherEvaluatorLinks.add(evaluatorLink);
segmentView.addSegment(evaluatorLink, me);
if(me) {
doOpenEvalutationForm(ureq, evaluator);
}
}
}
if((owner != null && otherEvaluators != null && otherEvaluators.size() > 0) || (otherEvaluators != null && otherEvaluators.size() > 1)) {
compareLink = LinkFactory.createLink("compare.evaluations", mainVC, this);
compareLink.setUserObject(owner);
segmentView.addSegment(compareLink, false);
}
segmentView.setVisible(viewOthers);
mainVC.put("segments", segmentView);
putInitialPanel(mainVC);
}
@Override
protected void doDispose() {
//
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(currentEvalutionFormCtrl == source) {
if(event == Event.DONE_EVENT) {
if(doneFirst) {
// check if it's really done
EvaluationFormSession session = evaluationFormManager.getSessionForPortfolioEvaluation(getIdentity(), anchor);
if(session != null && session.getEvaluationFormSessionStatus() == EvaluationFormSessionStatus.done) {
segmentView.setVisible(true);
}
}
}
}
super.event(ureq, source, event);
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if(source == segmentView) {
if(event instanceof SegmentViewEvent) {
SegmentViewEvent sve = (SegmentViewEvent)event;
String segmentCName = sve.getComponentName();
Component clickedLink = mainVC.getComponent(segmentCName);
if (clickedLink == ownerLink) {
doOpenEvalutationForm(ureq, owner);
} else if(clickedLink == compareLink) {
doOpenOverview(ureq);
} else if (clickedLink instanceof Link) {
Link link = (Link)clickedLink;
Object uobject = link.getUserObject();
if(uobject instanceof Identity) {
doOpenEvalutationForm(ureq, (Identity)uobject);
}
}
}
}
}
private void doOpenEvalutationForm(UserRequest ureq, Identity evaluator) {
boolean ro = readOnly || !evaluator.equals(getIdentity());
boolean doneButton = !ro && evaluator.equals(getIdentity()) && (owner == null || !owner.equals(evaluator));
currentEvalutionFormCtrl = new EvaluationFormController(ureq, getWindowControl(), evaluator, anchor, formEntry, ro, doneButton);
listenTo(currentEvalutionFormCtrl);
mainVC.put("segmentCmp", currentEvalutionFormCtrl.getInitialComponent());
}
private void doOpenOverview(UserRequest ureq) {
removeAsListenerAndDispose(compareEvaluationCtrl);
compareEvaluationCtrl = new CompareEvaluationsFormController(ureq, getWindowControl(), evaluators, anchor, formEntry);
listenTo(compareEvaluationCtrl);
mainVC.put("segmentCmp", compareEvaluationCtrl.getInitialComponent());
}
}