Figure 1. This version of the create Pod method includes the creation of the movie title filter001 public Node createPod(Document document, Map<String,Object> contexts) {
002 try{
003 PodBuilder moviesPod =
004 PodBuilder.newPod(document, PODTYPE.MYFAVMOVIES);
005 moviesPod.setTitle("My Favourite Movies");
006
007 MoviesDB moviesDB = new MoviesDB();
008
009 // Create the configuration for the filter renderer.
010 RendererConfig titleFilterRenderer =
011 new RendererConfig(RendererConfigType.STYLE, "pod-text-filter");
012
013 // Create the filter.
014 PodFilter titleFilter =
015 new PodFilter("title", document, titleFilterRenderer);
016 titleFilter.addFilterLabel("Title");
017
018 // Retrieve the saved filter value and extract to an array
019 Node titleTextNode =
020 getPodFilterById(PODTYPE.MYFAVMOVIES, "title", document);
021 ArrayList<String> titleTextArray =
022 PodFilter.convertSelectionsNodeToArrayList(titleTextNode);
023
024 // Create the Node that the filter Renderer expects and add the
025 // saved filter text to it.
026 String titleFilterText = "";
027 if (!titleTextArray.isEmpty()) {
028 titleFilterText = titleTextArray.get(0);
029 }
030 Element titleFilterNode = document.createElement("text-filter");
031 titleTextNode = document.createTextNode(titleFilterText);
032 titleFilterNode.appendChild(titleTextNode);
033 titleFilter.addFilter(titleFilterNode);
034
035 // Add the title filter to the Pod
036 moviesPod.addFilter(titleFilter);
037
038 // Create the configuration for the drop down filter.
039 RendererConfig filterRenderer =
040 new RendererConfig(RendererConfigType.DOMAIN, "CT_CHOICE");
041
042 // Create the PodFitler
043 PodFilter genreFilter =
044 new PodFilter("genre", document, filterRenderer);
045
046 // Create genre list
047 HashMap<String, String> genres = new HashMap<String, String>();
048 genres.put("all", "- All -");
049 genres.put("horror", "Horror");
050 genres.put("drama", "Drama");
051 genres.put("romance", "Romance");
052 genres.put("comedy", "Comedy");
053 genres.put("action", "Action");
054
055 // Create the options and selections using the ChoiceBuilder.
056 ChoiceBuilder choices =
057 ChoiceBuilder.newInstance(genres, document);
058
059 // Return the last saved selection for the filter with id "genre".
060 Node genreSelectionNode =
061 getPodFilterById(PODTYPE.MYFAVMOVIES, "genre", document);
062
063 // Convert the Node to an ArrayList.
064 ArrayList<String> selectedGenres =
065 PodFilter.convertSelectionsNodeToArrayList(genreSelectionNode);
066
067 // Create a default genre selection.
068 if (selectedGenres.isEmpty()){
069 selectedGenres.add("all");
070 }
071 choices.addSelection(selectedGenres.get(0));
072 choices.setTypeOfDisplay("listdropdown");
073
074 genreFilter.addFilter(choices.getWidgetRootNode());
075
076 // Add a filter label
077 genreFilter.addFilterLabel("Genre");
078 genreFilter.addCSSClasses("genre-filter");
079 moviesPod.addFilter(genreFilter);
080
081
082 Collection<MoviesDB.Movie> favMovieCollection =
083 moviesDB.getAllMovies();
084 Iterator<MoviesDB.Movie> movieList =
085 favMovieCollection.iterator();
086
087 // Create the list
088 ListBuilder myFavouriteMovies =
089 ListBuilder.createList(1, document);
090
091 int row = 1;
092 while(movieList.hasNext()) {
093 Movie movie = movieList.next();
094 String movieName = movie.title;
095 String selectedGenre = selectedGenres.get(0);
096 if (selectedGenre.equals(movie.genre)
097 || selectedGenre.equals("all")){
098
099 if (movieName.toUpperCase().indexOf(
100 titleFilterText.toUpperCase()) != -1) {
101 myFavouriteMovies.addRow();
102 myFavouriteMovies.addEntry(1, row++, movieName);
103 }
104 }
105 }
106
107 RendererConfig contentRenderer = new RendererConfig(
108 RendererConfigType.STYLE, "single-list");
109 moviesPod.addContent(myFavouriteMovies, contentRenderer);
110
111 return moviesPod.getWidgetRootNode();
112 }catch(Exception e){
113 throw new RuntimeException(e);
114 }
115 }