Package org.olat.course.groupsandrights.ui

Source Code of org.olat.course.groupsandrights.ui.CourseGroupManagementMainController

/**
* OLAT - Online Learning and Training<br>
* http://www.olat.org
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <p>
*/

package org.olat.course.groupsandrights.ui;

import java.util.List;

import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.panel.Panel;
import org.olat.core.gui.components.table.BooleanColumnDescriptor;
import org.olat.core.gui.components.table.DefaultColumnDescriptor;
import org.olat.core.gui.components.table.Table;
import org.olat.core.gui.components.table.TableController;
import org.olat.core.gui.components.table.TableEvent;
import org.olat.core.gui.components.table.TableGuiConfiguration;
import org.olat.core.gui.components.tree.GenericTreeModel;
import org.olat.core.gui.components.tree.GenericTreeNode;
import org.olat.core.gui.components.tree.MenuTree;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.MainLayoutBasicController;
import org.olat.core.gui.control.generic.tool.ToolController;
import org.olat.core.gui.control.generic.tool.ToolFactory;
import org.olat.core.gui.translator.PackageTranslator;
import org.olat.core.gui.translator.Translator;
import org.olat.core.id.OLATResourceable;
import org.olat.core.logging.AssertException;
import org.olat.core.logging.activity.ActionType;
import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
import org.olat.core.util.Util;
import org.olat.course.CourseFactory;
import org.olat.course.ICourse;
import org.olat.course.groupsandrights.CourseGroupManager;
import org.olat.group.BusinessGroup;
import org.olat.group.GroupLoggingAction;
import org.olat.group.context.BGContext;
import org.olat.group.context.BGContextManager;
import org.olat.group.context.BGContextManagerImpl;
import org.olat.group.ui.BGControllerFactory;
import org.olat.group.ui.context.BGContextEditController;
import org.olat.group.ui.context.BGContextTableModel;
import org.olat.group.ui.management.BGManagementController;
import org.olat.resource.OLATResource;
import org.olat.resource.OLATResourceManager;
import org.olat.util.logging.activity.LoggingResourceable;

/**
* Description:<BR/> This controller searches for available group contexts for
* this course. Currently only one context per grouptype per course is
* supported. <P/>
*
* Initial Date: Aug 25, 2004
* @author gnaegi
*/
public class CourseGroupManagementMainController extends MainLayoutBasicController {
  private static final String CMD_CLOSE = "cmd.close";
  private static final String CMD_CONTEXT_RUN = "cmd.context.run";

  private Panel content;

  private LayoutMain3ColsController columnLayoutCtr;
  private MenuTree olatMenuTree;
  private ToolController toolC;

  private VelocityContainer contextListVC;
  private TableController contextListCtr;
  private BGContextTableModel contextTableModel;

  private BGManagementController groupManageCtr;
  private String groupType;
  private OLATResourceable ores;
 
  /**
   * Constructor for the course group management main controller
   *
   * @param ureq
   * @param wControl
   * @param course
   * @param groupType
   */
  public CourseGroupManagementMainController(UserRequest ureq, WindowControl wControl, OLATResourceable ores, String groupType) {
    super(ureq, wControl);
   
    getUserActivityLogger().setStickyActionType(ActionType.admin);
   
    this.ores = ores;
    this.groupType = groupType;
    // set user activity logger for this controller
    ICourse course = CourseFactory.loadCourse(ores);
    addLoggingResourceable(LoggingResourceable.wrap(course));

    CourseGroupManager groupManager = course.getCourseEnvironment().getCourseGroupManager();

    List groupContexts;
    String defaultContextName;
   
    // init content panel. current panel content will be set later in init process, use null for now
    content = putInitialPanel(null);

    if (BusinessGroup.TYPE_LEARNINGROUP.equals(groupType)) {
      groupContexts = groupManager.getLearningGroupContexts();
      defaultContextName = CourseGroupManager.DEFAULT_NAME_LC_PREFIX + course.getCourseTitle();
    } else if (BusinessGroup.TYPE_RIGHTGROUP.equals(groupType)) {
      groupContexts = groupManager.getRightGroupContexts();
      defaultContextName = CourseGroupManager.DEFAULT_NAME_RC_PREFIX + course.getCourseTitle();
    } else {
      throw new AssertException("Invalid group type ::" + groupType);
    }

    if (groupContexts.size() == 0) {
      // create new default context if none exists
      BGContextManager contextManager = BGContextManagerImpl.getInstance();
      OLATResource courseResource = OLATResourceManager.getInstance().findOrPersistResourceable(course);
      BGContext context = contextManager.createAndAddBGContextToResource(defaultContextName, courseResource, groupType, null, true);
      groupContexts.add(context);
      doInitGroupmanagement(ureq, context, false);
    } else if (groupContexts.size() == 1) {
      BGContext context = (BGContext) groupContexts.get(0);
      doInitGroupmanagement(ureq, context, false);
    } else {
      // multiple, show list first
      Translator fallback = new PackageTranslator(Util.getPackageName(BGContextEditController.class), ureq.getLocale());
      setTranslator(Util.createPackageTranslator(this.getClass(), ureq.getLocale(), fallback));
      doInitContextListLayout(ureq);
      doInitContextList(ureq, groupContexts);
    }
   
  }

  private void doInitContextListLayout(UserRequest ureq) {
    // Layout is controlled with generic controller: menu - content - tools to
    // look the same as in the groupmanagement
    // 1) menu
    olatMenuTree = new MenuTree("olatMenuTree");
    GenericTreeModel gtm = new GenericTreeModel();
    GenericTreeNode root = new GenericTreeNode();
    if (groupType.equals(BusinessGroup.TYPE_RIGHTGROUP)) {
      root.setTitle(translate("rightmanagement.index"));
      root.setAltText(translate("rightmanagement.index.alt"));
    } else {
      root.setTitle(translate("groupmanagement.index"));
      root.setAltText(translate("groupmanagement.index.alt"));
    }
    gtm.setRootNode(root);
    olatMenuTree.setTreeModel(gtm);
    olatMenuTree.setSelectedNodeId(gtm.getRootNode().getIdent());
    // 2) context list
    contextListVC = createVelocityContainer("contextlist");
    // 3) tools
    toolC = ToolFactory.createToolController(getWindowControl());
    listenTo(toolC);
    if (groupType.equals(BusinessGroup.TYPE_RIGHTGROUP)) toolC.addHeader(translate("tools.title.rightmanagement"));
    else toolC.addHeader(translate("tools.title.groupmanagement"));
    toolC.addLink(CMD_CLOSE, translate(CMD_CLOSE), null, "b_toolbox_close");
    // now build layout controller
    columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), olatMenuTree, toolC.getInitialComponent(), contextListVC, null);
    listenTo(columnLayoutCtr); // cleanup on dispose
  }

  private void doInitContextList(UserRequest ureq, List groupContexts) {
    TableGuiConfiguration tableConfig = new TableGuiConfiguration();
    tableConfig.setTableEmptyMessage(translate("contextlist.no.contexts"));
    // init group list filter controller
    removeAsListenerAndDispose(contextListCtr);
    contextListCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator(), null);
    listenTo(contextListCtr);
    contextListCtr.addColumnDescriptor(new DefaultColumnDescriptor("contextlist.table.name", 0, CMD_CONTEXT_RUN, ureq.getLocale()));
    contextListCtr.addColumnDescriptor(new DefaultColumnDescriptor("contextlist.table.desc", 1, null, ureq.getLocale()));
    contextListCtr.addColumnDescriptor(new BooleanColumnDescriptor("contextlist.table.default", 2, null,
        translate("contextlist.table.default.true"), translate("contextlist.table.default.false")));
    contextListVC.put("contextlist", contextListCtr.getInitialComponent());

    contextTableModel = new BGContextTableModel(groupContexts, getTranslator(), false, true);
    contextListCtr.setTableDataModel(contextTableModel);
    content.setContent(columnLayoutCtr.getInitialComponent());
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
   *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
   */
  public void event(UserRequest ureq, Component source, Event event) {
  // empty
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
   *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
   */
  public void event(UserRequest ureq, Controller source, Event event) {
    if (source == groupManageCtr) {
      if (event == Event.DONE_EVENT) {
        // Send done event to parent controller
        fireEvent(ureq, Event.DONE_EVENT);
      } else if (event == Event.BACK_EVENT) {
        // show context list again
        // reinitialize context list since it could be dirty
        List groupContexts;
        ICourse course = CourseFactory.loadCourse(ores);
        CourseGroupManager groupManager = course.getCourseEnvironment().getCourseGroupManager();
        if (BusinessGroup.TYPE_LEARNINGROUP.equals(groupType)) {
          groupContexts = groupManager.getLearningGroupContexts();
        } else {
          groupContexts = groupManager.getRightGroupContexts();
        }
        doInitContextList(ureq, groupContexts);
        content.setContent(columnLayoutCtr.getInitialComponent());
      }
    } else if (source == contextListCtr) {
      if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
        TableEvent te = (TableEvent) event;
        String actionid = te.getActionId();
        int rowid = te.getRowId();
        BGContext context = contextTableModel.getGroupContextAt(rowid);
        if (actionid.equals(CMD_CONTEXT_RUN)) {
          doInitGroupmanagement(ureq, context, true);
        }
      }
    } else if (source == toolC) {
      if (event.getCommand().equals(CMD_CLOSE)) {
        fireEvent(ureq, Event.DONE_EVENT);
      }
    }

  }

  private void doInitGroupmanagement(UserRequest ureq, BGContext groupContext, boolean contextSelectSwitch) {
    // launch generic group management controller
    removeAsListenerAndDispose(groupManageCtr);
    groupManageCtr = BGControllerFactory.getInstance().createManagementController(ureq, getWindowControl(), groupContext, contextSelectSwitch);
    listenTo(groupManageCtr);
    content.setContent(groupManageCtr.getInitialComponent());
   
    // logging
    addLoggingResourceable(LoggingResourceable.wrap(groupContext));
    ThreadLocalUserActivityLogger.log(GroupLoggingAction.GROUPMANAGEMENT_START, getClass());
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
   */
  protected void doDispose() {
    ThreadLocalUserActivityLogger.log(GroupLoggingAction.GROUPMANAGEMENT_CLOSE, getClass());

    // Controllers disposed by BasicController:
    columnLayoutCtr = null;
    groupManageCtr = null;
    contextListCtr = null;
    toolC = null;
  }

}
TOP

Related Classes of org.olat.course.groupsandrights.ui.CourseGroupManagementMainController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.