movie search

master
Herwig Birke 5 years ago
parent 66874f5563
commit cc5d6d6fdc

@ -50,4 +50,17 @@ public class movieListSelectorComposer extends SelectorComposer<Component>
window.doModal();
}
@Listen("onClick = #searchMovie")
public void onSearchMovie()
{
Map<String, Object> arguments = new HashMap<String, Object>();
arguments.put("movieList", movieList);
String template = "/movie/searchMovie.zul";
Window window = (Window) Executions.createComponents(template, null, arguments);
window.doModal();
}
}

@ -0,0 +1,78 @@
package at.windesign.application.movie;
import org.zkoss.image.AImage;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import java.net.URL;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
public class movieSearchForwardComposer extends GenericForwardComposer<Component>
{
private static final long serialVersionUID = 1L;
private final movieDataSource ds = movieDataSource.INSTANCE;
private int opacity = 80;
@Wire
private Window searchMovie;
@Wire
protected Textbox searchText;
@Wire
protected Textbox searchYear;
@Wire
protected Listbox resultList;
@Wire
protected Button searchButton;
@Wire
protected Button cancelButton;
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
int hD = (int) self.getDesktop().getAttribute("desktopHeight");
int wD = (int) self.getDesktop().getAttribute("desktopWidth");
searchMovie.setWidth(wD - 10 + "px");
searchMovie.setHeight(hD - 10 + "px");
SortedMap<Integer, Listheader> listHeader = new TreeMap<>();
ListModelList resultListModel = new ListModelList();
resultList.setModel(resultListModel);
resultList.setAttribute("listModelList", resultListModel);
resultList.getListhead().getChildren().clear();
Listhead head = resultList.getListhead();
Listheader selected = new Listheader("");
Listheader movieName = new Listheader("Movie Name");
Listheader firstAired = new Listheader("First Aired");
Listheader overview = new Listheader("Overview");
selected.setHflex("min");
movieName.setHflex("min");
firstAired.setHflex("min");
overview.setHflex("min");
head.appendChild(selected);
head.appendChild(movieName);
head.appendChild(firstAired);
head.appendChild(overview);
resultRenderer renderer = new resultRenderer();
resultList.setItemRenderer(renderer);
}
}

@ -0,0 +1,191 @@
package at.windesign.application.movie;
import com.omertron.themoviedbapi.MovieDbException;
import com.omertron.themoviedbapi.TheMovieDbApi;
import com.omertron.themoviedbapi.enumeration.SearchType;
import com.omertron.themoviedbapi.model.movie.MovieInfo;
import com.omertron.themoviedbapi.results.ResultList;
import com.omertron.themoviedbapi.tools.HttpTools;
import org.apache.http.client.HttpClient;
import org.yamj.api.common.http.SimpleHttpClientBuilder;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.*;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
public class movieSearchSelectorComposer extends SelectorComposer<Component>
{
private static final long serialVersionUID = 1L;
private Listbox m_movieList;
@Wire
private Window searchMovie;
@Wire
protected Textbox searchText;
@Wire
protected Textbox searchYear;
@Wire
protected Listbox resultList;
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
final Execution execution = Executions.getCurrent();
if(execution.getArg().containsKey("movieList"))
m_movieList = (Listbox) execution.getArg().get("movieList");
}
@Listen("onClick = #searchButton")
public void doSearch()
{
try
{
search();
}
catch(Exception e)
{
}
}
@Listen("onClick = #saveButton")
public void save()
{
ListModelList resultListModel = (ListModelList) resultList.getModel();
List<movieData> dataList = resultListModel.getInnerList();
for(int index = 0; index < resultListModel.size(); index++)
{
Listitem item = resultList.getItemAtIndex(index);
if(item != null)
{
Listcell cell = (Listcell) item.getChildren().get(0);
if(cell != null)
{
Checkbox box = (Checkbox) cell.getChildren().get(0);
if(box != null)
{
if(box.isChecked())
{
movieData data = dataList.get(index);
movieData newMovie = new movieData();
try
{
newMovie.fromTMDB(data.getMovieID());
Messagebox.show(newMovie.getMovieTitle());
}
catch(Exception e)
{
}
}
}
}
}
}
searchMovie.onClose();
}
@Listen("onClick = #cancelButton")
public void cancel()
{
searchMovie.onClose();
}
public void search() throws MovieDbException
{
int maxPage = 2;
int page;
HttpClient httpClient;
httpClient = new SimpleHttpClientBuilder().build();
TheMovieDbApi api = new TheMovieDbApi("a33271b9e54cdcb9a80680eaf5522f1b", httpClient);
String sText = searchText.getText();
String sYearT = searchYear.getText();
int sYear;
if(sYearT.isEmpty())
sYear = 0;
else
sYear = Integer.parseInt(sYearT);
if(sText.isEmpty())
return;
movieData movie;
ListModelList resultListModel = (ListModelList) resultList.getModel();
resultListModel.clear();
for(page = 1; page <= maxPage; page++)
{
ResultList<MovieInfo> movies = api.searchMovie(sText, page, "de-DE", true, sYear, 0, SearchType.PHRASE);
if(movies.getResults().size() == 0)
break;
for(MovieInfo resultMovie : movies.getResults())
{
if(!exist(resultMovie.getId()))
{
movie = new movieData();
movie.setMovieID(resultMovie.getId());
movie.setMovieTitle(resultMovie.getTitle());
movie.setReleaseDate(string2Date(resultMovie.getReleaseDate()));
movie.setOverview(resultMovie.getOverview());
resultListModel.add(movie);
movie.setModel(resultListModel);
}
}
}
}
Date string2Date(String strDate)
{
if(strDate == null)
return new Date(1900, 1, 1);
else if(strDate.isEmpty())
return new Date(1900, 1, 1);
else
return Date.valueOf(strDate);
}
boolean exist(int id)
{
ListModelList list = (ListModelList) m_movieList.getModel();
List<movieData> dataList = list.getInnerList();
for(movieData data : dataList)
{
if(id == data.getMovieID())
return true;
}
return false;
}
}

@ -0,0 +1,28 @@
package at.windesign.application.movie;
import org.zkoss.zul.*;
public class resultRenderer implements ListitemRenderer
{
private Listbox movieList;
@Override
public void render(Listitem item, Object o, int i) throws Exception
{
final movieData data = (movieData) o;
Listcell selectedCell = new Listcell();
Listcell movieNameCell = new Listcell(data.getMovieTitle());
Listcell movieFirstAiredCell = new Listcell(String.valueOf(data.getReleaseDate()));
Listcell movieOverviewCell = new Listcell(data.getOverview());
Checkbox checkbox = new Checkbox();
checkbox.setParent(selectedCell);
selectedCell.setParent(item);
movieNameCell.setParent(item);
movieFirstAiredCell.setParent(item);
movieOverviewCell.setParent(item);
item.setValue(data);
}
}

@ -2,12 +2,22 @@
vflex="true"
apply="at.windesign.application.movie.movieListForwardComposer, at.windesign.application.movie.movieListSelectorComposer"
>
<hbox width="100%" widths="100%" pack="stretch">
<hbox width="100%" pack="stretch">
<button width="100%"
id="updateAll"
label="update all"
>
</button>
<button width="100%"
id="searchMovie"
label="search Movie"
>
</button>
<button width="100%"
id="discoverMovie"
label="discover Movie"
>
</button>
</hbox>
<listbox id="movieList"
multiple="true"

@ -0,0 +1,50 @@
<window id="searchMovie"
title="search Movies"
contentStyle="overflow:auto"
border="normal"
apply="at.windesign.application.movie.movieSearchForwardComposer,at.windesign.application.movie.movieSearchSelectorComposer"
width="500px"
height="500px">
<groupbox id="search"
>
<style>
.grid {
display: grid;
grid-template-columns: 10fr 2fr 1fr;
grid-gap: 10px;
justify-items: center;
}
</style>
<nodom>
<div sclass="grid"
width="100%">
<label value="*Search"/>
<label value="Year"/>
<label value=""/>
<textbox id="searchText"
width="100%"
tabindex="2"/>
<textbox id="searchYear"
width="100%"
tabindex="3"/>
<button id="searchButton"
label="search"/>
</div>
</nodom>
</groupbox>
<listbox id="resultList"
multiple="true"
autopaging="true"
vflex="true">
<listhead sizable="true"
>
</listhead>
</listbox>
<hlayout>
<button id="saveButton"
label="save"/>
<button id="cancelButton"
label="cancel"/>
</hlayout>
</window>

@ -2,18 +2,30 @@
vflex="true"
apply="at.windesign.application.serie.serieListForwardComposer, at.windesign.application.serie.serieListSelectorComposer"
>
<hbox width="100%" widths="50%,50%" pack="stretch">
<button width="100%"
id="updateAll"
label="update all"
>
</button>
<button width="100%"
id="updateOpen"
label="update open"
>
</button>
</hbox>
<vlayout>
<hbox width="100%" widths="25%,25%,25%,25%" pack="stretch">
<button width="100%"
id="updateAll"
label="update all"
>
</button>
<button width="100%"
id="updateOpen"
label="update open"
>
</button>
<button width="100%"
id="addTVShow"
label="add TV Show"
>
</button>
<button width="100%"
id="discoverTVShow"
label="discover TV Show"
>
</button>
</hbox>
</vlayout>
<listbox id="seriesList"
multiple="true"
autopaging="true"

@ -1,5 +1,5 @@
#Generated by Maven
#Sat Feb 20 21:57:16 CET 2021
#Thu Feb 25 15:44:13 CET 2021
groupId=at.windesign.application
artifactId=multimedia
version=1.0-SNAPSHOT

@ -1,24 +1,27 @@
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDetailsSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUpdateSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieDetailsForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieUpdateSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\episodeData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieListSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieListSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieListForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDetailsForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\seasonData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUtils.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieSearchSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUpdateSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieListForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUpdateForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieDetailsSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieUpdateSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\episodeData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\resultRenderer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieRenderer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDataSource.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\testing\testForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieRenderer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieDataSource.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieListSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieUpdateForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieListSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieListForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDetailsForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\seasonData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieUtils.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUtils.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\main\indexForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\movie\movieSearchForwardComposer.java

Binary file not shown.

@ -7,7 +7,7 @@
apply="at.windesign.application.main.indexForwardComposer, org.zkoss.bind.BindComposer"
onClientInfo="onClientInfo(event)"
>
<tabbox id="tb"
<tabbox id="tabbox"
height="100%"
orient="left"
>
@ -21,6 +21,9 @@
<tabpanel>
<include src="/serie/centerSerie.zul"/>
</tabpanel>
<tabpanel>
<include src="/movie/centerMovie.zul"/>
</tabpanel>
</tabpanels>
</tabbox>
<zscript>

@ -0,0 +1,22 @@
<div id="centerMovie"
vflex="true"
apply="at.windesign.application.movie.movieListForwardComposer, at.windesign.application.movie.movieListSelectorComposer"
>
<hbox width="100%" widths="100%" pack="stretch">
<button width="100%"
id="updateAll"
label="update all"
>
</button>
</hbox>
<listbox id="movieList"
multiple="true"
autopaging="true"
vflex="true">
<listhead sizable="true"
>
</listhead>
<!-- https://stackoverflow.com/questions/28629458/display-image-from-db-on-zk-zul-listbox-->
<!-- https://www.zkoss.org/zksandbox/#u6-->
</listbox>
</div>

@ -0,0 +1,61 @@
<window id="detailsMovie"
title=""
contentStyle="overflow:auto"
border="normal"
apply="at.windesign.application.movie.movieDetailsForwardComposer, at.windesign.application.movie.movieDetailsSelectorComposer"
width="500px"
height="500px"
>
<style>
.grid {
display: grid;
grid-template-columns: 4fr 1fr 1fr;
grid-gap: 10px;
justify-items: center;
}
</style>
<groupbox id="overview"
>
<caption>Overview</caption>
<label id="overviewLabel"
value=""/>
</groupbox>
<groupbox id="settings"
>
<caption>Settings</caption>
<nodom>
<div sclass="grid"
width="100%">
<label value="Local Path"/>
<label value="Resolution"/>
<label value="State"/>
<textbox id="localPath"
width="100%"
tabindex="2"/>
<combobox id="resolution"
width="100%"
tabindex="3"/>
<vlayout>
<radiogroup id="progress">
<radio label="init"/>
<radio label="in progress"/>
<radio label="done"/>
</radiogroup>
</vlayout>
</div>
</nodom>
</groupbox>
<hbox id="buttons"
width="100%"
pack="center">
<button id="saveButton" label="Save"/>
<button id="cancelButton" label="Cancel"/>
<button id="updateButton" label="Update from TMDB"/>
<button id="deleteButton" label="Delete"/>
</hbox>
</window>

@ -0,0 +1,26 @@
<window id="updateMovie"
title="update Movies"
contentStyle="overflow:auto"
border="normal"
apply="at.windesign.application.movie.movieUpdateSelectorComposer"
width="500px"
height="150px">
<div class="panel"
align="center">
<timer id="timer"
repeats="true"
delay="1000"
onCreate="self.stop()"/>
<hbox align="center">
<progressmeter id="movieProgress"
value="0"
width="400px"/>
<label id="movieProgressLabel"
value="0%">
</label>
</hbox>
<label id="movieLabel"
value="please wait...">
</label>
</div>
</window>

@ -1,14 +1,26 @@
<window id="detailsSerie"
title=""
<window id="updateSerie"
title="update TV Shows"
contentStyle="overflow:auto"
border="normal"
apply="at.windesign.application.serie.serieUpdateForwardComposer, at.windesign.application.serie.serieUpdateSelectorComposer"
apply="at.windesign.application.serie.serieUpdateSelectorComposer"
width="500px"
height="500px"
>
<label id="serieLabel"
value=""/>
height="150px">
<div class="panel"
align="center">
<timer id="timer"
repeats="true"
delay="1000"
onCreate="self.stop()"/>
<hbox align="center">
<progressmeter id="serieProgress"
value="0"
width="400px"/>
<label id="serieProgressLabel"
value="0%">
</label>
</hbox>
<label id="serieLabel"
value="please wait...">
</label>
</div>
</window>
Loading…
Cancel
Save