} catch (SQLException sqle) { System.out.println("Exception in insertLibRecipe: " + sqle); Thread.dumpStack(); return null; }
    public String insertLibRecipe(RecipeComponent rc) throws SQLException {        String recipeId = checkRecipeExistence(rc);        if (recipeId != null) return recipeId;        recipeId = getNextId("queryMaxRecipeId", "RECIPE-");        substitutions.put(":recipe_id:", recipeId);        substitutions.put(":java_class:", rc.getClass().getName());        substitutions.put(":description:", "No description available");        executeUpdate(dbp.getQuery("insertLibRecipe", substitutions));        int order = 0;        for (Iterator j = rc.getLocalPropertyNames(); j.hasNext(); ) {            CompositeName pname = (CompositeName) j.next();            Property prop = rc.getProperty(pname);            Object val = prop.getValue();            if (val == null) continue; // Don't write null values            String sval = val.toString();            if (sval.equals("")) continue; // Don't write empty values            String name = pname.last().toString();            substitutions.put(":arg_name:", name);            substitutions.put(":arg_value:", sval);            substitutions.put(":arg_order:", String.valueOf(order++));            executeUpdate(dbp.getQuery("insertLibRecipeProp", substitutions));        }        return recipeId;    }