Esempio n. 1
0
  @Override
  public void processSimEvent(SimEvent event) {

    Object[] requestedParameters = event.getParameters();
    Method requestedMethod = this.lookupMethodForSimEvent(event);

    // this is consistent with the behavior pattern set by SimEntityBase
    if (null == requestedMethod) {
      return;
    }

    try {
      Level l = Level.FINEST;
      if (LOG.isLoggable(l)) {
        LOG.log(
            l,
            LogString.format(
                eventList,
                "Will invoke "
                    + requestedMethod.toGenericString()
                    + " on "
                    + this.toString()
                    + " which was found under the annotation sim event name \'"
                    + event.getEventName()
                    + "\'"));
      }
      requestedMethod.invoke(this, requestedParameters);

    } catch (IllegalAccessException ex) {
      throw new RuntimeException(ex);
    } catch (IllegalArgumentException ex) {
      throw new RuntimeException(ex);
    } catch (InvocationTargetException ex) {
      throw new RuntimeException(ex);
    }
  }
Esempio n. 2
0
  protected Method lookupMethodForSimEvent(SimEvent event) {

    String requestedEvent = event.getEventName();
    Class<?>[] requestedSignature = new Class<?>[event.getSignature().length];

    // <ugh>

    Object[] args = event.getParameters();
    for (int i = 0; i < args.length; i++) {
      if (null == args[i]) {
        break;
      }
      Class<?> c = args[i].getClass();
      requestedSignature[i] = c;
    }
    // </ugh>

    Map<Class<?>[], Method> signatureKeyedMethods =
        eventMethodMap.get(getClass()).get(requestedEvent);

    Method requestedMethod = null;

    for (Class<?>[] sig : signatureKeyedMethods.keySet()) {
      if (callableArgTypes(sig, requestedSignature)) {
        requestedMethod = signatureKeyedMethods.get(sig);
      }
    }

    // special case, ignore other entities' run events
    if (requestedEvent.equalsIgnoreCase("Run") && event.getSource() != this) {
      requestedMethod = null;
    }

    if (null == requestedMethod) {
      Level l = Level.WARNING;
      if (LOG.isLoggable(l)) {
        StringBuilder buff = new StringBuilder("(");
        int z = requestedSignature.length;
        if (z == 0) {
          buff.append(")");
        } else {
          for (Class c : requestedSignature) {
            buff.append(c.getName());
            if (z > 0) {
              buff.append(", ");
            } else {
              buff.append(")");
            }
            z--;
          }
        }
        LOG.log(
            l,
            "No method having signature compatible with "
                + buff
                + " was found for event '"
                + requestedEvent
                + "' in "
                + this.getClass().getSimpleName());
      }
    }
    return requestedMethod;
  }