Esempio n. 1
0
        public void Init(ParsingContext context, ParseTreeNode parseNode)
        {
            var            multiplyString = parseNode.ChildNodes[0].Token.Text.ToUpper();
            CollectionType collectionType;

            switch (multiplyString)
            {
            case SonesGQLConstants.LISTOF:

                collectionType = CollectionType.List;
                break;

            case SonesGQLConstants.SETOF:

                collectionType = CollectionType.Set;
                break;

            case SonesGQLConstants.SETOFUUIDS:

            default:
                throw new InvalidOperationException(
                          String.Format("The specified command [{0}] is not valid.", multiplyString));
            }

            if (parseNode.ChildNodes[1].AstNode is TupleNode)
            {
                CollectionDefinition =
                    new CollectionDefinition(collectionType,
                                             ((TupleNode)parseNode.ChildNodes[1].AstNode).TupleDefinition);
            }
            else
            {
                throw new NotImplementedException("The following node cannot be created.");
            }
        }
Esempio n. 2
0
        public async Task <APIResponse> Get(string name)
        {
            _logger.LogInformation($"get request for id {name} recieved");

            var id = CollectionDefinition.BuildId(name);

            var response = await _collectionRepository.GetById(id).ConfigureAwait(false);

            response.Data.ExampleJsonObject = JsonSerializer.Deserialize <object>(response.Data.ExampleJsonObjectString);

            if (response.Ok)
            {
                _logger.LogInformation($"fetched collection {response.Id}");
                return(new APIResponse
                {
                    Request = Request.ToRequestString(),
                    Ok = true,
                    Result = "found",
                    Data = response.Data
                });
            }

            _logger.LogInformation($"unable to fetch collection( for {id}");
            return(APIResponse.NotOk(Request.ToRequestString(), "unable to fetch data from elasticsearch", HttpStatusCode.NotFound, response.Id));
        }
Esempio n. 3
0
        public async Task <APIResponse> Post(string name, string exampleIdPattern, [FromBody] ExpandoObject exampleJsonObject)
        {
            _logger.LogInformation($"post request recieved");

            var collectionDefinition = new CollectionDefinition
            {
                Name                    = name.ToLower(),
                ExampleIdPattern        = exampleIdPattern,
                ExampleJsonObjectString = JsonSerializer.Serialize <object>(exampleJsonObject, new JsonSerializerOptions {
                    WriteIndented = true
                })
            };

            var response = await _collectionRepository.Index(collectionDefinition.Id, collectionDefinition).ConfigureAwait(false);

            if (response.Ok)
            {
                _logger.LogInformation($"posted collection {response.Result} {response.Id}");
                return(new APIResponse
                {
                    Request = Request.ToRequestString(),
                    Ok = true,
                    Result = response.Result,
                    StatusCode = response.StatusCode,
                    Data = response.Id
                });
            }

            _logger.LogInformation($"unable to post collection to elasticsearch {response.StatusCode}");
            return(APIResponse.NotOk(Request.ToRequestString(), "unable to post data to elasticsearch", HttpStatusCode.BadRequest, response.Id));
        }
Esempio n. 4
0
        private async Task <CollectionDefinition> GetCollection(string collectionName)
        {
            var id       = CollectionDefinition.BuildId(collectionName);
            var response = await _collectionRepository.GetById(id).ConfigureAwait(false);

            if (response.Ok)
            {
                return(response.Data);
            }

            return(null);
        }
Esempio n. 5
0
 public void Init(ParsingContext context, ParseTreeNode parseNode)
 {
     if (parseNode.ChildNodes[0].AstNode is TupleNode)
     {
         CollectionDefinition =
             new CollectionDefinition(CollectionType.Set,
                                      ((TupleNode)parseNode.ChildNodes[0].AstNode).TupleDefinition);
     }
     else
     {
         CollectionDefinition =
             new CollectionDefinition(CollectionType.Set,
                                      (EdgeTypeEdgeIDCollectionNode)parseNode.ChildNodes[0].AstNode);
     }
 }
Esempio n. 6
0
        public void Init(ParsingContext context, ParseTreeNode parseNode)
        {
            var            multiplyString = parseNode.ChildNodes[0].Token.Text.ToUpper();
            CollectionType collectionType;

            switch (multiplyString)
            {
            case SonesGQLConstants.LISTOF:

                collectionType = CollectionType.List;

                break;

            case SonesGQLConstants.SETOF:

                collectionType = CollectionType.Set;

                break;

            case SonesGQLConstants.SETOFUUIDS:

                collectionType = CollectionType.SetOfUUIDs;

                break;

            default:

                throw new NotImplementedException("");
            }

            if (parseNode.ChildNodes[1].AstNode is TupleNode)
            {
                CollectionDefinition = new CollectionDefinition(collectionType, ((TupleNode)parseNode.ChildNodes[1].AstNode).TupleDefinition);
            }
            else
            {
                CollectionDefinition = new CollectionDefinition(collectionType, (VertexTypeVertexIDCollectionNode)parseNode.ChildNodes[1].AstNode);
            }
        }
Esempio n. 7
0
        public async Task <APIResponse> Delete(string name)
        {
            var id = CollectionDefinition.BuildId(name);

            _logger.LogInformation($"delete request recieved for id {id}");

            var collectionResponse = await _collectionRepository.GetById(id);

            if (!collectionResponse.Ok)
            {
                return(APIResponse.NotOk(Request.ToRequestString(), $"unable to delete data from elasticsearch, collection {name} not found", HttpStatusCode.NotFound));
            }
            await _collectionRepository.GetElasticBand().GetClient().DeleteAsync(collectionResponse.Data.Index);

            _logger.LogInformation($"deleted index {collectionResponse.Data.Index}");

            var deleteResponse = await _collectionRepository.Delete(id).ConfigureAwait(false);

            if (deleteResponse.Ok)
            {
                _logger.LogInformation($"deleted collection {name}");
                return(new APIResponse
                {
                    Request = Request.ToRequestString(),
                    Ok = true,
                    Result = "deleted",
                    Data = deleteResponse.Id
                });
            }

            _logger.LogInformation($"unable to delete collection with id {name} {deleteResponse.StatusCode}");
            return(APIResponse.NotOk(Request.ToRequestString(), "unable to delete data from elasticsearch", HttpStatusCode.NotFound, deleteResponse.Id));

            // TODO could do with logging helper which creates a trace id and logs request and response data automatically?
            // or stores up messages and appends them all as one log per request??
        }
        //-----------------------------------------------------------------------
        private static DataDefinition CreateDefinitionFromElement(XElement el, DataDefinition existing)
        {
            if (!el.HasElements)
            {
                // we are a primitive

                // are we a number?
                float fval;
                bool  isFloat = float.TryParse(el.Value, out fval);

                int  ival;
                bool isInt = int.TryParse(el.Value, out ival);

                bool bval;
                bool isBool = bool.TryParse(el.Value, out bval);

                if (existing != null)
                {
                    if (isFloat || isInt)
                    {
                        if (existing is NumberDefinition)
                        {
                            var def = existing as NumberDefinition;
                            if (!isInt)
                            {
                                def.UseIntegers = false;
                            }

                            if (fval < def.MinValue)
                            {
                                def.MinValue = fval;
                            }
                            if (fval > def.MaxValue)
                            {
                                def.MaxValue = fval;
                            }

                            return(def);
                        }
                        else
                        {
                            // we are actually a string
                            var def = new StringDefinition();
                            def.Name = el.Value.ToString();
                            return(def);
                        }
                    }
                    else if (isBool)
                    {
                        if (existing is BooleanDefinition)
                        {
                            return(existing);
                        }
                        else
                        {
                            // we are actually a string
                            var def = new StringDefinition();
                            def.Name = el.Value.ToString();
                            return(def);
                        }
                    }
                    else
                    {
                        if (existing is EnumDefinition)
                        {
                            if (el.Value.Contains("/") || el.Value.Contains(@"\\"))
                            {
                                var def = new FileDefinition();
                                def.Name = el.Name.ToString();

                                return(def);
                            }
                            else if (el.Value.Contains(" "))
                            {
                                var def = new StringDefinition();
                                def.Name = el.Name.ToString();

                                return(def);
                            }
                            else
                            {
                                var def = existing as EnumDefinition;
                                if (!def.EnumValues.Contains(el.Value))
                                {
                                    def.EnumValues.Add(el.Value);
                                }

                                return(def);
                            }
                        }
                        else
                        {
                            return(existing);
                        }
                    }
                }
                else
                {
                    if (isFloat || isInt)
                    {
                        var def = new NumberDefinition();
                        def.Name        = el.Name.ToString();
                        def.UseIntegers = isInt;
                        def.MinValue    = fval;
                        def.MaxValue    = fval;

                        return(def);
                    }
                    else if (isBool)
                    {
                        var def = new BooleanDefinition();
                        def.Name = el.Name.ToString();

                        return(def);
                    }
                    else
                    {
                        if (el.Value.Contains("/") || el.Value.Contains(@"\\"))
                        {
                            var def = new FileDefinition();
                            def.Name = el.Name.ToString();

                            return(def);
                        }
                        else if (el.Value.Contains(" "))
                        {
                            var def = new StringDefinition();
                            def.Name = el.Name.ToString();

                            return(def);
                        }
                        else
                        {
                            var def = new EnumDefinition();
                            def.Name       = el.Name.ToString();
                            def.EnumValues = new List <string>();
                            def.EnumValues.Add(el.Value);

                            return(def);
                        }
                    }
                }
            }
            else if (el.Elements().Any(e => e.Name.ToString() != el.Elements().First().Name.ToString()))
            {
                // we are a struct

                if (existing != null)
                {
                    var def = existing as StructDefinition;

                    if (def != null)
                    {
                        foreach (var cel in el.Elements())
                        {
                            if (el.Elements(cel.Name).Count() > 1)
                            {
                                // this is actually a collection
                                var existingChild           = def.Children.FirstOrDefault(e => e.Name == cel.Name.ToString());
                                CollectionDefinition coldef = null;

                                if (existingChild == null)
                                {
                                    coldef      = new CollectionDefinition();
                                    coldef.Name = cel.Name.ToString();
                                    coldef.ChildDefinitions.Add(new CollectionChildDefinition());
                                    coldef.ChildDefinitions[0].Name = cel.Name.ToString();

                                    def.Children.Add(coldef);
                                }
                                else if (existingChild is CollectionDefinition)
                                {
                                    coldef = existingChild as CollectionDefinition;
                                }
                                else
                                {
                                    coldef      = new CollectionDefinition();
                                    coldef.Name = cel.Name.ToString();
                                    coldef.ChildDefinitions.Add(new CollectionChildDefinition());
                                    coldef.ChildDefinitions[0].Name = cel.Name.ToString();
                                    coldef.ChildDefinitions[0].WrappedDefinition = existingChild;

                                    var index = def.Children.IndexOf(existingChild);
                                    def.Children[index] = coldef;
                                }

                                coldef.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, coldef.ChildDefinitions[0].WrappedDefinition);
                            }
                            else
                            {
                                // find existing child
                                var ec = def.Children.FirstOrDefault(e => e.Name == cel.Name.ToString());
                                if (ec != null)
                                {
                                    if (ec is CollectionDefinition)
                                    {
                                        var actualDef = CreateDefinitionFromElement(cel, null);
                                        if (actualDef is CollectionDefinition)
                                        {
                                            var cdef = CreateDefinitionFromElement(cel, ec);
                                            def.Children[def.Children.IndexOf(ec)] = cdef;
                                        }
                                        else
                                        {
                                            var coldef = ec as CollectionDefinition;

                                            coldef.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, coldef.ChildDefinitions[0].WrappedDefinition);
                                        }
                                    }
                                    else
                                    {
                                        var cdef = CreateDefinitionFromElement(cel, ec);
                                        def.Children[def.Children.IndexOf(ec)] = cdef;
                                    }
                                }
                                else
                                {
                                    var cdef = CreateDefinitionFromElement(cel, null);
                                    def.Children.Add(cdef);
                                }
                            }
                        }
                    }

                    return(existing);
                }
                else
                {
                    var def = new StructDefinition();
                    def.Name = el.Name.ToString();

                    foreach (var cel in el.Elements())
                    {
                        if (el.Elements(cel.Name).Count() > 1)
                        {
                            // this is actually a collection

                            CollectionDefinition coldef = def.Children.FirstOrDefault(e => e.Name == cel.Name.ToString()) as CollectionDefinition;
                            if (coldef == null)
                            {
                                coldef      = new CollectionDefinition();
                                coldef.Name = cel.Name.ToString();
                                coldef.ChildDefinitions.Add(new CollectionChildDefinition());
                                coldef.ChildDefinitions[0].Name = cel.Name.ToString();

                                def.Children.Add(coldef);
                            }

                            coldef.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, coldef.ChildDefinitions[0].WrappedDefinition);
                        }
                        else
                        {
                            var cdef = CreateDefinitionFromElement(cel, null);
                            def.Children.Add(cdef);
                        }
                    }

                    return(def);
                }
            }
            else
            {
                // we are a collection
                if (existing != null)
                {
                    if (existing is CollectionDefinition)
                    {
                        var def = existing as CollectionDefinition;

                        foreach (var cel in el.Elements())
                        {
                            def.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, def.ChildDefinitions[0].WrappedDefinition);
                        }

                        return(def);
                    }
                    else
                    {
                        var def = new CollectionDefinition();
                        def.Name = el.Name.ToString();
                        def.ChildDefinitions.Add(new CollectionChildDefinition());
                        def.ChildDefinitions[0].Name = el.Elements().First().Name.ToString();
                        def.ChildDefinitions[0].WrappedDefinition = existing;

                        foreach (var cel in el.Elements())
                        {
                            def.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, def.ChildDefinitions[0].WrappedDefinition);
                        }

                        return(def);
                    }
                }
                else
                {
                    var def = new CollectionDefinition();
                    def.Name = el.Name.ToString();
                    def.ChildDefinitions.Add(new CollectionChildDefinition());
                    def.ChildDefinitions[0].Name = el.Elements().First().Name.ToString();

                    foreach (var cel in el.Elements())
                    {
                        def.ChildDefinitions[0].WrappedDefinition = CreateDefinitionFromElement(cel, def.ChildDefinitions[0].WrappedDefinition);
                    }

                    return(def);
                }
            }

            throw new Exception("Failed to parse element: " + el.Name);
        }
Esempio n. 9
0
 public ArrayTypeMap(ISerializerCache serializerCache, CollectionDefinition collectionDefinition, ITypeMap elementTypeMap)
     : base(collectionDefinition)
 {
     this.serializerCache = serializerCache;
     this.elementTypeMap  = elementTypeMap;
 }