--- /dev/null
+/*****************************************************************************
+ * Copyright Igor Barma, Eric Brun, Alexandre Desoubeaux, Christian Martel,
+ * (2 décembre 2008)
+ *
+ * Ce logiciel est un programme informatique servant à l'évaluation des
+ * compétences.
+ *
+ * Ce logiciel est régi par la licence CeCILL soumise au droit français et
+ * respectant les principes de diffusion des logiciels libres. Vous pouvez
+ * utiliser, modifier et/ou redistribuer ce programme sous les conditions
+ * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
+ * sur le site "http://www.cecill.info".
+ *
+ * En contrepartie de l'accessibilité au code source et des droits de copie,
+ * de modification et de redistribution accordés par cette licence, il n'est
+ * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
+ * seule une responsabilité restreinte pèse sur l'auteur du programme, le
+ * titulaire des droits patrimoniaux et les concédants successifs.
+ *
+ * A cet égard l'attention de l'utilisateur est attirée sur les risques
+ * associés au chargement, à l'utilisation, à la modification et/ou au
+ * développement et à la reproduction du logiciel par l'utilisateur étant
+ * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
+ * manipuler et qui le réserve donc à des développeurs et des professionnels
+ * avertis possédant des connaissances informatiques approfondies. Les
+ * utilisateurs sont donc invités à charger et tester l'adéquation du
+ * logiciel à leurs besoins dans des conditions permettant d'assurer la
+ * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
+ * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
+ *
+ * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
+ * pris connaissance de la licence CeCILL, et que vous en avez accepté les
+ * termes.
+ *******************************************************************************/
+package com.pentila.evalcomp.client.event;
+
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.gwtext.client.core.EventCallback;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Function;
+import com.gwtext.client.core.SortDir;
+import com.gwtext.client.data.DateFieldDef;
+import com.gwtext.client.data.FieldDef;
+import com.gwtext.client.data.MemoryProxy;
+import com.gwtext.client.data.ObjectFieldDef;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.data.RecordDef;
+import com.gwtext.client.data.SimpleStore;
+import com.gwtext.client.data.SortState;
+import com.gwtext.client.data.Store;
+import com.gwtext.client.data.StoreTraversalCallback;
+import com.gwtext.client.data.StringFieldDef;
+import com.gwtext.client.util.DelayedTask;
+import com.gwtext.client.util.Format;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.ToolTip;
+import com.gwtext.client.widgets.form.ComboBox;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
+import com.gwtext.client.widgets.grid.CellMetadata;
+import com.gwtext.client.widgets.grid.ColumnConfig;
+import com.gwtext.client.widgets.grid.ColumnModel;
+import com.gwtext.client.widgets.grid.GroupingView;
+import com.gwtext.client.widgets.grid.Renderer;
+import com.gwtext.client.widgets.grid.RowParams;
+import com.gwtext.client.widgets.layout.FitLayout;
+import com.pentila.evalcomp.client.ConnexionServer;
+import com.pentila.evalcomp.client.i18n.Messages;
+import com.pentila.evalcomp.client.utilities.FormatUtil;
+import com.pentila.evalcomp.client.utilities.GridPanelDropable;
+import com.pentila.evalcomp.client.utilities.MyColumnConfig;
+import com.pentila.evalcomp.client.utilities.MyPagingToolbar;
+import com.pentila.evalcomp.client.utilities.RPCReader;
+import com.pentila.evalcomp.client.utilities.RPCStore;
+import com.pentila.evalcomp.client.utilities.Tools;
+import com.pentila.evalcomp.client.utilities.UserTools;
+import com.pentila.evalcomp.domain.EObject;
+import com.pentila.evalcomp.domain.Event;
+import com.pentila.evalcomp.domain.instance.ScenarioInstance;
+import com.pentila.evalcomp.domain.instance.ScenarioInstanceAbstract;
+import com.pentila.evalcomp.domain.transit.TListEObject;
+
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class EventListTab. The GUI that represent a list of all events of an
+ * user
+ */
+public class EventListTab extends Panel {
+
+ /** The cfg columns event. */
+ private ColumnConfig[] cfgColumnsEvent;
+
+ /** The rpc. */
+ RPCStore rpc;
+
+ private ComboBox cbSize;
+
+
+ /** The render event date. */
+ private Renderer renderEventDate = new Renderer() {
+ public String render(Object value, CellMetadata cellMetadata,
+ Record record, int rowIndex, int colNum, Store store) {
+ Event evt = (Event) record.getAsObject("evtObject");
+ return Format.format(Messages.getString("a_heure"),
+ new String[] {
+ //Tools.getDateFormated(evt.getCreationDate()),
+
+ Tools.getHourFormated(evt.getCreationDate()), });
+
+ }
+ };
+
+ /** The render event title. */
+ private Renderer renderEventTitle = new Renderer() {
+ public String render(Object value, CellMetadata cellMetadata,
+ Record record, int rowIndex, int colNum, Store store) {
+ Event evt = (Event) record.getAsObject("evtObject");
+ String title = "";
+
+ if (evt.getType() == Event.TYPE_ALERT) {
+ title = "<img src=\"" + Tools.getBaseURL()
+ + "images/alerte16.png\"> <b>" + Messages.getString("Alerte") + "</b>";
+ } else {
+ title = "<img src=\"" + Tools.getBaseURL()
+ + "images/info16.jpg\"> <b>" + Messages.getString("Information") + "</b>";
+ }
+ return title;
+ }
+ };
+
+ private Renderer renderEventES = new Renderer(){
+ public String render(Object value, CellMetadata cellMetadata,
+ Record record, int rowIndex, int colNum, Store store)
+ {
+ Event evt = (Event) record.getAsObject("evtObject");
+
+ String balise = "";
+
+ if(evt.getScenarioInstanceAbstract() != null && evt.getScenarioInstanceAbstract() instanceof ScenarioInstance){
+ String esName = ((ScenarioInstance)evt.getScenarioInstanceAbstract()).getEvaluationSubjectInstance().getEvaluationSubject().getComputedName();
+ balise = "<img src=\"" + Tools.getBaseURL() + "images/subject16.png\"/> " + esName;
+ }
+
+ return balise;
+ }
+ };
+
+ /** The cfg column model event. */
+ private ColumnModel cfgColumnModelEvent;
+
+ // Definition des differents panel
+ /** The event grid. */
+ private GridPanelDropable eventGrid;
+
+
+ /**
+ * Instantiates a new event list tab.
+ */
+ public EventListTab() {
+ super(Messages.getString("Tableau_des_notifications"));
+ this.setIconCls("iconAlert32");
+
+ ColumnConfig cc = new ColumnConfig(
+ Messages.getString("date"), "date", 100, true
+ );
+ //cc.setHidden(true);
+ cfgColumnsEvent = new ColumnConfig[] {
+ new ColumnConfig(
+ Messages.getString("Notification"), "eventTitle", 490, true,
+ renderEventTitle, "eventTitle"),
+ new MyColumnConfig(
+ Messages.getString("Heure"), "eventDate", 100, true,
+ renderEventDate, "eventDate"),
+ new ColumnConfig(
+ Messages.getString("sujet_d_evaluation"), "eventES", 100, true,
+ renderEventES, "eventES"),
+ cc};
+ cfgColumnModelEvent = new ColumnModel(cfgColumnsEvent);
+
+ initializeInterface();
+
+ }
+
+ /**
+ * Initialize GUI.
+ */
+ private void initializeInterface() {
+
+ this.setLayout(new FitLayout());
+
+ this.setBorder(false);
+
+ eventGrid = new GridPanelDropable(){
+
+ public boolean isTrashable(Object ...objects) {
+ Record [] ar = eventGrid.getSelectionModel().getSelections();
+ for (Record r : ar){
+ Event evt = (Event) r.getAsObject("evtObject");
+
+ if (evt.getId() == null){
+ return false;
+ }
+
+
+ }
+ return true;
+ }
+
+
+ public void trashedElements(Object ...objects) {
+ Set<Event> evts = new HashSet<Event>();
+ Record [] ar = eventGrid.getSelectionModel().getSelections();
+ for (Record r : ar){
+ Event evt = (Event) r.getAsObject("evtObject");
+
+
+ evts.add(evt);
+
+ }
+
+ deleteEvents(evts);
+
+ }
+
+ };
+
+
+ eventGrid.setColumnModel(cfgColumnModelEvent);
+
+ eventGrid.setEnableColumnHide(false);
+ eventGrid.setEnableColumnMove(false);
+ eventGrid.setEnableColumnResize(false);
+
+ eventGrid.setEnableDragDrop(true);
+ eventGrid.setDdGroup("evalCompDDGroup");
+
+ eventGrid.setBodyBorder(false);
+ eventGrid.setHeader(false);
+ eventGrid.setBorder(true);
+ eventGrid.setHideColumnHeader(false);
+
+ //eventGrid.setAutoScroll(true);
+ //eventGrid.setHeight(500);
+
+
+
+
+ FieldDef[] fs = new FieldDef[] {
+ new StringFieldDef("eventHashCode"),
+ new StringFieldDef("eventTitle"),
+ new DateFieldDef("eventDate"),
+ new StringFieldDef("eventTarget"),
+ new StringFieldDef("eventES"),
+ new StringFieldDef("date"),
+ new ObjectFieldDef("evtObject") };
+
+
+ RPCReader reader = new RPCReader(new RecordDef(fs));
+ Object[][] data = new Object[][] {};
+ MemoryProxy mp = new MemoryProxy(data);
+ rpc = new RPCStore(mp, reader, true){
+
+ @Override
+ public void update(int start, int limit) {
+ updateEventList(start, limit);
+
+ }
+
+ };
+
+ rpc.setSortInfo(new SortState("eventDate", SortDir.DESC));
+ rpc.setGroupField("date");
+ rpc.load();
+ rpc.setGroupOnSort(true);
+ reader.setStore(rpc);
+
+ eventGrid.setStore(rpc);
+
+ GroupingView gridView = new GroupingView() {
+ @Override
+ public String getRowClass(Record record, int index,
+ RowParams rowParams, Store store) {
+ Event evt = (Event) record.getAsObject("evtObject");
+
+ String label = EventTranslation
+ .getLongEventTr(evt.getDescription());
+
+
+ String emetteur = Messages.getString("Non_renseigne");
+ if (evt.getIssuer() != null) {
+ emetteur = evt.getIssuer().getFirstname() + " "
+ + evt.getIssuer().getLastname();
+ }
+ String evalDefName = "";
+ String evalSubName = "";
+
+ ScenarioInstanceAbstract sia = evt.getScenarioInstanceAbstract();
+
+
+ if (evt.getEvaluationDefinition() != null) {
+ evalDefName = evt.getEvaluationDefinition().getName();
+ } else if (sia != null && sia instanceof ScenarioInstance){
+
+ ScenarioInstance si = (ScenarioInstance) sia;
+
+ if (si.getEvaluationInstance() != null && si.getEvaluationInstance().getEvaluationDefinition() != null){
+
+ evalDefName = si.getEvaluationInstance().getEvaluationDefinition().getName();
+ }
+
+ try {
+ evalSubName = si
+ .getEvaluationSubjectInstance().getEvaluationSubject()
+ .getComputedName();
+ } catch (Exception ex) {
+
+ }
+ }
+
+ String endDate = "";
+ if (evt != null && evt.getEndDate() != null){
+ DateTimeFormat dtf = DateTimeFormat.getFormat("EEEE d MMMM yyyy");
+ endDate = dtf.format(evt.getEndDate());
+ }
+
+ String title = evt.getDescription();
+
+ //if (!evalSubName.equals("")){
+ title = FormatUtil.format(label, new String[] {
+ Tools.getDateFormated(evt.getStartDate()),
+ Tools.getDateFormated(evt.getEndDate()),
+ Tools.getDateFormated(evt.getCreationDate()),
+ emetteur,
+ evalSubName,
+ evalDefName,
+ "" + Tools.deltaDays(new Date(), evt.getEndDate(), 0),
+ endDate
+ }
+ );
+ //}
+
+ rowParams.setBody(Format
+ .format("{0}", title));
+
+
+ return "readedRow";
+ }
+ };
+
+
+
+
+ gridView.setForceFit(true);
+ gridView.setGroupTextTpl( "<table width=\"100%\" style=\"background-color:#cfecf3\"><tr><td >{[values.rs[0].data[\"date\"]]}</td></tr></table>");
+
+ gridView.setAutoFill(true);
+ gridView.setForceFit(true);
+ gridView.setHideGroupedColumn(true);
+ gridView.setEnableRowBody(true);
+
+
+
+
+ eventGrid.setView(gridView);
+
+ final MyPagingToolbar pagingToolbar = new MyPagingToolbar(rpc);
+
+ pagingToolbar.setPageSize(20);
+ pagingToolbar.setDisplayInfo(true);
+ pagingToolbar.setDisplayMsg("Notifications {0} - {1} sur {2}");
+ pagingToolbar.setEmptyMsg(Messages.getString("Pas_de_notifications"));
+
+ Store cbStore = new SimpleStore("size", new String[]{"20", "50", "100", "200", "500", "Tous"});
+ cbStore.load();
+
+ final TextField txtSearch = new TextField();
+ txtSearch.setFieldLabel("test");
+
+ final DelayedTask dt = new DelayedTask();
+ final Function doit = new Function(){
+ public void execute() {
+
+ //eventGrid.getStore().filter("eventTitle", txtSearch.getValueAsString(),true);
+ eventGrid.getStore().filterBy(new StoreTraversalCallback(){
+
+ public boolean execute(Record record)
+ {
+ Event evt = (Event) record.getAsObject("evtObject");
+
+ String label = EventTranslation
+ .getLongEventTr(evt.getDescription());
+
+ String emetteur = Messages.getString("Non_renseigne");
+ if (evt.getIssuer() != null) {
+ emetteur = evt.getIssuer().getFirstname() + " "
+ + evt.getIssuer().getLastname();
+ }
+ String evalDefName = "";
+ String evalSubName = "";
+
+ ScenarioInstanceAbstract sia = evt.getScenarioInstanceAbstract();
+
+
+ if (evt.getEvaluationDefinition() != null) {
+ evalDefName = evt.getEvaluationDefinition().getName();
+ } else if (sia != null && sia instanceof ScenarioInstance){
+
+ ScenarioInstance si = (ScenarioInstance) sia;
+
+ if (si.getEvaluationInstance() != null && si.getEvaluationInstance().getEvaluationDefinition() != null){
+
+ evalDefName = si.getEvaluationInstance().getEvaluationDefinition().getName();
+ }
+
+ try {
+ evalSubName = si
+ .getEvaluationSubjectInstance().getEvaluationSubject()
+ .getComputedName();
+ } catch (Exception ex) {
+
+ }
+ }
+
+ String endDate = "";
+ if (evt != null && evt.getEndDate() != null){
+ DateTimeFormat dtf = DateTimeFormat.getFormat("EEEE d MMMM yyyy");
+ endDate = dtf.format(evt.getEndDate());
+ }
+
+ String title = evt.getDescription();
+
+ //if (!evalSubName.equals("")){
+ title = FormatUtil.format(label, new String[] {
+ Tools.getDateFormated(evt.getStartDate()),
+ Tools.getDateFormated(evt.getEndDate()),
+ Tools.getDateFormated(evt.getCreationDate()),
+ emetteur,
+ evalSubName,
+ evalDefName,
+ "" + Tools.deltaDays(new Date(), evt.getEndDate(), 0),
+ endDate
+ }
+ );
+ //}
+
+ String res = Format
+ .format("{0}", title);
+
+ if(res.toLowerCase().contains(txtSearch.getValueAsString().toLowerCase())) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ });
+ }
+ };
+
+ ToolTip tp = new ToolTip();
+ tp.setHtml(Messages.getString("Rechercher_dans_la_liste"));
+ tp.applyTo(txtSearch);
+
+ txtSearch.addKeyPressListener(new EventCallback() {
+
+ public void execute(EventObject e) {
+ dt.cancel();
+ dt.delay(1500, doit);
+
+ }
+ });
+
+ pagingToolbar.addField(txtSearch);
+
+ this.cbSize = new ComboBox();
+
+ cbSize.setWidth(100);
+ cbSize.setReadOnly(true);
+ cbSize.setStore(cbStore);
+ cbSize.setDisplayField("size");
+ cbSize.setMode(ComboBox.LOCAL);
+ cbSize.setSelectOnFocus(true);
+
+ pagingToolbar.addField(this.cbSize);
+
+ pagingToolbar.initialize();
+
+ cbSize.setValue("20");
+
+
+ this.cbSize.addListener(new ComboBoxListenerAdapter()
+ {
+ public void onSelect(ComboBox comboBox, Record record, int index)
+ {
+ if(comboBox.getValue().equals("Tous"))
+ {
+ pagingToolbar.setPageSize(100000);
+ }
+ else
+ {
+ pagingToolbar.setPageSize(Integer.parseInt(cbSize.getValueAsString()));
+ }
+ }
+ });
+
+ eventGrid.setBottomToolbar(pagingToolbar);
+
+ eventGrid.setDragDropText(Messages.getString("x_alertx"));
+
+
+ this.add(eventGrid);
+ }
+
+ /**
+ * Update event list of the user.
+ *
+ * @param start the start
+ * @param limit the limit
+ */
+ public void updateEventList(final int start, final int limit) {
+
+ AsyncCallback callback = new AsyncCallback() {
+ public void onFailure(Throwable caught) {
+ Tools.hideLoading();
+ System.out
+ .println("problem dans la recup des messages non lus");
+ }
+
+ public void onSuccess(Object result) {
+ History.newItem("event", false);
+
+ TListEObject tle = (TListEObject) result;
+
+
+
+ DateTimeFormat dtf = DateTimeFormat.getFormat("EEEE dd MMMM yyyy");
+
+
+ DateTimeFormat dtf2 = DateTimeFormat.getFormat("yyyyMMdd");
+
+ Date dateToday = new Date();
+
+ String today = dtf2.format(dateToday);
+
+
+ List<EObject> listEvt = tle.getListOfEObjects();
+ int total = tle.getTotal();
+
+
+ if (listEvt != null) {
+
+ rpc.initData(limit, total);
+
+
+ for (int i = 0; i < listEvt.size(); i++) {
+ Event evt = (Event) listEvt.toArray()[i];
+
+ String evalSubName = "";
+ try {
+
+ ScenarioInstance si = (ScenarioInstance)evt.getScenarioInstanceAbstract();
+
+ evalSubName =si
+ .getEvaluationSubjectInstance()
+ .getEvaluationSubject().getComputedName();
+ } catch (Exception ex) {
+
+ }
+
+ /**/
+
+ String day = dtf2.format(evt.getCreationDate());
+
+ Long o = new Long(day);
+
+ o = Long.MAX_VALUE - o;
+
+
+ String addToday = "";
+
+ if (day.equals(today)){
+ addToday = Messages.getString("today") + " - ";
+ }
+
+ Object[] monObjet = new Object[] {
+ "" + evt.hashCode(),
+ evt.getDescription(),
+ evt.getCreationDate(),
+ evalSubName, evalSubName,
+ "<span style=\"display:none;\">" + o.toString() + "</span> " + addToday +dtf.format(evt.getCreationDate())
+ ,evt };
+ rpc.addObject(monObjet);
+ }
+
+ rpc.finish();
+ rpc.load(start, limit, true);
+
+ Tools.hideLoading();
+
+ }
+ }
+ };
+ Tools.showLoading(Messages.getString("MAJ_liste_notifications"),
+ Messages.getString("Chargement"));
+
+ RequestBuilder rb = ConnexionServer.instanceService.getEvents(UserTools
+ .getUser().getUid(), start, limit, callback);
+
+ rb.setHeader("code", "A10");
+
+ ConnexionServer.doSend(rb);
+
+ }
+
+ /**
+ * Delete events.
+ *
+ * @param evts the evts
+ */
+ public void deleteEvents(Set<Event> evts){
+
+ AsyncCallback callback = new AsyncCallback() {
+ public void onFailure(Throwable caught) {
+ Tools.hideLoading();
+ System.out
+ .println("problem dans la recup des messages non lus");
+ }
+
+ public void onSuccess(Object result) {
+
+ Tools.hideLoading();
+ updateEventList(0 ,getSelectedPageSize());
+
+ }
+ };
+ Tools.showLoading(Messages.getString("MAJ_liste_notifications"), Messages.getString("Chargement"));
+
+ ConnexionServer.messageService.deleteEvents(evts, callback);
+
+ }
+
+ public int getSelectedPageSize()
+ {
+ int size = 0;
+
+ if(cbSize.getValue().equals("Tous"))
+ {
+ size = 100000;
+ }
+ else
+ {
+ size = Integer.parseInt(cbSize.getValueAsString());
+ }
+ return size;
+ }
+
+
+}