initial commit
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user