﻿' Licensed to the Apache Software Foundation (ASF) under one or more
' contributor license agreements.  See the NOTICE file distributed with
' this work for additional information regarding copyright ownership.
' The ASF licenses this file to You under the Apache License, Version 2.0
' (the "License"); you may not use this file except in compliance with
' the License.  You may obtain a copy of the License at
'
'     http://www.apache.org/licenses/LICENSE-2.0
'
' Unless required by applicable law or agreed to in writing, software
' distributed under the License is distributed on an "AS IS" BASIS,
' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' See the License for the specific language governing permissions and
' limitations under the License.

Imports Usergrid.Sdk

Public Class AddBookForm

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        Dim b As Book
        b = New Book
        b.title = title.Text
        b.author = author.Text
        Settings.client.CreateEntity(Of Book)("books", b)
        MainWindow.updateBooks()
        Me.Close()
    End Sub

    Private Sub AddBookForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
End Class
