Chapter 8: My Favourite Movies Pod-Loader for localization example

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