package hu.sch.web.kp.valuation.message;
import hu.sch.domain.enums.ValuationPeriod;
import hu.sch.domain.*;
import hu.sch.services.ValuationManagerLocal;
import hu.sch.web.kp.KorokPage;
import hu.sch.web.kp.valuation.ValuationDetails;
import hu.sch.web.kp.valuation.ValuationHistory;
import hu.sch.web.kp.valuation.Valuations;
import hu.sch.web.wicket.components.customlinks.UserLink;
import java.util.List;
import javax.inject.Inject;
import org.apache.wicket.datetime.markup.html.basic.DateLabel;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValueConversionException;
/**
*
* @author hege
* @author messo
*/
public class ValuationMessages extends KorokPage {
@Inject
ValuationManagerLocal valuationManager;
private Group group = null;
private Semester semester = null;
public static BookmarkablePageLink<ValuationMessages> getLink(String id, final Valuation v) {
return getLink(id, v.getGroupId(), v.getSemester());
}
public static BookmarkablePageLink<ValuationMessages> getLink(String id, final Long gId, final Semester s) {
return new BookmarkablePageLink<ValuationMessages>(id, ValuationMessages.class,
new PageParameters().add("gid", gId.toString()).add("sid", s.getId()));
}
public ValuationMessages(PageParameters params) {
Long groupId = null;
try {
groupId = params.get("gid").toLong();
} catch (StringValueConversionException ex) {
}
String semesterStr = params.get("sid").toString(null);
if (groupId == null || (group = groupManager.findGroupById(groupId)) == null) {
error("Nincs ilyen csoport!");
setResponsePage(Valuations.class);
return;
}
if (semesterStr == null || semesterStr.length() == 0 || !(semester = new Semester(semesterStr)).isValid()) {
error("Nincs ilyen félév!");
setResponsePage(Valuations.class);
return;
}
setHeaderLabelText("Értékeléshez tartozó üzenetek");
add(new Label("groupName", group.getName()));
add(new Label("semester", semester.toString()));
add(new BookmarkablePageLink("latestVersion", ValuationDetails.class,
new PageParameters().add("id", valuationManager.findLatestVersionsId(group, semester))));
add(new BookmarkablePageLink("history", ValuationHistory.class, new PageParameters().add("gid", group.getId()).add("sid", semester.getId())));
// ok megvan, hogy melyik a csoport és melyik a félév
List<ValuationMessage> messages = valuationManager.getMessages(group, semester);
if (messages.isEmpty()) {
info(getLocalizer().getString("info.NincsUzenet", this));
}
ListView<ValuationMessage> uzenetekView = new ListView<ValuationMessage>("uzenetek", messages) {
@Override
protected void populateItem(ListItem<ValuationMessage> item) {
final ValuationMessage vm = item.getModelObject();
item.setModel(new CompoundPropertyModel<ValuationMessage>(vm));
WebMarkupContainer header;
item.add(header = new WebMarkupContainer("messageHeader") {
@Override
protected void onComponentTag(ComponentTag tag) {
super.onComponentTag(tag);
if (vm.isFromSystem()) {
tag.getAttributes().put("class", tag.getAttribute("class") + " fromSystem");
}
}
});
if (vm.isFromSystem()) {
header.add(new Label("sender", "Rendszerüzenet"));
} else {
header.add(new UserLink("sender", vm.getSender()));
}
header.add(DateLabel.forDatePattern("date", "yyyy. MM. dd. HH:mm"));
item.add(new MultiLineLabel("message"));
}
};
add(uzenetekView);
Link ujuzenet = new Link("newMessageLink") {
@Override
public void onClick() {
setResponsePage(new NewMessage(group, semester));
}
};
// csak akkor lehet új üzenetet hozzáadni, ha a jelenlegi félévben vagyunk
// illetve: leadási időszak van + körvezető VAGY elbírálási időszak van + JETI
ValuationPeriod vp = systemManager.getErtekelesIdoszak();
ujuzenet.setVisible(systemManager.getSzemeszter().equals(semester)
&& (vp == ValuationPeriod.ERTEKELESLEADAS || vp == ValuationPeriod.ERTEKELESELBIRALAS)
&& (isUserGroupLeader(group) || isCurrentUserJETI()));
add(ujuzenet);
}
}