Пример #1
0
 BothWildcardPropertiesImpl(NestedWildcardPropertiesImpl accumulated) : this()
 {
     commonNestedProperties = accumulated.CommonNestedProperties();
 }
Пример #2
0
        InvertSelectedProperties(Properties properties)
        {
            IList <Property>             children = properties.Children;
            IDictionary <string, object> result   = new Dictionary <string, object>(children.Count);

            foreach (Property property in children)
            {
                PName  pname        = null;
                string propertyName = null;

                if (!property.IsWildcard)
                {
                    pname        = property.Identifier;
                    propertyName = pname.ns + pname.local;
                }

                switch (property.Type)
                {
                case PropertyType.IDENTIFIER:
                    if (property.IsWildcard)
                    {
                        if (result is SingletonWildcardProperties)
                        {
                            break;
                        }

                        if (result is NestedWildcardProperties)
                        {
                            result = new BothWildcardPropertiesImpl(
                                (NestedWildcardPropertiesImpl)result);
                        }
                        else
                        {
                            result = new SingletonWildcardPropertiesImpl();
                        }

                        break;
                    }
                    else
                    {
                        if (result is SingletonWildcardProperties)
                        {
                            break;
                        }
                    }

                    result.Add(propertyName,
                               OSLC4NetConstants.OSLC4NET_PROPERTY_SINGLETON);

                    break;

                case PropertyType.NESTED_PROPERTY:
                    if (property.IsWildcard)
                    {
                        if (!(result is NestedWildcardProperties))
                        {
                            if (result is SingletonWildcardProperties)
                            {
                                result = new BothWildcardPropertiesImpl();
                            }
                            else
                            {
                                result = new NestedWildcardPropertiesImpl(result);
                            }

                            ((NestedWildcardPropertiesImpl)result).commonNestedProperties =
                                InvertSelectedProperties((NestedProperty)property);
                        }
                        else
                        {
                            MergePropertyMaps(
                                ((NestedWildcardProperties)result).CommonNestedProperties(),
                                InvertSelectedProperties((NestedProperty)property));
                        }

                        break;
                    }

                    result.Add(propertyName,
                               InvertSelectedProperties(
                                   (NestedProperty)property));

                    break;
                }
            }

            if (!(result is NestedWildcardProperties))
            {
                return(result);
            }

            IDictionary <String, Object> commonNestedProperties =
                ((NestedWildcardProperties)result).CommonNestedProperties();

            foreach (string propertyName in result.Keys)
            {
                IDictionary <String, Object> nestedProperties =
                    (IDictionary <string, object>)result[propertyName];

                if (nestedProperties == OSLC4NetConstants.OSLC4NET_PROPERTY_SINGLETON)
                {
                    result.Add(propertyName, commonNestedProperties);
                }
                else
                {
                    MergePropertyMaps(nestedProperties, commonNestedProperties);
                }
            }

            return(result);
        }