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

org.snapscript.core.type.index.PropertyNameExtractor Maven / Gradle / Ivy

package org.snapscript.core.type.index;

import static org.snapscript.core.Reserved.PROPERTY_GET;
import static org.snapscript.core.Reserved.PROPERTY_IS;
import static org.snapscript.core.Reserved.PROPERTY_SET;

import java.lang.reflect.Method;

import org.snapscript.core.function.Function;

public class PropertyNameExtractor {
   
   private static final String[] PREFIXES = { PROPERTY_GET, PROPERTY_SET, PROPERTY_IS }; 
   
   public static String getProperty(Method method) {
      String name = method.getName();
      
      for(String prefix : PREFIXES) {
         String property = getProperty(name, prefix);
         
         if(property != null) {
            return property;
         }
      }
      return name;
   }
   
   public static String getProperty(Function function) {
      String name = function.getName();
      
      for(String prefix : PREFIXES) {
         String property = getProperty(name, prefix);
         
         if(property != null) {
            return property;
         }
      }
      return name;
   }
   
   public static String getProperty(String function, String prefix) {
      int actual = function.length();
      int require = prefix.length();
      
      if(actual > require) {
         if(function.startsWith(prefix)) {
            String token = function.substring(require);
            return getProperty(token);
         }
         return null;
      }
      return function;
   }

   private static String getProperty(String name) {
      int length = name.length();

      if(length > 0) {
         char[] array = name.toCharArray();
         char first = array[0];

         if(!isAcronym(array)) {
            array[0] = toLowerCase(first);
         }
         return new String(array);
      }
      return name;
   }

   private static boolean isAcronym(char[] array) {
      if(array.length < 2) {
         return false;
      }
      if(!isUpperCase(array[0])) {
         return false;
      }
      return isUpperCase(array[1]);
   }

   private static char toLowerCase(char value) {
      return Character.toLowerCase(value);
   }

   private static boolean isUpperCase(char value) {
      return Character.isUpperCase(value);
   } 
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy