Package org.olat.ims.cp.ui

Source Code of org.olat.ims.cp.ui.CPEditMainController

/**
* 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) 1999-2007 at Multimedia- & E-Learning Services (MELS),<br>
* University of Zurich, Switzerland.
* <p>
*/

package org.olat.ims.cp.ui;

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.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.ajax.tree.TreeNodeClickedEvent;
import org.olat.core.gui.control.generic.ajax.tree.TreeNodeModifiedEvent;
import org.olat.core.gui.control.generic.layout.MainLayout3ColumnsController;
import org.olat.core.id.OLATResourceable;
import org.olat.core.util.coordinate.CoordinatorManager;
import org.olat.core.util.coordinate.LockResult;
import org.olat.core.util.vfs.VFSContainer;
import org.olat.ims.cp.CPManager;
import org.olat.ims.cp.ContentPackage;
import org.olat.modules.cp.CPUIFactory;

/**
* The content packaging main edit controller.
*/
public class CPEditMainController extends MainLayoutBasicController {

  private LayoutMain3ColsController columnLayoutCtr;
  private CPContentController contentCtr;
  private CPTreeController treeCtr;
  private final ContentPackage cp;
  private LockResult lock;

  public CPEditMainController(UserRequest ureq, WindowControl wControl, VFSContainer cpContainer, OLATResourceable ores) {
    super(ureq, wControl);

    // acquire lock for resource
    lock = CoordinatorManager.getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), null);

    CPManager cpMgm = CPManager.getInstance();

    this.cp = cpMgm.load(cpContainer, ores);

    String errorString = cp.getLastError();
    if (errorString == null) {
      if (lock.isSuccess()) {
        initDefaultView(ureq, wControl);
      } else {
        showInfo("contentcontroller.no.lock");
        displayCP(ureq, wControl, cpContainer);
      }
    } else {
      initErrorView(ureq, wControl, errorString);
      this.showError("maincontroller.loaderror", errorString);
    }
    logAudit("cp editor started. oresId: " + ores.getResourceableId(), null);
  }

  /**
   * Displays the cp without being able to modify it.
   *
   * @param ureq
   * @param wControl
   * @param root
   */
  private void displayCP(UserRequest ureq, WindowControl wControl, VFSContainer root) {
    MainLayout3ColumnsController cpCtr = CPUIFactory.getInstance().createMainLayoutController(ureq, wControl, root, true);
    this.putInitialPanel(cpCtr.getInitialComponent());
  }

  /**
   * initializes default controllers
   *
   * @param ureq
   * @param wControl
   * @param cp
   */
  private void initDefaultView(UserRequest ureq, WindowControl wControl) {
    treeCtr = new CPTreeController(ureq, wControl, cp);
    listenTo(treeCtr);

    contentCtr = new CPContentController(ureq, wControl, cp);
    listenTo(contentCtr);
    contentCtr.init(ureq);

    // Make tree controller aware of contentCtr in order to display pages after
    // import.
    treeCtr.setContentController(contentCtr);

    columnLayoutCtr = new LayoutMain3ColsController(ureq, wControl, treeCtr.getInitialComponent(), null, contentCtr.getInitialComponent(),
        "cptestmain");
    columnLayoutCtr.addCssClassToMain("b_menu_toolbar");
    listenTo(columnLayoutCtr); // auto dispose

    this.putInitialPanel(columnLayoutCtr.getInitialComponent());

    if (!cp.isOLATContentPackage()) {
      showWarning("maincontroller.cp.created.with.third.party.editor");
    }
  }

  /**
   * initializes a special view, where the user is informed about errors. (while
   * loading cp)
   *
   * @param ureq
   * @param wControl
   * @param cp
   */
  private void initErrorView(UserRequest ureq, WindowControl wControl, String errorString) {
    Panel p = new Panel("errorPanel");
    columnLayoutCtr = new LayoutMain3ColsController(ureq, wControl, null, null, p, "cptestmain");
    this.putInitialPanel(columnLayoutCtr.getInitialComponent());
  }

  @Override
  protected void doDispose() {
    if (lock.isSuccess() && contentCtr != null) {
      // Save CP to zip
      CPManager.getInstance().writeToZip(cp);
    }
    // In any case, release the lock
    CoordinatorManager.getCoordinator().getLocker().releaseLock(lock);
    logAudit("finished editing cp. ores-id: " + cp.getResourcable().getResourceableId(), null);
  }

  @Override
  protected void event(UserRequest ureq, Component source, Event event) {
  // nothing
  }

  protected void event(UserRequest ureq, Controller source, Event event) {
    if (source == treeCtr) {
      // event from TreeController
      if (event instanceof TreeNodeClickedEvent) {
        TreeNodeClickedEvent clickedEvent = (TreeNodeClickedEvent) event;
        String nodeId = clickedEvent.getNodeId();
        contentCtr.displayPage(ureq, nodeId);

      } else if (event instanceof TreeNodeModifiedEvent) {
        TreeNodeModifiedEvent nodeEvent = (TreeNodeModifiedEvent) event;
        String nodeId = nodeEvent.getNodeId();
        String newItemTitle = nodeEvent.getModifiedValue();
        treeCtr.updateNode(nodeId, newItemTitle);

      } else if (event.getCommand().equals("New Page")) {
        String newIdentifier = treeCtr.addNewHTMLPage();
        contentCtr.displayPage(ureq, newIdentifier);

      } else if (event instanceof NewCPPageEvent) {
        contentCtr.displayPage(ureq, ((NewCPPageEvent) event).getCPPage().getIdentifier());
      }
    } else if (source == contentCtr) {
      // event from contentController
      if (event instanceof NewCPPageEvent) {
        NewCPPageEvent ncpEvent = (NewCPPageEvent) event;
        CPPage page = ncpEvent.getCPPage();
        if (event.getCommand().equals("New Page Saved")) {
          String newNodeID = treeCtr.addPage(page);
          contentCtr.newPageAdded(newNodeID);
          treeCtr.updatePage(page);

        } else if (event.getCommand().equals("Page Saved")) {
          treeCtr.updatePage(page);
          // Title could have changed -> dirty view
          treeCtr.getInitialComponent().setDirty(true);
        }

      } else if (event.getCommand().equals("Page loaded")) {
        CPPage page = contentCtr.getCurrentPage();
        if (page != null) {
          treeCtr.selectTreeNodeByCPPage(page);
        }
      }
    }
  }
}
TOP

Related Classes of org.olat.ims.cp.ui.CPEditMainController

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.