initial commit

This commit is contained in:
2020-10-30 09:24:11 +01:00
commit 92e808d173
81 changed files with 1410 additions and 0 deletions
@@ -0,0 +1,159 @@
package at.windesign.application;
import java.util.SortedMap;
class Serie
{
private int m_seriesID;
private String m_seriesName;
private int m_seriesFirstAired;
private String m_seriesResolution;
private boolean m_seriesCliffhanger;
private String m_seriesStatus;
private String m_seriesDownload;
private String m_seriesPoster;
private String m_seriesBackdrop;
private SortedMap<Integer, Integer> m_episodeState;
private int m_minSeason;
private int m_maxSeason;
public Serie()
{
}
public Serie(int seriesID, String seriesName, int seriesFirstAired, String seriesResolution, boolean seriesCliffhanger, String seriesStatus, String seriesDownload, String seriesPoster, String seriesBackdrop, SortedMap<Integer, Integer> episodeState, int minSeason, int maxSeason)
{
m_seriesID = seriesID;
m_seriesName = seriesName;
m_seriesFirstAired = seriesFirstAired;
m_seriesResolution = seriesResolution;
m_seriesCliffhanger = seriesCliffhanger;
m_seriesStatus = seriesStatus;
m_seriesDownload = seriesDownload;
m_seriesPoster = seriesPoster;
m_seriesBackdrop = seriesBackdrop;
m_episodeState = episodeState;
m_minSeason = minSeason;
m_maxSeason = maxSeason;
}
public int getSeriesID()
{
return m_seriesID;
}
public void setSeriesID(int seriesID)
{
m_seriesID = seriesID;
}
public String getSeriesName()
{
return m_seriesName;
}
public void setSeriesName(String seriesName)
{
m_seriesName = seriesName;
}
public int getSeriesFirstAired()
{
return m_seriesFirstAired;
}
public void setSeriesFirstAired(int seriesFirstAired)
{
m_seriesFirstAired = seriesFirstAired;
}
public String getSeriesResolution()
{
return m_seriesResolution;
}
public void setSeriesResolution(String seriesResolution)
{
m_seriesResolution = seriesResolution;
}
public boolean getSeriesCliffhanger()
{
return m_seriesCliffhanger;
}
public void setSeriesCliffhanger(boolean seriesCliffhanger)
{
m_seriesCliffhanger = seriesCliffhanger;
}
public String getSeriesStatus()
{
return m_seriesStatus;
}
public void setSeriesStatus(String seriesStatus)
{
m_seriesStatus = seriesStatus;
}
public String getSeriesDownload()
{
return m_seriesDownload;
}
public void setSeriesDownload(String seriesDownload)
{
m_seriesDownload = seriesDownload;
}
public String getSeriesPoster()
{
return m_seriesPoster;
}
public void setSeriesPoster(String seriesPoster)
{
m_seriesPoster = seriesPoster;
}
public String getSeriesBackdrop()
{
return m_seriesBackdrop;
}
public void setSeriesBackdrop(String seriesBackdrop)
{
m_seriesBackdrop = seriesBackdrop;
}
public SortedMap<Integer, Integer> getEpisodeState()
{
return m_episodeState;
}
public void setEpisodeState(SortedMap<Integer, Integer> episodeState)
{
m_episodeState = episodeState;
}
public int getMinSeason()
{
return m_minSeason;
}
public void setMinSeason(int minSeason)
{
m_minSeason = minSeason;
}
public int getMaxSeason()
{
return m_maxSeason;
}
public void setMaxSeason(int maxSeason)
{
m_maxSeason = maxSeason;
}
}
@@ -0,0 +1,69 @@
package at.windesign.application;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public enum SeriesDataSource
{
INSTANCE;
private static final String url = "jdbc:mysql://localhost:3306/multimedia";
private static final String user = "multimedia";
private static final String pwd = "WeissIchNicht8";
private Connection conn = null;
static
{
try
{
Class.forName("com.mysql.cj.jdbc.Driver");
} catch(ClassNotFoundException e)
{
e.printStackTrace();
}
}
private SeriesDataSource()
{
// drop the table if it exists
try
{
Statement stmt = this.getStatement();
stmt.close();
} catch(SQLException e)
{
e.printStackTrace();
} finally
{
this.close();
}
}
public Statement getStatement() throws SQLException
{
Statement stmt = null;
// get connection
conn = DriverManager.getConnection(url, user, pwd);
stmt = conn.createStatement();
return stmt;
}
public void close()
{
try
{
if(conn != null)
{
conn.close();
conn = null;
}
} catch(SQLException e)
{
e.printStackTrace();
}
}
}
@@ -0,0 +1,150 @@
package at.windesign.application;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.SortedMap;
import java.util.TreeMap;
public class seriesListController extends GenericForwardComposer
{
protected Listbox seriesList; // autowired
private ListModelList seriesListModel; // the model of the listbox
private seriesRenderer renderer;
private final SeriesDataSource ds = SeriesDataSource.INSTANCE;
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
int minSeason = 0;
int maxSeason = 0;
try
{
Statement stmt = ds.getStatement();
ResultSet rs = stmt.executeQuery(
"SELECT MIN(seasonNumber) minSeason," +
" MAX(seasonNumber) maxSeason" +
" FROM season;"
);
while(rs.next())
{
minSeason = rs.getInt("minSeason");
maxSeason = rs.getInt("maxSeason");
}
} catch(SQLException e)
{
e.printStackTrace();
}
seriesListModel = new ListModelList();
seriesList.setModel(seriesListModel);
Listhead head = seriesList.getListhead();
Listheader seriesName = new Listheader("Series Name");
Listheader firstAired = new Listheader("First Aired");
Listheader resolution = new Listheader("Resolution");
seriesName.setHflex("min");
firstAired.setHflex("min");
resolution.setHflex("min");
head.appendChild(seriesName);
head.appendChild(firstAired);
head.appendChild(resolution);
if(minSeason < 1)
minSeason = 1;
for(int i = minSeason;i <= maxSeason;i++)
{
Listheader seasonHeader = new Listheader("Season " + i);
seasonHeader.setHflex("min");
head.appendChild(seasonHeader);
}
renderer = new seriesRenderer();
seriesList.setItemRenderer(renderer);
try
{
Statement stmt = ds.getStatement();
ResultSet rs = stmt.executeQuery(
"SELECT serie.seriesID seriesID," +
" serie.seriesName seriesName," +
" YEAR(serie.firstAired) seriesFirstAired," +
" serie.resolution seriesResolution," +
" serie.cliffhanger seriesCliffhanger," +
" serie.status seriesStatus," +
" serie.download seriesDownload," +
" serie.posterPath seriesPoster," +
" serie.backdropPath seriesBackdrop," +
" season.seasonNumber seasonNumber," +
" episode.episodeNumber episodeNumber," +
" episode.state episodeState," +
" ( SELECT MIN(s.seasonNumber) FROM season s WHERE s.seriesID = serie.seriesID ) minSeason," +
" ( SELECT MAX(s.seasonNumber) FROM season s WHERE s.seriesID = serie.seriesID ) maxSeason" +
" FROM serie" +
" LEFT JOIN season ON serie.seriesID = season.seriesID" +
" LEFT JOIN episode ON serie.seriesID = episode.seriesID AND season.seasonNumber = episode.seasonNumber" +
" WHERE season.seasonNumber != 0 OR" +
" serie.seriesID >= 1000000" +
" ORDER BY serie.seriesName," +
" serie.firstAired," +
" season.seasonNumber," +
" episode.episodeNumber;"
);
// fetch all events from database
Serie serie = new Serie();
int oldID = -1;
SortedMap<Integer, Integer> episodeState = new TreeMap<>();
while(rs.next())
{
if(rs.getInt("seriesID") != oldID)
{
if(oldID != -1)
{
serie.setEpisodeState(episodeState);
seriesListModel.add(serie);
episodeState = new TreeMap<>();
}
oldID = rs.getInt("seriesID");
serie = new Serie();
serie.setSeriesID(rs.getInt("seriesID"));
serie.setSeriesName(rs.getString("seriesName"));
serie.setSeriesFirstAired(rs.getInt("seriesFirstAired"));
serie.setSeriesResolution(rs.getString("seriesResolution"));
serie.setSeriesCliffhanger(rs.getBoolean("seriesCliffhanger"));
serie.setSeriesStatus(rs.getString("seriesStatus"));
serie.setSeriesDownload(rs.getString("seriesDownload"));
serie.setSeriesPoster(rs.getString("seriesPoster"));
serie.setSeriesBackdrop(rs.getString("seriesBackdrop"));
serie.setMinSeason(rs.getInt("minSeason"));
serie.setMaxSeason(rs.getInt("maxSeason"));
}
episodeState.put((rs.getInt("seasonNumber") << 8) + rs.getInt("episodeNumber"), rs.getInt("episodeState"));
}
} catch(
SQLException e)
{
e.printStackTrace();
} finally
{
ds.close();
}
}
}
@@ -0,0 +1,98 @@
package at.windesign.application;
import org.zkoss.image.Images;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.SortedMap;
import java.util.TreeMap;
public class seriesRenderer implements ListitemRenderer
{
private Integer stateWidth = 4;
private Integer stateHeight = 20;
@Override
public void render(Listitem listitem, Object o, int i) throws Exception
{
final Serie data = (Serie) o;
new Listcell(data.getSeriesName()).setParent(listitem);
new Listcell(String.valueOf(data.getSeriesFirstAired())).setParent(listitem);
new Listcell(data.getSeriesResolution()).setParent(listitem);
for(int s = 1; s < data.getMaxSeason(); s++)
{
Listcell imageCell = new Listcell();
imageCell.setImageContent(Images.encode("bla.png", getStateImage(s, data.getEpisodeState())));
imageCell.setParent(listitem);
}
}
private BufferedImage getStateImage(Integer curSeason, SortedMap<Integer, Integer> state)
{
int season = -1;
int episode = -1;
SortedMap<Integer, Integer> seasonState = new TreeMap<>();
for(int key : state.keySet())
{
season = key >> 8;
episode = key & 0xFF;
if(season == curSeason)
seasonState.put(episode, state.get(key));
else if(season > curSeason)
break;
}
if(seasonState.size() == 0)
{
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, 1, 1);
return image;
}
BufferedImage image = new BufferedImage(stateWidth * seasonState.lastKey(), stateHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
Color colGrey = new Color(192, 192, 192);
Color colBlue = new Color(0, 0, 192);
Color colGreen = new Color(0, 192, 0);
Color colBlack = new Color(0, 0, 0);
Color col = colBlack;
g2d.setColor(colBlack);
g2d.fillRect(0, 0, stateWidth * seasonState.lastKey(), stateHeight);
for(Integer key : seasonState.keySet())
{
switch(seasonState.get(key))
{
case 0:
col = colBlack;
break;
case 1:
col = colGrey;
break;
case 2:
col = colBlue;
break;
case 3:
col = colGreen;
break;
}
g2d.setColor(col);
g2d.fillRect((key - 1) * stateWidth, 0, stateWidth - 1, stateHeight);
}
return image;
}
}