/* (non-Javadoc)
   * @see org.xmlrobot.hyperspace.Recurrence#mass(org.xmlrobot.genesis.MassListener, org.xmlrobot.horizon.Tachyon)
   */
  @Override
  public void mass(MassListener sender, Tachyon<?, ?> event) {
    super.mass(sender, event);

    switch (event.getCommand()) {
      case GENESIS:
        if (event.getSource() instanceof Columbia) {
          // cast child
          Columbia entity = (Columbia) event.getSource();
          // push supercluster into hyperspace
          put(entity, (Fornax) entity.get());
        }
        break;
      case ORDER:
        if (event.getSource() instanceof Cluster) {
          // declare stem
          Mass<Fornax, Columbia> future;
          // cast source
          Cluster pair = (Cluster) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? !future.contains(pair) : true
              : false) {
            // release child
            future.order(pair);
          }
        }
        break;
      case SEND:
        if (event.getSource() instanceof Cluster) {
          // get antimatter
          Mass<Fornax, Columbia> future;
          // cast source
          Cluster pair = (Cluster) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? !future.contains(pair) : true
              : false) {
            // submit child to the inheritance cycle
            future.add(pair);
          }
        }
        break;
      case PUSH:
        if (event.getSource() instanceof Columbia) {
          // check emptiness
          if (!isEmpty()) {
            // cast source
            Columbia key = (Columbia) event.getSource();
            // send pulse to child's value
            getValue().pulse(this, new Expansion(key));
          }
        } else if (event.getSource() instanceof Cluster) {
          // call child
          if (!isEmpty()) {
            // cast source
            Cluster pair = (Cluster) event.getSource();
            // emit mass to the future
            getChild().pulse(this, new Dilatation(pair));
          }
        }
        break;
      case RELEASE:
        if (event.getSource() instanceof Cluster) {
          // declare stem
          Mass<Fornax, Columbia> future;
          // cast source
          Cluster pair = (Cluster) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? future.contains(pair) : false
              : false) {
            // release child
            future.remove(pair);
          }
        }
        break;
      case SUBMIT:
        if (event.getSource() instanceof Cluster) {
          // declare stem
          Mass<Fornax, Columbia> future;
          // cast source
          Cluster pair = (Cluster) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? !future.contains(pair) : true
              : false) {
            // push child
            future.submit(pair);
          }
        }
        break;
      case TRANSFER:
        if (event.getSource() instanceof Capricornus) {
          // cast source
          Capricornus pair = (Capricornus) event.getSource();
          // make pair free
          pair.remove();
        } else if (event.getSource() instanceof Cluster) {
          // the funeral of cluster
          event.stop(getContext());
        }
        break;
      default:
        break;
    }
  }
  /* (non-Javadoc)
   * @see org.xmlrobot.hyperspace.Recurrence#mass(org.xmlrobot.genesis.MassListener, org.xmlrobot.horizon.Tachyon)
   */
  @Override
  public void mass(MassListener sender, Tachyon<?, ?> event) {
    super.mass(sender, event);

    switch (event.getCommand()) {
      case GENESIS:
        if (event.getSource() instanceof Ecosystem) {
          // cast source
          Ecosystem entity = (Ecosystem) event.getSource();
          // create key-value pair
          put(entity, (Biosphere) entity.get());
        }
        break;
      case ORDER:
        if (event.getSource() instanceof Earth) {
          // declare stem
          Mass<Biosphere, Ecosystem> future;
          // cast source
          Earth pair = (Earth) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? !future.contains(pair) : true
              : false) {
            // release child
            future.order(pair);
          }
        }
        break;
      case SEND:
        if (event.getSource() instanceof Earth) {
          // get matter
          Mass<Biosphere, Ecosystem> future;
          // cast source
          Earth pair = (Earth) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? !future.contains(pair) : true
              : false) {
            // submit child to the inheritance cycle
            future.add(pair);
          }
        }
        break;
      case PUSH:
        if (event.getSource() instanceof Ecosystem) {
          // check emptiness
          if (!isEmpty()) {
            // cast source
            Ecosystem key = (Ecosystem) event.getSource();
            // send pulse to child's value
            getValue().pulse(this, new Homogenization(key));
          }
        } else if (event.getSource() instanceof Earth) {
          // check emptiness
          if (!isEmpty()) {
            // cast source
            Earth earth = (Earth) event.getSource();
            // send him a little asteroid
            getChild().pulse(this, new Impact(earth));
          }
        }
        break;
      case RELEASE:
        if (event.getSource() instanceof Earth) {
          // declare stem
          Mass<Biosphere, Ecosystem> future;
          // cast source
          Earth pair = (Earth) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? future.contains(pair) : false
              : false) {
            // release child
            future.remove(pair);
          }
        }
        break;
      case SUBMIT:
        if (event.getSource() instanceof Earth) {
          // declare stem
          Mass<Biosphere, Ecosystem> future;
          // cast source
          Earth pair = (Earth) event.getSource();
          // check if empty and chained
          if ((future = get()) != null
              ? !future.isEmpty() ? !future.contains(pair) : true
              : false) {
            // push child
            future.submit(pair);
          }
        }
        break;
      case TRANSFER:
        if (event.getSource() instanceof Being) {
          // cast source
          Being pair = (Being) event.getSource();
          // free from inheritance
          pair.remove();
        } else if (event.getSource() instanceof Earth) {
          // the funeral
          event.stop(getContext());
        }
        break;
      default:
        break;
    }
  }