Package org.olat.ldap.ui

Source Code of org.olat.ldap.ui.LDAPAdminController

/**
* 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) 2008 frentix GmbH, Switzerland<br>
* http://www.frentix.com
* <p>
*/
package org.olat.ldap.ui;

import java.text.DateFormat;
import java.util.Date;
import java.util.List;

import javax.naming.NamingException;
import javax.naming.directory.InitialDirContext;

import org.apache.log4j.Level;
import org.olat.core.commons.taskExecutor.TaskExecutorManager;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
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.BasicController;
import org.olat.core.gui.control.generic.wizard.Step;
import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
import org.olat.core.gui.control.generic.wizard.StepsRunContext;
import org.olat.core.id.Identity;
import org.olat.core.logging.LogRealTimeViewerController;
import org.olat.ldap.LDAPError;
import org.olat.ldap.LDAPLoginManager;

/**
* Description:<br>
* The LDAPAdminController offers an administrative panel to tweak some
* parameters and manually run an LDAP sync job
*
* <P>
* Initial Date: 21.08.2008 <br>
*
* @author gnaegi
*/
public class LDAPAdminController extends BasicController {
  private VelocityContainer ldapAdminVC;
  private DateFormat dateFormatter;
  private Link syncStartLink;
  private Link deletStartLink;
  private StepsMainRunController deleteStepController;
  private boolean hasIdentitiesToDelete;
  private boolean hasIdentitiesToDeleteAfterRun;
  private Integer amountUsersToDelete;
  private List<Identity> identitiesToDelete;

  protected LDAPAdminController(UserRequest ureq, WindowControl control) {
    super(ureq, control);
    ldapAdminVC = createVelocityContainer("ldapadmin");
    dateFormatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getLocale());
    updateLastSyncDateInVC();
    // Create start LDAP sync link
    syncStartLink = LinkFactory.createButton("sync.button.start", ldapAdminVC, this);
    // Create start delete User link
    deletStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this);
    // Create real-time log viewer
    LogRealTimeViewerController logViewController = new LogRealTimeViewerController(ureq, control, "org.olat.ldap", Level.INFO, true);
    listenTo(logViewController);
    ldapAdminVC.put("logViewController", logViewController.getInitialComponent());
    //
    putInitialPanel(ldapAdminVC);
  }

  /**
   * @see org.olat.core.gui.control.DefaultController#doDispose()
   */
  @Override
  protected void doDispose() {
    // Controller autodisposed by basic controller
  }

  /**
   * @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)
   */
  @Override
  protected void event(UserRequest ureq, Component source, Event event) {
    if (source == syncStartLink) {
      // Start sync job
      // Disable start link during sync
      syncStartLink.setEnabled(false);
      // Run sync task as background task to not block the user GUI
      Runnable batchSyncTask = new Runnable() {
        public void run() {
          LDAPError errors = new LDAPError();
          boolean success = LDAPLoginManager.getInstance().doBatchSync(errors);
          // notify controller and finish thread
          syncTaskFinished(success, errors);
        }       
      };
      TaskExecutorManager.getInstance().runTask(batchSyncTask);     
      showInfo("admin.synchronize.started");
    }

    else if (source == deletStartLink) {
      // cancel if some one else is making sync or delete job
      if (!LDAPLoginManager.getInstance().acquireSyncLock()) {
        showError("delete.error.lock");
      } else {
        deletStartLink.setEnabled(false);

        // check and get LDAP connection
        InitialDirContext ctx = LDAPLoginManager.getInstance().bindSystem();
        if (ctx == null) {
          showError("LDAP connection ERROR");
          return;
        }
        // get deleted users
        identitiesToDelete = LDAPLoginManager.getInstance().getIdentitysDeletedInLdap(ctx);
        try {
          ctx.close();
        } catch (NamingException e) {
          showError("Could not close LDAP connection on manual delete sync");
          logError("Could not close LDAP connection on manual delete sync", e);
        }
        if (identitiesToDelete != null && identitiesToDelete.size() != 0) {
          hasIdentitiesToDelete = true;
          /*
           * start step which spawns the whole wizard
           */
          Step start = new DeletStep00(ureq, hasIdentitiesToDelete, identitiesToDelete);
          /*
           * wizard finish callback called after "finish" is called
           */
          StepRunnerCallback finishCallback = new StepRunnerCallback() {
            public Step execute(UserRequest ureq, WindowControl control, StepsRunContext runContext) {
              hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue();
              if (hasIdentitiesToDeleteAfterRun) {
                List<Identity> identitiesToDelete = (List<Identity>) runContext.get("identitiesToDelete");
                amountUsersToDelete = identitiesToDelete.size();
                // Delete all identities now and tell everybody that
                // we are finished
                LDAPLoginManager.getInstance().deletIdentities(identitiesToDelete);
                return StepsMainRunController.DONE_MODIFIED;
              } else {
                return StepsMainRunController.DONE_UNCHANGED;
              }
              // otherwhise return without deleting anything
            }

          };
          deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null,
              translate("admin.deleteUser.title"));
          listenTo(deleteStepController);
          getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent());
        }
        else {
          hasIdentitiesToDelete = false;
          showInfo("delete.step.noUsers");
          deletStartLink.setEnabled(true);
          LDAPLoginManager.getInstance().freeSyncLock();
        }
      }
    }

  }
 
  /**
   * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
   *      org.olat.core.gui.controller.Controller,
   *      org.olat.core.gui.control.Event)
   */
  protected void event(UserRequest ureq, Controller source, Event event) {
    if (source == deleteStepController) {
      if (event == Event.CANCELLED_EVENT || event == Event.FAILED_EVENT) {
        getWindowControl().pop();
        removeAsListenerAndDispose(deleteStepController);
        showInfo("delete.step.cancel");
        LDAPLoginManager.getInstance().freeSyncLock();
        deletStartLink.setEnabled(true);
      } else if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) {
        getWindowControl().pop();
        removeAsListenerAndDispose(deleteStepController);
        if(hasIdentitiesToDeleteAfterRun){
          showInfo("delete.step.finish.users", amountUsersToDelete.toString());
        }
        else{
          showInfo("delete.step.finish.noUsers");
        }
        LDAPLoginManager.getInstance().freeSyncLock();
        deletStartLink.setEnabled(true);
      }
    }
  }
 
 
  /**
   * Callback method for asynchronous sync thread. Called when sync is finished
   *
   * @param success
   * @param errors
   */
  void syncTaskFinished(boolean success, LDAPError errors) {
    if (success) {
      showWarning("admin.synchronize.finished.success");
      logInfo("LDAP user synchronize job finished successfully", null);
    } else {
      showError("admin.synchronize.finished.failure", errors.get());
      logInfo("LDAP user synchronize job finished with errors::" + errors.get(), null);
    }
    // re-enable start link
    syncStartLink.setEnabled(true);
    // update last sync date
    updateLastSyncDateInVC();
  }
 
  /**
   * Internal helper to push the last sync date to velocity
   */
  private void updateLastSyncDateInVC() {
    Date date = LDAPLoginManager.getInstance().getLastSyncDate();
    if (date != null) {
      ldapAdminVC.contextPut("lastSyncDate", dateFormatter.format(date));
    }
  }

}
TOP

Related Classes of org.olat.ldap.ui.LDAPAdminController

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.