Web implementation of the Gourmet Recipe Manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

283 lines
5.8 KiB

package com.mousetech.gourmetj;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mousetech.gourmetj.persistence.model.Recipe;
import com.mousetech.gourmetj.persistence.service.RecipeService;
import jakarta.annotation.PostConstruct;
import jakarta.faces.event.AjaxBehaviorEvent;
import jakarta.faces.model.DataModel;
import jakarta.faces.model.ListDataModel;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
/**
* Main control panel backing bean.
*
* @author timh
* @since Jun 28, 2012
*/
@Named
@ViewScoped
public class AdminMainBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 2L;
public AdminMainBean() {
}
/* Logger */
private static final Logger log =
LoggerFactory.getLogger(AdminMainBean.class);
/**
* Persistency service for Recipes.
*/
@Inject
transient RecipeService recipeService;
public void setRecipeService(RecipeService service) {
log.debug("INJECT RECIPESERVICE===" + service);
this.recipeService = service;
}
// **
@Inject
private CookieBean cookieBean;
/**
* @return the cookieBean
*/
public CookieBean getCookieBean() {
return cookieBean;
}
/**
* @param cookieBean the cookieBean to set.
* @deprecated Not invoked by @Inject
*/
public void setCookieBean(CookieBean cookieBean) {
this.cookieBean = cookieBean;
}
// **
@Inject
private UserSession userSession;
/**
* @return the userSession
*/
public UserSession getUserSession() {
return userSession;
}
/**
* @param userSession the userSession to set
*/
public void setUserSession(UserSession userSession) {
this.userSession = userSession;
}
// **
private String searchText;
/**
* @return the searchText
*/
public String getSearchText() {
// if (this.searchResults == null) {
// this.setSearchText(cookieBean.getSearchText());
// }
this.searchText = cookieBean.getSearchText();
return searchText;
}
/**
* @param searchText the searchText to set
*/
public void setSearchText(String searchText) {
this.searchText = searchText;
cookieBean.setSearchText(searchText);
}
private List<String> suggestionList = null;
public void resetSuggestions() {
suggestionList = null;
}
public List<String> searchSuggestionList(String query) {
if (suggestionList == null) {
switch (searchtypeEnum()) {
case rst_BY_CATEGORY:
suggestionList = recipeService.findCategories();
break;
case rst_BY_CUISINE:
suggestionList = recipeService.findCuisines();
break;
default:
suggestionList = new ArrayList<String>(1);
}
}
return suggestionList;
}
private RecipeSearchType searchtypeEnum() {
int stn = cookieBean.getSearchType();
return searchtypeEnum(stn);
}
private RecipeSearchType searchtypeEnum(int stn) {
RecipeSearchType st = RecipeSearchType.values()[stn];
return st;
}
/**/
transient DataModel<Recipe> searchResults;
/**
* @return the searchResults
*/
public DataModel<Recipe> getSearchResults() {
if (searchResults == null) {
searchResults = new ListDataModel<Recipe>();
init(); // @PostConstruct is broken TODO: fixed??
}
return searchResults;
}
/**
* @param searchResults the searchResults to set
*/
public void setSearchResults(
DataModel<Recipe> searchResults) {
this.searchResults = searchResults;
}
/**
* Return to last search, if any No longer broken (required
* Maven include for annotation).
*/
@PostConstruct
void init() {
log.debug("Initializing AdminMainBean " + this);
this.setSearchText(cookieBean.getSearchText());
// Clean up from any previous operations.
this.userSession.setRecipe(null);
doFind();
}
/**
* Search, driven by AJAX
*
* @param event Notused
*/
public void ajaxUpdateList(AjaxBehaviorEvent event) {
this.doFind();
}
/**
* Reset search and display
*/
public void ajaxClearList() {
this.setSearchText("");
this.doFind();
}
/**
* Finder
*
* @return Navigation string
*/
public String doFind() {
List<Recipe> recipes = null;
if ( searchText == null ) {
setSearchText("");
}
searchText = searchText.trim();
RecipeSearchType st = searchtypeEnum();
switch (st) {
case rst_BY_NAME:
recipes = recipeService.findByTitle(searchText);
break;
case rst_BY_CATEGORY:
recipes =
recipeService.findByCategoryLike(searchText);
break;
case rst_BY_CUISINE:
recipes =
recipeService.findByCuisineLike(searchText);
break;
case rst_BY_INGREDIENT:
recipes = recipeService
.findByIngredientLike(searchText);
break;
default:
log.error("Invalid recipe search type: "
+ st);
break;
}
getSearchResults().setWrappedData(recipes);
return null; // Stay on page
}
/**
* Prep to create a new recipe
*
* @return navigation to detailEdit page
*/
public String doNewRecipe() {
// Clear for new recipe
this.userSession.setLastEdit(null);
// Construct a blank recipe to be created.
this.userSession.setRecipe(new Recipe());
return "detailEdit?faces-redirect=true";
}
/**
* Navigate to "More features" page (shopping list and
* maint.)
*/
public String doMore() {
return "shoppingList.jsf?redirect=true";
}
/**
* Show selected recipe
*
* @return
*/
public String showRecipe() {
long recipeId = getSearchResults().getRowData().getId();
// Flash Scope is buggy under Mojarra plus now using
// session
// JSFUtils.flashScope().put("recipeID",
// Long.valueOf(recipeId));
userSession.setLastEdit(recipeId);
userSession.setRecipe(null); // forces loading of line
// items.
return "recipeDetails?faces-redirect=true";
}
public String doLogout() {
JSFUtils.logout();
return null;
}
}