public static DomainSubtypeLookup GetDomainSubTypeLookup(Layer layer, FieldInfo field)
 {
     if (field.DomainSubtypeLookup != DomainSubtypeLookup.NotDefined)
     {
         return(field.DomainSubtypeLookup);
     }
     ESRI.ArcGIS.Client.FeatureLayer featureLayer = layer as ESRI.ArcGIS.Client.FeatureLayer;
     if (featureLayer == null)
     {
         field.DomainSubtypeLookup = DomainSubtypeLookup.None;
         return(field.DomainSubtypeLookup);
     }
     ESRI.ArcGIS.Client.FeatureService.FeatureLayerInfo featureLayerInfo = featureLayer.LayerInfo;
     if (featureLayerInfo != null)
     {
         Client.Field f = GetField(field.Name, featureLayerInfo.Fields);
         field.DomainSubtypeLookup = GetDomainSubTypeLookup(featureLayerInfo, f);
     }
     return(field.DomainSubtypeLookup);
 }
 public static Core.FieldInfo FieldInfoFromField(Layer layer, Client.Field field)
 {
     ESRI.ArcGIS.Mapping.Core.FieldInfo fieldInfo = new ESRI.ArcGIS.Mapping.Core.FieldInfo()
     {
         DisplayName               = field.Alias,
         AliasOnServer             = field.Alias,
         FieldType                 = mapFieldType(field.Type),
         Name                      = field.Name,
         VisibleInAttributeDisplay = true,
         VisibleOnMapTip           = true,
     };
     ESRI.ArcGIS.Client.FeatureLayer featureLayer = layer as ESRI.ArcGIS.Client.FeatureLayer;
     if (featureLayer != null)
     {
         ESRI.ArcGIS.Client.FeatureService.FeatureLayerInfo featureLayerInfo = featureLayer.LayerInfo;
         if (featureLayerInfo != null)
         {
             fieldInfo.DomainSubtypeLookup = GetDomainSubTypeLookup(featureLayerInfo, field);
         }
     }
     return(fieldInfo);
 }
        public static DomainSubtypeLookup GetDomainSubTypeLookup(FeatureLayerInfo featureLayerInfo, Client.Field field)
        {
            DomainSubtypeLookup lookup = DomainSubtypeLookup.None;

            if (featureLayerInfo != null)
            {
                Client.Field f = GetField(field.Name, featureLayerInfo.Fields);
                //Field has domain
                if (f != null && f.Domain is CodedValueDomain)
                {
                    lookup = DomainSubtypeLookup.FieldDomain;
                }
                //field is type id field
                else if (featureLayerInfo.TypeIdField == field.Name)
                {
                    lookup = DomainSubtypeLookup.TypeIdField;
                }
                //feature type defines domain for field
                else if (featureLayerInfo.FeatureTypes != null)
                {
                    foreach (KeyValuePair <object, FeatureType> fTypePair in featureLayerInfo.FeatureTypes)
                    {
                        if (fTypePair.Value != null && fTypePair.Value.Domains != null)
                        {
                            foreach (KeyValuePair <string, Domain> pair in fTypePair.Value.Domains)
                            {
                                if (pair.Key.Equals(field.Name) && pair.Value is CodedValueDomain)
                                {
                                    lookup = DomainSubtypeLookup.FeatureTypeDomain;
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            return(lookup);
        }
        public static object GetDomainValue(FeatureLayer featureLayer, IDictionary <string, object> attibutes, FieldInfo field)
        {
            object originalValue = string.Empty;
            string fieldName     = string.Empty;

            if (featureLayer == null)
            {
                return(originalValue);
            }
            if (field != null)
            {
                fieldName = field.Name;
            }
            if (attibutes != null)
            {
                originalValue = attibutes[field.Name];
                if (originalValue == null)
                {
                    if (attibutes.ContainsKey(field.DisplayName))
                    {
                        fieldName     = field.DisplayName;
                        originalValue = attibutes[field.DisplayName];
                    }
                    else
                    {
                        return(originalValue);
                    }
                }
            }
            if (featureLayer == null)
            {
                return(originalValue);
            }
            if (field.DomainSubtypeLookup == DomainSubtypeLookup.None || field.DomainSubtypeLookup == DomainSubtypeLookup.NotDefined)
            {
                return(originalValue);
            }
            ESRI.ArcGIS.Client.FeatureService.FeatureLayerInfo featureLayerInfo = featureLayer.LayerInfo;
            if (featureLayerInfo == null)
            {
                return(originalValue);
            }
            IDictionary <object, FeatureType> featureTypes = featureLayerInfo.FeatureTypes;

            if ((featureTypes == null) && (field.DomainSubtypeLookup != DomainSubtypeLookup.FieldDomain))
            {
                return(originalValue);
            }
            if (attibutes == null)
            {
                return(originalValue);
            }
            string domainCodedValue = string.Empty;
            object typeIdValue      = null;

            switch (field.DomainSubtypeLookup)
            {
            case DomainSubtypeLookup.NotDefined:
            case DomainSubtypeLookup.None:
                break;

            case DomainSubtypeLookup.FieldDomain:
                Client.Field f = GetField(field.Name, featureLayerInfo.Fields);
                if (f == null)
                {
                    return(originalValue);
                }
                return(GetDomainValue(originalValue, f.Domain as CodedValueDomain));

            case DomainSubtypeLookup.TypeIdField:
                if (!attibutes.ContainsKey(featureLayerInfo.TypeIdField))
                {
                    return(originalValue);
                }
                typeIdValue = attibutes[featureLayerInfo.TypeIdField];
                foreach (KeyValuePair <object, FeatureType> item in featureLayerInfo.FeatureTypes)
                {
                    if (item.Key.Equals(typeIdValue) && item.Value != null)
                    {
                        return(item.Value.Name);
                    }
                }
                break;

            case DomainSubtypeLookup.FeatureTypeDomain:
                if (!attibutes.ContainsKey(featureLayerInfo.TypeIdField))
                {
                    return(originalValue);
                }
                typeIdValue = attibutes[featureLayerInfo.TypeIdField];
                foreach (KeyValuePair <object, FeatureType> fTypePair in featureLayerInfo.FeatureTypes)
                {
                    if (fTypePair.Key.Equals(typeIdValue) && fTypePair.Value != null && fTypePair.Value.Domains != null)
                    {
                        foreach (KeyValuePair <string, Domain> pair in fTypePair.Value.Domains)
                        {
                            if (pair.Key.Equals(field.Name) && pair.Value is CodedValueDomain)
                            {
                                return(GetDomainValue(originalValue, pair.Value as CodedValueDomain));
                            }
                        }
                    }
                }
                break;

            default:
                break;
            }
            return(originalValue);
        }