private void processReferences(Type type, IList<PropertyMetadata> properties){
            foreach (var property in type.GetProperties().Where(p => p.hasAttribute(typeof (RefAttribute)))){
                var r = property.getFirstAttribute<RefAttribute>();
                var a = r.Alias;
                if (a.noContent()){
                    a = storage.Resolve(property.PropertyType).Name;
                }
                PropertyMetadata lookup = null;
                if (r.AutoComplete.noContent() && !r.IsAutoComplete){
                    var luData = string.Format("hql:from {0}", a);
                    if (r.LookupData.hasContent()){
                        luData = r.LookupData;
                    }

                    lookup = new PropertyMetadata(property.Name, property.PropertyType, luData, r.Nullable);
                }
                else{
                    lookup = new PropertyMetadata(property.Name, property.PropertyType);
                    lookup.IsNullable = r.Nullable;
                    lookup.Autocomplete = true;
                    lookup.AutocompleteType = r.AutoCompleteType;
                    lookup.AutocompleteCustom = r.AutoComplete;
                }
                if (r.Title.hasContent()){
                    lookup.SetTitle(r.Title);
                }
                properties.Add(lookup);
            }
        }
 private void processMaps(Type type, IList<PropertyMetadata> properties){
     foreach (var property in type.GetProperties().Where(p => p.hasAttribute(typeof (MapAttribute)))){
         var r = property.getFirstAttribute<MapAttribute>();
         var name = r.Title;
         if (name.noContent()){
             name = property.Name;
         }
         var prop = new PropertyMetadata(property.Name, property.PropertyType).SetTitle(name);
         if (property.PropertyType.IsEnum){
             prop.FixedList = string.Join(",", Enum.GetNames(property.PropertyType));
         }
         properties.Add(prop);
     }
 }