예제 #1
0
        public Table CreateTable(string tableName, string label, IEnumerable <Field> fields)
        {
            if (Session.Disconnected)
            {
                Session.Reconnect();
            }

            var tableDescriptor = new TableDescriptor()
            {
                name   = tableName,
                label  = label,
                plural = tableName + "s"
            };

            var fieldDescriptors = new List <FieldDescriptor>();

            foreach (var f in fields)
            {
                fieldDescriptors.Add(f.AsFieldDescriptor());
            }

            tableDescriptor.field = fieldDescriptors;

            // build up a request to create the table
            var request = Session.GetSessionRequest(m_uris.SchemaRoot, Method.POST);

            request.JsonSerializer.ContentType = "application/json; charset=utf-8";
            request.JsonSerializer.Options     = new SerializerOptions()
            {
                SkipNullProperties = true
            };
            request.AddBody(tableDescriptor);

            // create the table
            var response = Session.Client.Execute(request);

            // check response
            switch (response.StatusCode)
            {
            case HttpStatusCode.Created:
            case HttpStatusCode.OK:
                // query the table schema back
                var actualTable = new Table(Session, tableName);

                lock (m_tableCache)
                {
                    m_tableCache.Add(actualTable.Name, actualTable);
                }

                // TODO: handle failure

                return(actualTable);

            case HttpStatusCode.Forbidden:
            case HttpStatusCode.Unauthorized:
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }

                Session.Disconnected = true;

                throw DreamFactoryException.Parse(response);

            default:
                throw DreamFactoryException.Parse(response);
            }
        }
예제 #2
0
        public Table UpdateTable(string tableName, IEnumerable <Field> updatedFieldList)
        {
            if (Session.Disconnected)
            {
                Session.Reconnect();
            }

            var tableDescriptor = new TableDescriptor();

            tableDescriptor.name  = tableName;
            tableDescriptor.field = new List <FieldDescriptor>();
            foreach (var f in updatedFieldList)
            {
                tableDescriptor.field.Add(f.AsFieldDescriptor());
            }

            var request = Session.GetSessionRequest(m_uris.GetTableSchema(tableName), Method.PATCH);

            request.JsonSerializer.ContentType = "application/json; charset=utf-8";
            request.JsonSerializer.Options     = new SerializerOptions()
            {
                SkipNullProperties = true
            };
            request.AddBody(tableDescriptor);

            // create the table
            var response = Session.Client.Execute(request);

            // check response
            switch (response.StatusCode)
            {
            case HttpStatusCode.OK:
                // query the table schema back
                var actualTable = new Table(Session, tableName);

                lock (m_tableCache)
                {
                    if (!m_tableCache.ContainsKey(actualTable.Name))
                    {
                        m_tableCache.Add(actualTable.Name, actualTable);
                    }
                    else
                    {
                        m_tableCache[actualTable.Name] = actualTable;
                    }
                }

                // TODO: handle failure

                return(actualTable);

            case HttpStatusCode.Forbidden:
            case HttpStatusCode.Unauthorized:
                if (Debugger.IsAttached)
                {
                    Debugger.Break();
                }

                Session.Disconnected = true;

                throw DreamFactoryException.Parse(response);

            default:
                throw DreamFactoryException.Parse(response);
            }
        }