Android Open Source - nadia Slot Provider Method Pair






From Project

Back to project page nadia.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project nadia listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * SlotProviderMethodPair.java//from w  ww. j a  v  a 2 s  .c o  m
 * 
 * Copyright (c) 2013, Emmanuel Arana Corzo. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301  USA
 */

package com.redarctic.nadia.ext.simplesignalslot;

import java.lang.reflect.Method;

public class SlotProviderMethodPair {
  public static SlotProviderMethodPair create(ISlotProvider slotProvider,
      String slotMethodName, Class slotParameterTypes[]) {
    Method m = getMethodWithParam(slotProvider, slotMethodName,
        slotParameterTypes);

    return initPair(slotProvider, m);

  }

  public static SlotProviderMethodPair create(ISlotProvider slotProvider,
      String slotMethodName, Class slotParameterType) {
    return create(slotProvider, slotMethodName,
        new Class[] { slotParameterType });

  }

  public static SlotProviderMethodPair create(Class cls,
      String slotMethodName, Class slotParameterTypes[]) {
    Method m = getMethodWithParam(cls, slotMethodName, slotParameterTypes);

    return initPair(null, m);

  }

  public static SlotProviderMethodPair create(Class cls,
      String slotMethodName, Class slotParameterType) {
    return create(cls, slotMethodName, new Class[] { slotParameterType });

  }

  /**
   * 
   * @param slotProvider
   *            can be null if the method is a static method (since going to
   *            act on a class)
   * @param m
   * @return
   * @throws RuntimeException
   *             slot method not found;
   */
  private static SlotProviderMethodPair initPair(ISlotProvider slotProvider,
      Method m) {
    if (m != null) {
      SlotProviderMethodPair pair = new SlotProviderMethodPair();
      pair.slotProvider = slotProvider;
      pair.slotMethod = m;
      pair.slotMethod.setAccessible(true);
      return pair;
    }

    throw new RuntimeException("slot method not found");
  }

  public static SlotProviderMethodPair create(ISlotProvider slotProvider,
      String slotMethodName) {
    Method m = getMethodNoParam(slotProvider, slotMethodName);

    return initPair(slotProvider, m);
  }

  public static SlotProviderMethodPair create(Class cls, String slotMethodName) {
    Method m = getMethodNoParam(cls, slotMethodName);

    return initPair(null, m);
  }

  /**
   * 
   * @param o
   * @param methodName
   * @param parameterTypes
   * @return null if cannot find a match
   */
  private static Method getMethodWithParam(Object o, String methodName,
      Class parameterTypes[]) {
    return getMethodWithParam(o.getClass(), methodName, parameterTypes);
  }

  private static Method getMethodWithParam(Class cls, String methodName,
      Class parameterTypes[]) {
    Method m[] = cls.getMethods();
    Method result = null; // tentatively

    for (int i = 0; i < m.length; ++i) {
      if (m[i].getName().equals(methodName)
          && haveExactNames(m[i].getParameterTypes(), parameterTypes)) {
        result = m[i]; // found a match
        break;
      }
    }

    return result;
  }

  private static Method getMethodNoParam(Object o, String methodName) {
    return getMethodNoParam(o.getClass(), methodName);
  }

  private static Method getMethodNoParam(Class cls, String methodName) {
    Method m[] = cls.getMethods();
    Method result = null; // tentatively

    for (int i = 0; i < m.length; ++i) {
      if (m[i].getName().equals(methodName)
          && (m[i].getParameterTypes().length == 0)) {
        result = m[i]; // found a match
        break;
      }
    }

    return result;
  }

  /**
   * Only permits exact class names; ignores whether a pair of types might be
   * of assignable form.
   * 
   * @param pt1
   * @param pt2
   * @return null if any pair of names is different
   */
  private static boolean haveExactNames(Class pt1[], Class pt2[]) {
    if (pt1.length != pt2.length) {
      return false;
    }

    for (int i = 0; i < pt1.length; ++i) {
      // any pair of different names stops the comparison
      if (!(pt1[i].getName().equals(pt2[i].getName()))) {
        return false;
      }
    }

    return true;
  }

  public ISlotProvider getSlotProvider() {
    return slotProvider;
  }

  public Method getSlotMethod() {
    return slotMethod;
  }

  private ISlotProvider slotProvider;
  private Method slotMethod;
}




Java Source Code List

com.ashokgelal.samaya.DateTimeFormatter.java
com.ashokgelal.samaya.DateTimeInterval.java
com.ashokgelal.samaya.DateTimeParser.java
com.ashokgelal.samaya.DateTime.java
com.ashokgelal.samaya.ModelUtil.java
com.ashokgelal.samaya.Samaya.java
com.ashokgelal.samaya.TimeSpan.java
com.ashokgelal.samaya.ToStringUtil.java
com.ashokgelal.samaya.Util.java
com.redarctic.nadia.baseengine.BaseGameState.java
com.redarctic.nadia.baseengine.ColorPallete.java
com.redarctic.nadia.baseengine.DrawableGameComponent.java
com.redarctic.nadia.baseengine.DrawableObject.java
com.redarctic.nadia.baseengine.GameComponent.java
com.redarctic.nadia.baseengine.GameStateManager.java
com.redarctic.nadia.baseengine.GameState.java
com.redarctic.nadia.baseengine.GameSurfaceView.java
com.redarctic.nadia.baseengine.GameSurface.java
com.redarctic.nadia.baseengine.SpriteFont.java
com.redarctic.nadia.baseengine.Sprite.java
com.redarctic.nadia.baseengine.character.BaseModifier.java
com.redarctic.nadia.baseengine.character.Classes.java
com.redarctic.nadia.baseengine.character.FormulaModifierException.java
com.redarctic.nadia.baseengine.character.Player.java
com.redarctic.nadia.baseengine.item.ArmorLocation.java
com.redarctic.nadia.baseengine.item.Armor.java
com.redarctic.nadia.baseengine.item.BaseItem.java
com.redarctic.nadia.baseengine.item.ItemManager.java
com.redarctic.nadia.baseengine.item.ItemType.java
com.redarctic.nadia.baseengine.item.Shield.java
com.redarctic.nadia.baseengine.item.Weapon.java
com.redarctic.nadia.baseengine.item.WeaponsType.java
com.redarctic.nadia.baseengine.sprite.AnimatedSprite.java
com.redarctic.nadia.baseengine.sprite.AnimationException.java
com.redarctic.nadia.baseengine.sprite.AnimationKey.java
com.redarctic.nadia.baseengine.sprite.Animation.java
com.redarctic.nadia.baseengine.tileengine.Camera.java
com.redarctic.nadia.baseengine.tileengine.Engine.java
com.redarctic.nadia.baseengine.tileengine.MapLayer.java
com.redarctic.nadia.baseengine.tileengine.TileException.java
com.redarctic.nadia.baseengine.tileengine.TileMap.java
com.redarctic.nadia.baseengine.tileengine.Tile.java
com.redarctic.nadia.baseengine.tileengine.Tileset.java
com.redarctic.nadia.baseengine.world.Level.java
com.redarctic.nadia.baseengine.world.World.java
com.redarctic.nadia.collision.Circle.java
com.redarctic.nadia.collision.CollisionPolygon.java
com.redarctic.nadia.collision.ConvexPolygonException.java
com.redarctic.nadia.collision.Rectangle.java
com.redarctic.nadia.controls.ButtonPad.java
com.redarctic.nadia.controls.DirectionalPad.java
com.redarctic.nadia.controls.menu.CharacterDialog.java
com.redarctic.nadia.controls.menu.ControlBorder.java
com.redarctic.nadia.controls.menu.ControlManager.java
com.redarctic.nadia.controls.menu.Control.java
com.redarctic.nadia.controls.menu.Label.java
com.redarctic.nadia.controls.menu.LeftRightSelector.java
com.redarctic.nadia.controls.menu.LinkLabel.java
com.redarctic.nadia.controls.menu.Menu.java
com.redarctic.nadia.controls.menu.PictureBox.java
com.redarctic.nadia.controls.menu.SimpleConversation.java
com.redarctic.nadia.ext.MathHelper.java
com.redarctic.nadia.ext.StringHelper.java
com.redarctic.nadia.ext.simplesignalslot.ISignalProvider.java
com.redarctic.nadia.ext.simplesignalslot.ISlotProvider.java
com.redarctic.nadia.ext.simplesignalslot.PrimitiveWrapper.java
com.redarctic.nadia.ext.simplesignalslot.SignalSlotMap.java
com.redarctic.nadia.ext.simplesignalslot.SignalSlotPair.java
com.redarctic.nadia.ext.simplesignalslot.SlotProviderMethodPair.java