--- /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.calendar;
+
+import java.util.Date;
+import java.util.Set;
+
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.gwtext.client.core.Function;
+import com.gwtext.client.util.Format;
+import com.gwtext.client.widgets.BoxComponent;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.Tool;
+import com.gwtext.client.widgets.Tool.ToolType;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import com.gwtext.client.widgets.layout.FitLayout;
+import com.gwtextux.client.widgets.timeline.TimeLineWidget;
+import com.pentila.evalcomp.client.ConnexionServer;
+import com.pentila.evalcomp.client.evaluation.EventActivityWidget;
+import com.pentila.evalcomp.client.i18n.Messages;
+import com.pentila.evalcomp.client.utilities.Tools;
+import com.pentila.evalcomp.client.utilities.UserTools;
+import com.pentila.evalcomp.domain.definition.EvaluationDefinition;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class CalendarViewTab.
+ */
+public class CalendarViewTab extends Panel {
+
+
+
+ /** The eval template. */
+ private String evalTemplate = "{'property': '{0}',"+
+ "'start': '{1}'," +
+ "'end': '{2}'," +
+ "'title': '{3}'," +
+ "'description': '{4}'," +
+ "'image': '" + Tools.getBaseURL() + "images/campagne32.png'," +
+ "'color': '{5}'," +
+ "'textColor': 'black'," +
+ "}";
+
+ /** The json data footer. */
+ private String jsonDataFooter = "]}";
+
+ /** The json data header. */
+ private String jsonDataHeader = "{" +
+ "'dateTimeFormat': 'iso8601'," +
+ "'events' : [";
+
+ /** The simile widget. */
+ private TimeLineWidget simileWidget;
+
+ /** The cache data. */
+ protected String cacheData = "";
+
+ private int mode = 1;
+
+ private CalendarRender calendarRender;
+
+ /**
+ * Instantiates a new calendar view tab.
+ */
+ public CalendarViewTab() {
+ super(Messages.getString("Calendrier"));
+ Tool tt = new Tool(new ToolType("echo"), new Function(){
+
+ public void execute() {
+
+ mode = 0;
+ refreshCalendar();
+ }
+ }
+ ,Messages.getString("calendar-day-view"));
+
+
+ this.addTool(tt);
+ Tool tt2 = new Tool(new ToolType("echo12"), new Function(){
+
+ public void execute() {
+
+ mode = 1;
+ refreshCalendar();
+ }
+ }
+ ,Messages.getString("calendar-month-view"));
+
+
+ this.addTool(tt2);
+ Tool tt3 = new Tool(new ToolType("echo14"), new Function(){
+
+ public void execute() {
+
+ mode = 2;
+ refreshCalendar();
+ }
+ }
+ ,Messages.getString("calendar-year-view"));
+
+
+ this.addTool(tt3);
+ this.setIconCls("iconCalendar32");
+ this.setAutoScroll(true);
+ this.setLayout(new FitLayout());
+
+ }
+
+ /**
+ * Initialize interface.
+ */
+ public void initializeInterface() {
+ //this.clear();
+
+ this.setBorder(false);
+
+
+ this.addListener(new PanelListenerAdapter(){
+
+
+
+ public void onResize(BoxComponent component, int adjWidth,
+ int adjHeight, int rawWidth, int rawHeight) {
+
+ refreshCalendar(getInnerWidth()-10, getInnerHeight()-5, null);
+
+ }
+
+ });
+
+ AsyncCallback callback = new AsyncCallback() {
+
+ public void onFailure(Throwable caught) {
+ // do some UI stuff to show failure
+ System.out
+ .println("Probleme dans la recup de la liste des evals"); //$NON-NLS-1$
+ Tools.hideLoading();
+ }
+
+ public void onSuccess(Object result) {
+
+ Set<EvaluationDefinition> evals = (Set<EvaluationDefinition>) result;
+ String resJSON = "";
+
+ int nbEval = 0;
+
+ for (EvaluationDefinition eval : evals) {
+ if (eval.getDateStart() != null
+ && eval.getDateEnd() != null) {
+
+ nbEval++;
+
+ if (!resJSON.equals("")) {
+ resJSON += ",";
+ }
+
+ String color = Messages
+ .getString("Calendrier_colorEval_default");
+
+ String description = "<i style=\"font-size:small;color:grey;\">";
+ description += Messages
+ .getString("Evaluation_creee_par")
+ + " ";
+ if (eval.getOwner() != null){
+ description += eval.getOwner().getFirstname() + " "
+ + eval.getOwner().getLastname();
+ }else{
+ description += Messages.getString("unknown");
+ }
+ description += "<br>";
+
+
+
+ int state = eval.getState();
+
+ if (eval.getDateEnd().before(new Date())){
+ state = EvaluationDefinition.FINISHED;
+ }
+
+
+
+ switch (state) {
+ case EvaluationDefinition.DELETED: {
+ description += Messages
+ .getString("Campagne_d_evaluation_supprimee");
+ color = Messages
+ .getString("Calendrier_colorEval_deleted");
+ break;
+ }
+ case EvaluationDefinition.FINISHED: {
+ description += Messages
+ .getString("Campagne_d_evaluation_finie");
+ color = Messages
+ .getString("Calendrier_colorEval_finished");
+ break;
+ }
+ case EvaluationDefinition.INITIAL: {
+ description += Messages
+ .getString("Campagne_d_evaluation_non_publiee");
+ color = Messages
+ .getString("Calendrier_colorEval_initial");
+ break;
+ }
+ case EvaluationDefinition.PAUSED: {
+ description += Messages
+ .getString("Campagne_d_evaluation_en_pause");
+ color = Messages
+ .getString("Calendrier_colorEval_paused");
+ break;
+ }
+ case EvaluationDefinition.PUBLISHED: {
+ description += Messages
+ .getString("Campagne_d_evaluation_publiee");
+ color = Messages
+ .getString("Calendrier_colorEval_published");
+ break;
+ }
+ case EvaluationDefinition.RUNNING: {
+ description += Messages
+ .getString("Campagne_d_evaluation_en_cours");
+ color = Messages
+ .getString("Calendrier_colorEval_running");
+ break;
+ }
+ default: {
+ description += Messages
+ .getString("Campagne_d_evaluation_non_publiee");
+ color = Messages
+ .getString("Calendrier_colorEval_default");
+ }
+ }
+
+ description += "</i><br><br>";
+ description += eval.getDescription();
+
+
+
+
+
+ resJSON += Format
+ .format(evalTemplate, new String[] {
+ eval.getId().toString(),
+ Tools.getISO8601DateFormated(eval
+ .getDateStart()),
+ Tools.getISO8601DateFormated(eval
+ .getDateEnd()),
+ Tools.escapeQuote(eval.getName()),
+ Tools.escapeQuote(description), color });
+ }
+ }
+
+ resJSON = jsonDataHeader + resJSON + jsonDataFooter;
+
+
+ int height = 538;
+
+
+ if (nbEval > 16){
+ height = height + ((nbEval -16) * 30);
+
+ }
+
+
+ refreshCalendar(getInnerWidth()-10, getInnerHeight()-5, resJSON);
+
+ cacheData = resJSON;
+
+
+ Tools.hideLoading();
+ }
+ };
+
+ Tools.showLoading(Messages.getString("MAJ_calendrier"),
+ Messages.getString("Chargement"));
+
+ RequestBuilder rb = null;
+
+ if (Tools.interfaceShown == Tools.EVAL_PEDA_INTERFACE) {
+ // pedagogique --> ne voit que ses evals
+ rb = ConnexionServer.definitionService.getOwnedEvaluationDefinitions(
+ UserTools.getUser().getUid(), callback);
+
+ }
+ if (Tools.interfaceShown == Tools.EVAL_INST_INTERFACE) {
+ // institutionnel --> voit toutes les evals
+ rb = ConnexionServer.definitionService
+ .getEvaluationDefinitions(callback);
+
+ }
+ if (Tools.interfaceShown == Tools.EVAL_TECH_INTERFACE) {
+ // normalement, le user n a pas acces ici mais bon...
+ // on lui affiche les siennes
+ rb = ConnexionServer.definitionService.getEvaluationDefinitions(
+ UserTools.getUser().getUid(), callback);
+
+ }
+ if (Tools.interfaceShown == Tools.USER_INTERFACE) {
+ // user --> les evals qui le concernent
+ rb = ConnexionServer.definitionService.getEvaluationDefinitions(
+ UserTools.getUser().getUid(), callback);
+
+ }
+
+ ConnexionServer.doSend(rb);
+
+ }
+
+ /**
+ * Refresh calendar.
+ *
+ * @param w the w
+ * @param h the h
+ * @param data the data
+ */
+ public void refreshCalendar(int w, int h, String data){
+
+
+ this.clear();
+ calendarRender = new CalendarRender(w, h, mode);
+ simileWidget = new TimeLineWidget(
+ "100%", "100%", calendarRender);
+
+ if (data == null){
+ data = cacheData;
+ }
+ if (data != null && !data.equals("")){
+ simileWidget.getEventSource().loadJSON(data);
+ }
+
+
+ add(simileWidget);
+
+ doLayout();
+ }
+
+ public void refreshCalendar(){
+ this.clear();
+
+
+
+ calendarRender = new CalendarRender(calendarRender.getW(), calendarRender.getH(), mode);
+ simileWidget = new TimeLineWidget(
+ "100%", "100%", calendarRender);
+
+
+ if (cacheData != null && !cacheData.equals("")){
+ simileWidget.getEventSource().loadJSON(cacheData);
+ }
+
+
+ add(simileWidget);
+
+ doLayout();
+ }
+}