// Copyright 2020 Google LLC
//
// Licensed 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
//
//     https://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.

package com.google.sps.wikiimport;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Entity;
import java.io.IOException;  
import java.net.URLDecoder;  
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import com.google.sps.data.Meal;

@WebServlet("/import")
public class WikiImportServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
        String json = request.getQueryString().replaceAll("input=", "");
        try {
            json = URLDecoder.decode(json);
        } catch (Exception e) {  
            System.out.println("Issue while decoding" +e.getMessage());
            return;  
        } 
        // Checking if JSON String is correct.
        System.out.println(json);
        Meal meal = new Gson().fromJson(json, Meal.class);
        System.out.println(meal.getTitle());

        // Put new Meal Entity to Datastore.
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        datastore.put(createMealEntity(meal));
    }

    /**
     * Creates an entity for Datastore with properties of class Meal.
     * @param meal object of class Meal for which the entity is creating.
     * @return new Entity object with necessary properties.
     */
    private Entity createMealEntity(Meal meal) {
        Entity mealEntity = new Entity("Meal");
        mealEntity.setProperty("id", meal.getId());
        mealEntity.setProperty("title", meal.getTitle());
        mealEntity.setProperty("description", meal.getDescription());
        mealEntity.setProperty("ingredients", meal.getIngredients());
        mealEntity.setProperty("type", meal.getType());
 
        return mealEntity;
    }
}
@@ -907,30 +907,172 @@
 ort 
-java.io.IOException;  
+com.google.gson.Gson;%0Aimport com.google.sps.data.Meal;%0Aimport com.google.sps.data.DataConverter;%0Aimport java.io.IOException;  %0Aimport org.apache.commons.io.IOUtils;
 %0Aimp
@@ -1418,70 +1418,8 @@
 nse;
-%0Aimport com.google.gson.Gson;%0Aimport com.google.sps.data.Meal;
 %0A%0A@W
@@ -1529,10 +1529,11 @@
 d do
-Ge
+Pos
 t(Ht
@@ -1606,16 +1606,17 @@
 xception
+ 
 %7B%0A      
@@ -1635,56 +1635,44 @@
 n = 
-request.getQueryString().replaceAll(%22input=%22, %22%22
+IOUtils.toString(request.getReader()
 );%0A 
@@ -1871,89 +1871,8 @@
  %7D %0A
-        // Checking if JSON String is correct.%0A        System.out.println(json);%0A
     
@@ -1953,16 +1953,26 @@
 println(
+%22meal %22 + 
 meal.get
@@ -2133,16 +2133,30 @@
 ore.put(
+DataConverter.
 createMe
@@ -2173,343 +2173,20 @@
 eal)
-);%0A    %7D%0A%0A    /**%0A     * Creates an entity for Datastore with properties of class Meal.%0A     * @param meal object of class Meal for which the entity is creating.%0A     * @return new Entity object with necessary properties.%0A     */%0A    private Entity createMealEntity(Meal meal) %7B%0A        Entity mealEntity = new Entity(%22Meal%22
 );%0A
+%0A
         
 meal
@@ -2185,333 +2185,94 @@
     
-mealEntity.setProperty(%22id%22, meal.getId());%0A        mealEntity.setProperty(%22title%22, meal.getTitle());%0A        mealEntity.setProperty(%22description%22, meal.getDescription());%0A        mealEntity.setProperty(%22ingredients%22, meal.getIngredients());%0A        mealEntity.setProperty(%22type%22, meal.getType());%0A %0A        return mealEntity
+response.setContentType(%22application/json;%22);%0A        response.getWriter().print(json)
 ;%0A  

Update WikiImportServlet