All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.nalukit.nalu.client.component.AbstractShell Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2018 - Frank Hossfeld
 *
 *  Licensed under the Apache License, Version 2.0 (the "License"); you may not
 *  use this file except in compliance with the License. You may obtain a copy of
 *  the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 *  License for the specific language governing permissions and limitations under
 *  the License.
 */

package com.github.nalukit.nalu.client.component;

import com.github.nalukit.nalu.client.IsRouter;
import com.github.nalukit.nalu.client.context.IsContext;
import com.github.nalukit.nalu.client.exception.RoutingInterceptionException;
import com.github.nalukit.nalu.client.internal.HandlerRegistrations;
import com.github.nalukit.nalu.client.internal.annotation.NaluInternalUse;
import org.gwtproject.event.shared.SimpleEventBus;

import java.util.HashMap;
import java.util.Map;

public abstract class AbstractShell
    implements IsShell {

  /* list fo composite controllers */
  private final Map> compositeControllers;
  protected IsRouter router;
  protected C context;
  protected     SimpleEventBus                                    eventBus;
  protected HandlerRegistrations handlerRegistrations = new HandlerRegistrations();

  public AbstractShell() {
    super();
    this.compositeControllers = new HashMap<>();
  }

  /**
   * The map of the depending on composites of the shell
   *
   * @return Map of depending on composites
   */
  @Override
  public Map> getComposites() {
    return compositeControllers;
  }

  /**
   * Returns the composite stored under the composite name.
   *
   * @param name the name of the composite
   * @param   type of the composite
   * @return instance of the composite
   */
  @Override
  @SuppressWarnings({ "unchecked",
                      "TypeParameterUnusedInFormals" })
  public > S getComposite(String name) {
    return (S) this.getComposites()
                   .get(name);
  }

  @NaluInternalUse
  public final void setRouter(IsRouter router) {
    this.router = router;
  }

  @NaluInternalUse
  public final void setContext(C context) {
    this.context = context;
  }

  @NaluInternalUse
  public final void setEventBus(SimpleEventBus eventBus) {
    this.eventBus = eventBus;
  }

  /**
   * Ovverride this method with the necessary code to remove the shell.
   */
  @Override
  public abstract void detachShell();

  @Override
  public void onAttachedComponent() {
    // override this method if you need to do something, after a component is attached!
  }

  /**
   * internal framework method! Will be called by the framework after the
   * stop-method f the controller is called
   * 

* DO NOT CALL THIS METHOD! THIS WILL LEAD TO UNEXPECTED BEHAVIOR! */ @Override public void removeHandlers() { this.handlerRegistrations.removeHandler(); this.handlerRegistrations = new HandlerRegistrations(); } /** * The bind-method will be called before the shell is added to the viewport. *

* This method runs before the component and composites are * created. This is f.e.: a got place to do some * authentication checks. *

* Keep in mind, that the method is asynchronous. Once you have * done your work, you have to call loader.continueLoading(). * Otherwise Nalu will stop working! *

* Attention: * Do not call super.bind(loader)! Cause this will tell Nalu to * continue loading! * * @param loader loader to tell Nalu to continue loading the shell * @throws RoutingInterceptionException in case the bind shell * process should be interrupted */ @Override public void bind(ShellLoader loader) throws RoutingInterceptionException { loader.continueLoading(); } }