--- /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.message;
+
+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.user.client.rpc.AsyncCallback;
+import com.gwtext.client.util.Format;
+import com.gwtext.client.widgets.BoxComponent;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import com.pentila.evalcomp.client.ConnexionServer;
+import com.pentila.evalcomp.client.evalFolder.EvaluationFolderPanel;
+import com.pentila.evalcomp.client.i18n.Messages;
+import com.pentila.evalcomp.client.services.IServiceWidgetContainerPaging;
+import com.pentila.evalcomp.client.services.ServiceAbstract;
+import com.pentila.evalcomp.client.services.widget.GridPager;
+import com.pentila.evalcomp.client.utilities.ListGridDropable;
+import com.pentila.evalcomp.client.utilities.Tools;
+import com.pentila.evalcomp.client.utilities.TrashableContainer;
+import com.pentila.evalcomp.client.utilities.UserTools;
+import com.pentila.evalcomp.domain.EObject;
+import com.pentila.evalcomp.domain.Message;
+import com.pentila.evalcomp.domain.transit.TListEObject;
+import com.smartgwt.client.data.RecordList;
+import com.smartgwt.client.data.SortSpecifier;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.DragAppearance;
+import com.smartgwt.client.types.DragDataAction;
+import com.smartgwt.client.types.HeaderControls;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.SortDirection;
+import com.smartgwt.client.widgets.HeaderControl;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.events.CloseClickEvent;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordDoubleClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tile.TileLayout;
+import com.pentila.evalcomp.client.widget.SmartWindow;
+
+
+
+public class MessagesSmartListTab extends Panel implements IServiceWidgetContainerPaging, TrashableContainer{
+
+
+ public ListGridDropable msgGrid;
+ private GridPager gp;
+ private VLayout content;
+
+
+ public MessagesSmartListTab() {
+ super();
+
+ initializeInterface();
+ }
+
+ private void initializeInterface() {
+
+ msgGrid = new ListGridDropable(this);
+
+ ListGridField sujetField = new ListGridField("sujet", Messages.getString("Sujet"));
+ sujetField.setWidth(250);
+
+ ListGridField bodyField = new ListGridField("body", Messages.getString("Dernier_message"));
+
+ ListGridField expediteurField = new ListGridField("expediteur", Messages.getString("Expediteur"));
+ expediteurField.setWidth(170);
+
+ ListGridField dateField = new ListGridField("date", Messages.getString("date"));
+ dateField.setWidth(160);
+ dateField.setCellFormatter(new CellFormatter(){
+
+ @Override
+ public String format(Object value, ListGridRecord record,
+ int rowNum, int colNum) {
+ if (value != null){
+ Date date = (Date)value;
+ return Tools.getMinimalDateFormated(date, true);
+ }
+ return "";
+ }
+
+ });
+
+
+ ListGridField nombreMessageField = new ListGridField("nombreMessage", Messages.getString("nb_messages"));
+ nombreMessageField.setWidth(90);
+ nombreMessageField.setType(ListGridFieldType.INTEGER);
+
+
+ ListGridField evalField = new ListGridField("evalMessage", Messages.getString("Dossier"));
+ evalField.setWidth(25);
+ evalField.setAlign(Alignment.CENTER);
+ evalField.setType(ListGridFieldType.IMAGE);
+ evalField.setImageURLPrefix(Tools.getBaseURL() + "images/");
+ evalField.setImageURLSuffix(".png");
+ evalField.setImageSize(14);
+ evalField.setCanGroupBy(false);
+
+ evalField.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum,
+ int colNum) {
+ Message m = (Message)record.getAttributeAsObject("message");
+
+ if (m.getTopEsi() != null){
+ return m.getTopEsi().getName();
+ }
+ return "";
+
+ }
+ });
+ evalField.setShowHover(true);
+
+ ListGridField luNonLuField = new ListGridField("luNonLu", Messages.getString("lu_"));
+ luNonLuField.setAlign(Alignment.CENTER);
+ luNonLuField.setType(ListGridFieldType.IMAGE);
+ luNonLuField.setImageURLPrefix(Tools.getBaseURL() + "images/");
+ luNonLuField.setImageURLSuffix(".png");
+ luNonLuField.setImageSize(14);
+ luNonLuField.setWidth(40);
+ luNonLuField.setShowHover(true);
+ luNonLuField.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum,
+ int colNum) {
+ String luNonLu = record.getAttributeAsString("luNonLu");
+ return (luNonLu.equals("message-lu")) ? "lu" : "non lu";
+ }
+ });
+
+ msgGrid.setCanDrag(true);
+
+ msgGrid.setCanDragRecordsOut(true);
+ msgGrid.setDragDataAction(DragDataAction.NONE);
+ msgGrid.setDragAppearance(DragAppearance.TRACKER);
+ msgGrid.setDragType("MESSAGE");
+
+ msgGrid.setFields(evalField, luNonLuField, sujetField, bodyField, expediteurField, dateField, nombreMessageField);
+ msgGrid.setHeight100();
+ msgGrid.setWidth100();
+ msgGrid.setWrapCells(true);
+ msgGrid.setAlternateRecordStyles(false);
+ msgGrid.setCellHeight(16);
+
+ SortSpecifier ss = new SortSpecifier("date", SortDirection.DESCENDING);
+ SortSpecifier[] array = new SortSpecifier[1];
+ array[0] = ss;
+ msgGrid.setSort(array);
+
+
+ msgGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler(){
+
+ @Override
+ public void onRecordDoubleClick(RecordDoubleClickEvent event) {
+ Message msg = (Message) event.getRecord().getAttributeAsObject("message");
+
+ event.getRecord().setAttribute("luNonLu", "message-lu");
+ if(event.getRecordNum()%2==0){
+ msgGrid.getRecord(event.getRecordNum()).set_baseStyle("message-read");
+ }
+ else{
+ msgGrid.getRecord(event.getRecordNum()).set_baseStyle("message-readBlack");
+ }
+
+ event.getViewer().refreshRow(event.getRecordNum());
+
+ final SmartWindow window = new SmartWindow();
+ window.setOverflow(Overflow.AUTO);
+
+
+ window.addCloseClickHandler(new CloseClickHandler() {
+ public void onCloseClick(CloseClickEvent event) {
+ //update();
+ window.destroy();
+ Tools.hideLoading();
+ }
+ });
+
+ TileLayout tileLayout = new TileLayout();
+ tileLayout.setTileWidth(200);
+ tileLayout.setTileHeight(150);
+ tileLayout.setWidth100();
+ tileLayout.setTilesPerLine(3);
+
+ ClickHandler clickHandler = new ClickHandler() {
+ public void onClick(ClickEvent event) {
+
+ if (window.getMaximized() != null && window.getMaximized()){
+ window.restore();
+ }else{
+ window.maximize();
+ }
+ }
+ };
+ HeaderControl maximize = new HeaderControl(HeaderControl.MAXIMIZE, clickHandler);
+
+ window.setHeaderControls(HeaderControls.HEADER_LABEL , HeaderControls.MINIMIZE_BUTTON,HeaderControls.MAXIMIZE_BUTTON, maximize, HeaderControls.CLOSE_BUTTON);
+ window.setWidth(800);
+ window.setHeight(600);
+ window.setAutoSize(false);
+ window.setCanDragReposition(true);
+ window.setCanDragResize(true);
+ window.centerInPage();
+
+ String title = "";
+
+ try {
+ String evalLabel = msg.getTopEsi().getEvaluationSubject()
+ .getEvaluationDefinition().getName();
+ String compLabel = msg.getTopEsi().getEvaluationSubject()
+ .getComputedName();
+ title = Format
+ .format(
+ Messages
+ .getString("Sujet_x_Concernant_x_a_propos_de_x_inline"),
+ new String[] { msg.getSubject() , compLabel,
+ evalLabel });
+ } catch (Exception ex) {
+ title = msg.getSubject();
+ }
+
+ window.setTitle(title);
+
+ if(msg.getTopEsi() != null){
+ EvaluationFolderPanel efp = new EvaluationFolderPanel(msg.getTopEsi().getName(), msg.getTopEsi().getId(), true, false);
+ efp.update();
+ efp.setWidth100();
+ efp.setHeight100();
+ window.addItem(efp);
+ }
+ else{
+ MessagePanel mp = new MessagePanel(msg);
+ mp.update();
+ mp.setWidth100();
+ mp.setHeight100();
+ window.addItem(mp);
+ }
+
+ tileLayout.addTile(window);
+ window.show();
+ }
+
+ });
+
+ content = new VLayout();
+ content.addMember(msgGrid);
+
+ gp = new GridPager(this, ServiceAbstract.pageSize);
+ gp.setWidth100();
+
+ content.addMember(gp);
+
+ this.add(content);
+
+ this.addListener(new PanelListenerAdapter(){
+
+ public void onResize(BoxComponent component, int adjWidth,
+ int adjHeight, int rawWidth, int rawHeight) {
+ int containerW = getInnerWidth();
+ int containerH = getInnerHeight();
+ if (content.getWidth() != containerW || content.getHeight() != containerH ){
+ if (containerW > 0 && containerH > 0){
+ content.resizeTo(containerW, containerH );
+ }
+ }
+ }
+
+ public void onDestroy(Component component) {
+ content.destroy();
+ }
+ });
+
+ }
+
+ private void deleteMessages(Set<Message> sm){
+
+ AsyncCallback<Object> callback = new AsyncCallback<Object>() {
+ public void onFailure(Throwable caught) {
+ System.out
+ .println("problem dans la recup des messages non lus");
+ Tools.hideLoading();
+ }
+
+ public void onSuccess(Object result) {
+ Tools.hideLoading();
+ }
+ };
+ Tools
+ .showLoading(Messages.getString("MAJ"), Messages.getString("Chargement"));
+ ConnexionServer.messageService.deleteMessages(
+ sm, callback);
+
+ }
+
+ public void update() {
+ update(gp.getStart(), gp.getPageSize(), gp.getSearchFilter());
+
+ }
+
+ public void update(int start, int pageSize, String searchFilter) {
+
+ AsyncCallback<TListEObject> callback = new AsyncCallback<TListEObject>() {
+ public void onFailure(Throwable caught) {
+ System.out
+ .println("problem dans la recup des messages non lus");
+ Tools.hideLoading();
+ }
+
+ public void onSuccess(TListEObject result) {
+
+ TListEObject tlm = result;
+ List<EObject> messageList = tlm.getListOfEObjects();
+
+ if (messageList != null) {
+
+ int total = tlm.getTotal();
+ gp.setTotalCount(total);
+ gp.updatePagerControls(gp.getTotalPages());
+
+ RecordList rl = new RecordList();
+
+
+ for (int i = 0; i < messageList.size(); i++) {
+ Message msg = (Message) messageList.get(i);
+ ListGridRecord lgr = new ListGridRecord();
+
+
+
+ lgr.setAttribute("sujet", msg.getSubject());
+ lgr.setAttribute("body", msg.getBody());
+ if(msg.getAuthor() != null){
+ lgr.setAttribute("expediteur", msg.getAuthor().getFirstname() + " " + msg.getAuthor().getLastname());
+ }
+ lgr.setAttribute("date", msg.getCreationDate());
+ lgr.setAttribute("nombreMessage", msg.getNbParent());
+
+ String luNonLu = "";
+ if(msg.isComputedReaded()){
+ luNonLu = "message-lu";
+ if(i%2==0){
+ lgr.set_baseStyle("message-read");
+ }
+ else{
+ lgr.set_baseStyle("message-readBlack");
+ }
+
+ }else{
+ luNonLu = "message-nonlu";
+ if(i%2==0){
+ lgr.set_baseStyle("message-unread");
+ }
+ else{
+ lgr.set_baseStyle("message-unreadBlack");
+ }
+ }
+ lgr.setAttribute("luNonLu", luNonLu);
+
+ lgr.setAttribute("message", msg);
+
+
+
+ if (msg.getTopEsi() != null){
+ lgr.setAttribute("evalMessage", "subject16");
+ }else{
+ lgr.setAttribute("evalMessage", "");
+ }
+
+
+ rl.add(lgr);
+ }
+
+ msgGrid.setData(rl);
+ }
+ Tools.hideLoading();
+ }
+ };
+ Tools
+ .showLoading(
+ Messages.getString("Liste_des_messages"), Messages.getString("Chargement"));
+ RequestBuilder rb = ConnexionServer.messageService.getMessagesList(
+ UserTools.getUser().getUid(), start, pageSize, gp.getSearchFilter(), callback);
+ rb.setHeader("code", "A110");
+ ConnexionServer.doSend(rb);
+ }
+
+ public boolean isTrashable(Object... objects) {
+ return true;
+ }
+
+ public void trashedElements(Object... objects) {
+ Set<Message> sm = new HashSet<Message>();
+
+ ListGridRecord[] ar = msgGrid.getSelectedRecords();
+ for (ListGridRecord r : ar){
+ Message msg = (Message) r.getAttributeAsObject("message");
+ msg = msg.getTopMessage();
+ sm.add(msg);
+
+ }
+ deleteMessages(sm);
+
+ for (ListGridRecord r : ar){
+ msgGrid.removeData(r);
+ }
+ }
+}