@SuppressWarnings("unchecked")
 @Override
 protected V getValue(OClass entity, String critery) {
   CustomAttributes custom;
   if ("clusterSelection".equals(critery)) {
     OClusterSelectionStrategy strategy = entity.getClusterSelection();
     return (V) (strategy != null ? strategy.getName() : null);
   } else if (OClassPrototyper.SUPER_CLASSES.equals(critery)) {
     List<OClass> superClasses = entity.getSuperClasses();
     // Additional wrapping to ArrayList is required , because getSuperClasses return unmodifiable
     // list
     return (V)
         (superClasses != null ? new ArrayList<OClass>(superClasses) : new ArrayList<OClass>());
   } else if ((CustomAttributes.ON_CREATE_FIELDS.getName().equals(critery))
       && (custom = CustomAttributes.fromString(critery)) != null) {
     String onCreateFields = custom.getValue(entity);
     return (V)
         (!Strings.isNullOrEmpty(onCreateFields)
             ? Lists.newArrayList(onCreateFields.split(","))
             : new ArrayList<String>());
   } else if ((custom = CustomAttributes.fromString(critery)) != null) {
     return custom.getValue(entity);
   } else {
     return (V) PropertyResolver.getValue(critery, entity);
   }
 }