Chapter 7: My Favourite Movies Pod-Loader for new Pod filter example

Figure 1. This version of the create Pod method includes the creation of the movie title filter
001  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  }