--- /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;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JsArray;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Margins;
+import com.gwtext.client.core.RegionPosition;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.widgets.BoxComponent;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.Component;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.Viewport;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.event.PanelListenerAdapter;
+import com.gwtext.client.widgets.layout.AccordionLayout;
+import com.gwtext.client.widgets.layout.AnchorLayout;
+import com.gwtext.client.widgets.layout.AnchorLayoutData;
+import com.gwtext.client.widgets.layout.BorderLayout;
+import com.gwtext.client.widgets.layout.BorderLayoutData;
+import com.gwtext.client.widgets.layout.RowLayout;
+import com.pentila.evalcomp.client.event.EventListTab;
+import com.pentila.evalcomp.client.examen.ExamenLayout;
+import com.pentila.evalcomp.client.examen.GridGenerator;
+import com.pentila.evalcomp.client.factory.Factory;
+import com.pentila.evalcomp.client.factory.Instantiable;
+import com.pentila.evalcomp.client.factory.ReflectiveFactory;
+import com.pentila.evalcomp.client.i18n.Messages;
+import com.pentila.evalcomp.client.mainTab.GroupsManagementTab;
+import com.pentila.evalcomp.client.mainTab.SystemManagementTab;
+import com.pentila.evalcomp.client.message.MessagerieTab;
+import com.pentila.evalcomp.client.palette.AbstractPalettePanel;
+import com.pentila.evalcomp.client.palette.PaletteRegistry;
+import com.pentila.evalcomp.client.utilities.ConfigItem;
+import com.pentila.evalcomp.client.utilities.HistoryManager;
+import com.pentila.evalcomp.client.utilities.ITabManager;
+import com.pentila.evalcomp.client.utilities.Tools;
+import com.pentila.evalcomp.client.utilities.UserTools;
+import com.pentila.evalcomp.client.utilities.bridge.BridgeMethods;
+import com.pentila.evalcomp.client.widget.MainLeftPanel;
+import com.pentila.evalcomp.client.widget.TrashWidget;
+import com.pentila.evalcomp.domain.Entity;
+import com.pentila.evalcomp.domain.Group;
+import com.pentila.evalcomp.domain.User;
+import com.pentila.evalcomp.domain.definition.EvaluationDefinition;
+import com.pentila.evalcomp.domain.definition.EvaluationSubject;
+import com.pentila.evalcomp.domain.definition.MethodEval;
+import com.pentila.evalcomp.domain.examen.Examen;
+import com.pentila.evalcomp.domain.plan.Plan;
+import com.pentila.evalcomp.domain.transit.TReferentiel;
+
+
+/**
+ * Entry point classes define <code>onModuleLoad()</code>. GUI for Technical
+ * user Can manage group and user (Can import them)
+ */
+public class EvalCompTech implements EntryPoint, ITabManager {
+
+ /** The eval history. */
+ public EvaluationDefinition evalHistory = null;
+
+ /** The history manager. */
+ private HistoryManager historyManager = null;
+
+ // definition de la colonne de gauche
+ /** The main left panel. */
+ private MainLeftPanel mainLeftPanel;
+
+ /** The main palette (Tools) panel. */
+ private Panel mainPalettePanel;
+
+ /** The palette registry. */
+ private PaletteRegistry paletteRegistry;
+
+ /** The main right panel. */
+ private Panel mainRightPanel;
+
+ /** This is the entry point method. */
+
+ private Panel managementPanel;
+
+ /** The trash widget. */
+ private TrashWidget trashWidget;
+
+ /** The event list tab. */
+ private EventListTab eventListTab;
+
+ /** The groups management tab. */
+ public GroupsManagementTab groupsManagementTab;
+
+ /** The messagerie tab. */
+ private MessagerieTab messagerieTab;
+
+ /*
+ * public static EvalManagementTab evalManagementTab; public static
+ * ReferentielTab refManagementTab; public static EvalViewTab evalViewTab;
+ */
+ /** The user management tab. */
+ public SystemManagementTab systemPreferencesTab;
+
+ /** The border panel. */
+ private Panel borderPanel;
+
+ /** The viewport. */
+ private Viewport viewport;
+
+ private ExamenLayout examenTab;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#filterPaletteWithPlan
+ * (com.pentila.evalcomp.domain.plan.Plan)
+ */
+ public void filterPaletteWithPlan(Plan plan) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#getGroupsManagementTab
+ * ()
+ */
+ public GroupsManagementTab getGroupsManagementTab() {
+ // TODO Auto-generated method stub
+ return groupsManagementTab;
+ }
+
+ // Methodes public static destinée a etre appelee par la palette
+ // les groupes
+ /**
+ * Hide all tab.
+ */
+ private void hideAllTab() {
+ try{
+ managementPanel.removeAll(true);
+ }catch (Exception e){
+
+ }
+ }
+
+ /**
+ * Initialize GUI for technical user view.
+ */
+ private void initializeInterface() {
+ historyManager = new HistoryManager(this);
+ EvalCompHeader evalCompHeader = new EvalCompHeader(this);
+
+ borderPanel = new Panel();
+ borderPanel.setLayout(new BorderLayout());
+
+ borderPanel.add(evalCompHeader, new BorderLayoutData(RegionPosition.NORTH));
+
+ // Initialisation de la colonne de gauche
+/* mainLeftPanel = new MainLeftPanel("manager", this);
+ mainLeftPanel.setWidth("175px");
+
+ BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
+ westData.setSplit(true);
+ westData.setMinSize(175);
+ westData.setMaxSize(400);
+ westData.setMargins(new Margins(0, 0, 0, 0));
+
+ borderPanel.add(mainLeftPanel, westData);*/
+
+ // Initialisation des panel principaux
+ this.initializeMain();
+
+ borderPanel.add(managementPanel, new BorderLayoutData(RegionPosition.CENTER));
+
+ // Initialisation de la colonne de droite
+ this.initializeRightPanel();
+
+ // Add footer page
+ EvalCompFooter evalCompFooter = new EvalCompFooter();
+
+ BorderLayoutData southData = new BorderLayoutData(RegionPosition.SOUTH);
+
+ southData.setSplit(false);
+ borderPanel.add(evalCompFooter, southData);
+
+ viewport = new Viewport(borderPanel);
+
+
+ }
+
+ /**
+ * Initialize main GUI. Create and add tabs to the main panel.
+ */
+ private void initializeMain() {
+ managementPanel = new Panel();
+ managementPanel.setLayout(new AnchorLayout());
+ managementPanel.setBorder(true);
+
+ showSystemPreferences();
+
+ }
+
+ /**
+ * Initialize palette (Tools panels).
+ */
+ private void initializePalette() {
+
+
+ paletteRegistry = new PaletteRegistry();
+
+ mainPalettePanel = new Panel();
+ mainPalettePanel.setLayout(new AccordionLayout(true));
+
+ Factory factory = (Factory) GWT.create(ReflectiveFactory.class);
+
+ JsArray<ConfigItem> cs = getConfigPalettes();
+ for (int i = 0, n = cs.length(); i < n; ++i) {
+
+ ConfigItem ci = cs.get(i);
+
+ Instantiable inst = factory.newInstance(ci.getClassName());
+
+ AbstractPalettePanel app = (AbstractPalettePanel) inst;
+
+ app.setItManager(this);
+
+ String readO = ci.getReadOnly();
+ Boolean readOnly = readO == null || !readO.equals("false");
+ app.setReadOnly(readOnly);
+
+ app.initializePalette();
+ app.collapse();
+ paletteRegistry.add(ci.getId(), app);
+
+
+ mainPalettePanel.add( app );
+
+ }
+
+ ToolbarButton showUserManageButton = new ToolbarButton(Messages
+ .getString("preferences_systeme"));
+
+ showUserManageButton.setTooltip(Messages
+ .getString("preferences_systeme"));
+ showUserManageButton.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(Button button, EventObject e) {
+ showSystemPreferences();
+ }
+ });
+
+ mainRightPanel.setTitle(Messages.getString("Palette"));
+ mainRightPanel.setCollapsible(true);
+ mainRightPanel.setWidth("219px");
+ mainRightPanel.add(mainPalettePanel);
+ }
+
+ /**
+ * Initialize right panel. Tools panels and trash widget
+ */
+ private void initializeRightPanel() {
+ mainRightPanel = new Panel();
+ mainRightPanel.setLayout(new RowLayout());
+
+ mainRightPanel.setCollapsible(true);
+ this.initializePalette();
+
+ trashWidget = new TrashWidget();
+ mainRightPanel.add(trashWidget);
+
+ BorderLayoutData eastData = new BorderLayoutData(RegionPosition.EAST);
+ eastData.setSplit(true);
+ eastData.setMinSize(175);
+ eastData.setMaxSize(400);
+ eastData.setMargins(new Margins(0, 0, 0, 0));
+
+ borderPanel.add(mainRightPanel, eastData);
+ }
+
+ /* gestion de l'utilisateur */
+ /**
+ * Initialize user. Ask the user to EntityManager to store him inside the
+ * UserTools class.
+ */
+ private void initializeUser() {
+ // TODO Auto-generated method stub
+ AsyncCallback callback = new AsyncCallback() {
+
+ public void onFailure(Throwable caught) {
+ // do some UI stuff to show failure
+ System.out.println(Messages
+ .getString("Probleme_recuperation_utilisateur")); //$NON-NLS-1$
+ }
+
+ public void onSuccess(Object result) {
+ UserTools.setUser((User) result);
+ initializeInterface();
+ }
+ };
+ RequestBuilder b = ConnexionServer.entityService
+ .getCurrentUser(callback);
+ b.setHeader("code", "A1");
+ ConnexionServer.doSend(b);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#newMessage(com.pentila
+ * .evalcomp.domain.Entity,
+ * com.pentila.evalcomp.domain.definition.EvaluationDefinition,
+ * com.pentila.evalcomp.domain.definition.EvaluationSubject)
+ */
+ public void newMessage(Entity entity, EvaluationDefinition evalSelected,
+ EvaluationSubject evalSubselected) {
+ hideAllTab();
+ messagerieTab.show();
+ messagerieTab.showAddMessage(entity, evalSelected, evalSubselected);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.google.gwt.core.client.EntryPoint#onModuleLoad()
+ */
+ public void onModuleLoad() {
+ BridgeMethods.defineBridgeMethod();
+ Tools.interfaceShown = Tools.EVAL_TECH_INTERFACE;
+ /* initialisation de l'utilisateur authentifié */
+ this.initializeUser();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.pentila.evalcomp.client.utilities.ITabManager#showCalendar()
+ */
+ public void showCalendar() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showDashboard(com.pentila
+ * .evalcomp.domain.transit.TReferentiel)
+ */
+ public void showDashboard(TReferentiel ref) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showEval(com.pentila
+ * .evalcomp.domain.definition.EvaluationDefinition)
+ */
+ public void showEval(EvaluationDefinition eval, Boolean readOnly) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showEvalFolder(com.
+ * pentila.evalcomp.domain.transit.TReferentiel)
+ */
+ public void showEvalFolder(TReferentiel evalFolder) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.pentila.evalcomp.client.utilities.ITabManager#showEventList()
+ */
+ public void showEventList() {
+ hideAllTab();
+
+ //if (eventListTab == null){
+ eventListTab = new EventListTab();
+ //}
+
+ managementPanel.add(eventListTab, new AnchorLayoutData("100% 100%"));
+
+ eventListTab.updateEventList(0 ,20);
+ eventListTab.show();
+ eventListTab.doLayout();
+ managementPanel.doLayout();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showGroup(com.pentila
+ * .evalcomp.domain.Group, com.gwtext.client.data.Record, boolean)
+ */
+ public void showGroup(Group grp, Record userSelect, boolean showPanel) {
+
+ History.newItem("showGroup", false);
+
+ historyManager.addNewItem("showGroup", grp, userSelect);
+
+
+ //if (groupsManagementTab == null){
+ groupsManagementTab = new GroupsManagementTab(this, Messages
+ .getString("Gestion_groupes"));
+ //}
+
+ if (showPanel) {
+ hideAllTab();
+ managementPanel.add(groupsManagementTab, new AnchorLayoutData(
+ "100% 100%"));
+ groupsManagementTab.show();
+ groupsManagementTab.doLayout();
+ managementPanel.doLayout();
+
+ }
+ groupsManagementTab.showGroupSelected(grp, userSelect);
+ }
+
+ /**
+ * Show import users. the GUI used to import users and groups from a XML.
+ */
+ public void showSystemPreferences() {
+ hideAllTab();
+
+ //if (systemPreferencesTab == null){
+ systemPreferencesTab = new SystemManagementTab(this);
+ //}
+
+
+ managementPanel.add(systemPreferencesTab,
+ new AnchorLayoutData("100% 100%"));
+ systemPreferencesTab.show();
+ systemPreferencesTab.doLayout();
+ managementPanel.doLayout();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.pentila.evalcomp.client.utilities.ITabManager#showMessagerie()
+ */
+ public void showMessagerie() {
+ hideAllTab();
+
+ //if (messagerieTab == null){
+ messagerieTab = new MessagerieTab();
+ messagerieTab.initializeInterface();
+ //}
+ managementPanel.add(messagerieTab, new AnchorLayoutData("100% 100%"));
+ messagerieTab.showMessageList();
+ messagerieTab.show();
+ messagerieTab.doLayout();
+ managementPanel.doLayout();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showMethodEval(com.
+ * pentila.evalcomp.domain.definition.MethodEval)
+ */
+ public void showMethodEval(MethodEval methodEvalToBeModified) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * Show method eval.
+ *
+ * @param methodEvalToBeModified
+ * the method eval to be modified
+ * @param numberOfLevels
+ * the number of levels
+ */
+ public void showMethodEval(MethodEval methodEvalToBeModified,
+ int numberOfLevels) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showOrHideEvalTab(boolean
+ * )
+ */
+ public void showOrHideEvalTab(boolean show) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.pentila.evalcomp.client.utilities.ITabManager#showPlan(com.pentila
+ * .evalcomp.domain.plan.Plan)
+ */
+ public void showPlan(Plan plan, Boolean readOnly) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see com.pentila.evalcomp.client.utilities.ITabManager#showTodoList()
+ */
+ public void showTodoList() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see com.pentila.evalcomp.client.utilities.ITabManager#setHistoryManager(com.pentila.evalcomp.client.utilities.HistoryManager)
+ */
+ public void setHistoryManager(HistoryManager hm) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /* (non-Javadoc)
+ * @see com.pentila.evalcomp.client.utilities.ITabManager#getPaletteById(java.lang.String)
+ */
+ public AbstractPalettePanel getPaletteById(String id) {
+ return paletteRegistry.getPalette(id);
+ }
+
+ /**
+ * Gets the config palettes.
+ *
+ * @return the config palettes
+ */
+ private final native JsArray<ConfigItem> getConfigPalettes() /*-{
+ return $wnd.paletteConfig;
+ }-*/;
+
+ public void showExamen(Examen e) {
+ hideAllTab();
+
+ if (e != null){
+
+ examenTab = new ExamenLayout(this);
+ examenTab.initializeInterface();
+ examenTab.update();
+
+
+
+ managementPanel.add(examenTab, new AnchorLayoutData("100% 100%"));
+ examenTab.showExamen(e);
+ examenTab.show();
+ examenTab.doLayout();
+ }else{
+ final GridGenerator gc = new GridGenerator(this);
+ gc.initializeInterface();
+
+ final Panel p = new Panel();
+ p.add(gc);
+ p.setBorder(false);
+ p.addListener(new PanelListenerAdapter(){
+ public void onResize(BoxComponent component, int adjWidth,
+ int adjHeight, int rawWidth, int rawHeight) {
+
+ int containerW = p.getInnerWidth();
+ int containerH = p.getInnerHeight();
+
+ if (gc.getWidth() != containerW
+ || gc.getHeight() != containerH - 15) {
+
+ if (containerW > 0 && containerH - 15 > 0) {
+
+ gc.resizeTo(containerW, containerH - 15);
+
+
+ }
+
+ }
+
+ }
+
+ public void onDestroy(Component component) {
+
+ gc.destroy();
+
+ }
+ });
+
+ managementPanel.add(p, new AnchorLayoutData("100% 100%"));
+
+ }
+ managementPanel.doLayout();
+
+
+ }
+}