/* * This file is part of anycook. The new internet cookbook * Copyright (C) 2014 Jan Graßegger * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see [http://www.gnu.org/licenses/]. */ package de.anycook.db.mysql; import de.anycook.recipe.ingredient.Ingredient; import de.anycook.recipe.step.Step; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedList; import java.util.List; public class DBStep extends DBHandler { public DBStep() throws SQLException { super(); } public List<Step> loadRecipeSteps(String recipeName) throws SQLException { List<Step> steps = new LinkedList<>(); PreparedStatement pStatement = connection.prepareStatement( "SELECT idschritte, schritte.beschreibung FROM gerichte " + "INNER JOIN schritte ON active_id = versions_id AND gerichte.name = versions_gerichte_name " + "WHERE gerichte.name = ? " + "ORDER BY idschritte"); pStatement.setString(1, recipeName); try (ResultSet data = pStatement.executeQuery()) { while (data.next()) { int stepId = data.getInt("idschritte"); String description = data.getString("schritte.beschreibung"); List<Ingredient> ingredients = loadStepIngredients(recipeName, stepId); steps.add(new Step(stepId, description, ingredients)); } } return steps; } public List<Step> loadRecipeSteps(String recipeName, int versionId) throws SQLException { List<Step> steps = new LinkedList<>(); PreparedStatement pStatement = connection.prepareStatement( "SELECT idschritte, beschreibung FROM schritte " + "WHERE versions_gerichte_name = ? AND versions_id = ? " + "ORDER BY idschritte"); pStatement.setString(1, recipeName); pStatement.setInt(2, versionId); try (ResultSet data = pStatement.executeQuery()) { while (data.next()) { int stepId = data.getInt("idschritte"); String description = data.getString("schritte.beschreibung"); List<Ingredient> ingredients = loadStepIngredients(recipeName, versionId, stepId); steps.add(new Step(stepId, description, ingredients)); } } return steps; } public List<Ingredient> loadStepIngredients(String recipeName, int stepId) throws SQLException { PreparedStatement preparedStatement = connection.prepareStatement("SELECT zutaten_name, singular, menge FROM gerichte " + "INNER JOIN schritte_has_zutaten ON active_id = schritte_versions_id AND gerichte.name = schritte_versions_gerichte_name " + "LEFT JOIN zutaten ON zutaten_name = zutaten.name " + "WHERE gerichte.name = ? AND schritte_idschritte = ? " + "ORDER BY position"); preparedStatement.setString(1, recipeName); preparedStatement.setInt(2, stepId); try (ResultSet data = preparedStatement.executeQuery()) { List<Ingredient> ingredients = new LinkedList<>(); while (data.next()) { String ingredientName = data.getString("zutaten_name"); String singular = data.getString("singular"); String amount = data.getString("menge"); ingredients.add(new Ingredient(ingredientName, singular, amount)); } return ingredients; } } public List<Ingredient> loadStepIngredients(String recipeName, int versionId, int stepId) throws SQLException { PreparedStatement preparedStatement = connection.prepareStatement("SELECT zutaten_name, singular, menge FROM schritte_has_zutaten " + "LEFT JOIN zutaten ON zutaten_name = zutaten.name " + "WHERE schritte_versions_gerichte_name = ? AND schritte_versions_id = ? AND schritte_idschritte = ? " + "ORDER BY position"); preparedStatement.setString(1, recipeName); preparedStatement.setInt(2, versionId); preparedStatement.setInt(3, stepId); try (ResultSet data = preparedStatement.executeQuery()) { List<Ingredient> ingredients = new LinkedList<>(); while (data.next()) { String ingredientName = data.getString("zutaten_name"); String singular = data.getString("singular"); String amount = data.getString("menge"); ingredients.add(new Ingredient(ingredientName, singular, amount)); } return ingredients; } } }