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 }