Removed synchronized from dao layer and replaced with transactions
Also improved tests to be more spring like Signed-off-by: Andrew DeMaria <lostonamountain@gmail.com>
This commit is contained in:
+14
-1
@@ -253,7 +253,20 @@
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.1</version>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>2.5.7</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
package org.libresonic.player.boot;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.ServletContextListener;
|
||||
import net.sf.ehcache.constructs.web.ShutdownListener;
|
||||
import org.directwebremoting.servlet.DwrServlet;
|
||||
import org.libresonic.player.filter.BootstrapVerificationFilter;
|
||||
import org.libresonic.player.filter.ParameterDecodingFilter;
|
||||
import org.libresonic.player.filter.RESTFilter;
|
||||
import org.libresonic.player.filter.RequestEncodingFilter;
|
||||
import org.libresonic.player.filter.ResponseHeaderFilter;
|
||||
import org.libresonic.player.filter.*;
|
||||
import org.libresonic.player.spring.AdditionalPropertySourceConfigurer;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
||||
@@ -20,7 +18,15 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.ImportResource;
|
||||
|
||||
@SpringBootApplication(exclude = {JmxAutoConfiguration.class})
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.ServletContextListener;
|
||||
|
||||
@SpringBootApplication(exclude = {
|
||||
JmxAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class,
|
||||
DataSourceAutoConfiguration.class,
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
LiquibaseAutoConfiguration.class})
|
||||
@Configuration
|
||||
@ImportResource(value = {"classpath:/applicationContext-service.xml",
|
||||
"classpath:/applicationContext-cache.xml",
|
||||
|
||||
@@ -19,21 +19,17 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.ObjectUtils;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import org.libresonic.player.domain.Album;
|
||||
import org.libresonic.player.domain.MediaFile;
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.libresonic.player.util.FileUtil;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Provides database services for albums.
|
||||
@@ -114,7 +110,8 @@ public class AlbumDao extends AbstractDao {
|
||||
*
|
||||
* @param album The album to create/update.
|
||||
*/
|
||||
public synchronized void createOrUpdateAlbum(Album album) {
|
||||
@Transactional
|
||||
public void createOrUpdateAlbum(Album album) {
|
||||
String sql = "update album set " +
|
||||
"path=?," +
|
||||
"song_count=?," +
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.libresonic.player.domain.Artist;
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -91,7 +92,8 @@ public class ArtistDao extends AbstractDao {
|
||||
*
|
||||
* @param artist The artist to create/update.
|
||||
*/
|
||||
public synchronized void createOrUpdateArtist(Artist artist) {
|
||||
@Transactional
|
||||
public void createOrUpdateArtist(Artist artist) {
|
||||
String sql = "update artist set " +
|
||||
"cover_art_path=?," +
|
||||
"album_count=?," +
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.libresonic.player.domain.Bookmark;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.libresonic.player.domain.Bookmark;
|
||||
|
||||
/**
|
||||
* Provides database services for media file bookmarks.
|
||||
*
|
||||
@@ -62,7 +62,8 @@ public class BookmarkDao extends AbstractDao {
|
||||
/**
|
||||
* Creates or updates a bookmark. If created, the ID of the bookmark will be set by this method.
|
||||
*/
|
||||
public synchronized void createOrUpdateBookmark(Bookmark bookmark) {
|
||||
@Transactional
|
||||
public void createOrUpdateBookmark(Bookmark bookmark) {
|
||||
int n = update("update bookmark set position_millis=?, comment=?, changed=? where media_file_id=? and username=?",
|
||||
bookmark.getPositionMillis(), bookmark.getComment(), bookmark.getChanged(), bookmark.getMediaFileId(), bookmark.getUsername());
|
||||
|
||||
@@ -78,7 +79,8 @@ public class BookmarkDao extends AbstractDao {
|
||||
/**
|
||||
* Deletes the bookmark for the given username and media file.
|
||||
*/
|
||||
public synchronized void deleteBookmark(String username, int mediaFileId) {
|
||||
@Transactional
|
||||
public void deleteBookmark(String username, int mediaFileId) {
|
||||
update("delete from bookmark where username=? and media_file_id=?", username, mediaFileId);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.springframework.jdbc.core.RowMapper;
|
||||
import org.libresonic.player.domain.Genre;
|
||||
import org.libresonic.player.domain.MediaFile;
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -129,7 +130,8 @@ public class MediaFileDao extends AbstractDao {
|
||||
*
|
||||
* @param file The media file to create/update.
|
||||
*/
|
||||
public synchronized void createOrUpdateMediaFile(MediaFile file) {
|
||||
@Transactional
|
||||
public void createOrUpdateMediaFile(MediaFile file) {
|
||||
String sql = "update media_file set " +
|
||||
"folder=?," +
|
||||
"type=?," +
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.libresonic.player.domain.SavedPlayQueue;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import org.libresonic.player.domain.SavedPlayQueue;
|
||||
|
||||
/**
|
||||
* Provides database services for play queues
|
||||
*
|
||||
@@ -37,7 +37,8 @@ public class PlayQueueDao extends AbstractDao {
|
||||
private static final String QUERY_COLUMNS = "id, " + INSERT_COLUMNS;
|
||||
private final RowMapper rowMapper = new PlayQueueMapper();
|
||||
|
||||
public synchronized SavedPlayQueue getPlayQueue(String username) {
|
||||
@Transactional
|
||||
public SavedPlayQueue getPlayQueue(String username) {
|
||||
SavedPlayQueue playQueue = queryOne("select " + QUERY_COLUMNS + " from play_queue where username=?", rowMapper, username);
|
||||
if (playQueue == null) {
|
||||
return null;
|
||||
@@ -47,7 +48,8 @@ public class PlayQueueDao extends AbstractDao {
|
||||
return playQueue;
|
||||
}
|
||||
|
||||
public synchronized void savePlayQueue(SavedPlayQueue playQueue) {
|
||||
@Transactional
|
||||
public void savePlayQueue(SavedPlayQueue playQueue) {
|
||||
update("delete from play_queue where username=?", playQueue.getUsername());
|
||||
update("insert into play_queue(" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")",
|
||||
playQueue.getUsername(), playQueue.getCurrentMediaFileId(), playQueue.getPositionMillis(),
|
||||
|
||||
@@ -22,6 +22,7 @@ package org.libresonic.player.dao;
|
||||
import org.libresonic.player.Logger;
|
||||
import org.libresonic.player.domain.*;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -86,7 +87,8 @@ public class PlayerDao extends AbstractDao {
|
||||
*
|
||||
* @param player The player to create.
|
||||
*/
|
||||
public synchronized void createPlayer(Player player) {
|
||||
@Transactional
|
||||
public void createPlayer(Player player) {
|
||||
Integer existingMax = getJdbcTemplate().queryForObject("select max(id) from player", Integer.class);
|
||||
if(existingMax == null) {
|
||||
existingMax = 0;
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.libresonic.player.Logger;
|
||||
import org.libresonic.player.domain.MediaFile;
|
||||
import org.libresonic.player.domain.Playlist;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -80,7 +81,8 @@ public class PlaylistDao extends AbstractDao {
|
||||
return query("select " + QUERY_COLUMNS + " from playlist", rowMapper);
|
||||
}
|
||||
|
||||
public synchronized void createPlaylist(Playlist playlist) {
|
||||
@Transactional
|
||||
public void createPlaylist(Playlist playlist) {
|
||||
update("insert into playlist(" + INSERT_COLUMNS + ") values(" + questionMarks(INSERT_COLUMNS) + ")",
|
||||
playlist.getUsername(), playlist.isShared(), playlist.getName(), playlist.getComment(),
|
||||
0, 0, playlist.getCreated(), playlist.getChanged(), playlist.getImportedFrom());
|
||||
@@ -115,7 +117,8 @@ public class PlaylistDao extends AbstractDao {
|
||||
update("delete from playlist_user where playlist_id=? and username=?", playlistId, username);
|
||||
}
|
||||
|
||||
public synchronized void deletePlaylist(int id) {
|
||||
@Transactional
|
||||
public void deletePlaylist(int id) {
|
||||
update("delete from playlist where id=?", id);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,15 +19,15 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import org.libresonic.player.domain.PodcastChannel;
|
||||
import org.libresonic.player.domain.PodcastEpisode;
|
||||
import org.libresonic.player.domain.PodcastStatus;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Provides database services for Podcast channels and episodes.
|
||||
@@ -51,7 +51,8 @@ public class PodcastDao extends AbstractDao {
|
||||
* @param channel The Podcast channel to create.
|
||||
* @return The ID of the newly created channel.
|
||||
*/
|
||||
public synchronized int createChannel(PodcastChannel channel) {
|
||||
@Transactional
|
||||
public int createChannel(PodcastChannel channel) {
|
||||
String sql = "insert into podcast_channel (" + CHANNEL_INSERT_COLUMNS + ") values (" + questionMarks(
|
||||
CHANNEL_INSERT_COLUMNS) + ")";
|
||||
update(sql, channel.getUrl(), channel.getTitle(), channel.getDescription(), channel.getImageUrl(),
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.libresonic.player.domain.Share;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Collections;
|
||||
@@ -26,11 +31,6 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.libresonic.player.domain.Share;
|
||||
|
||||
/**
|
||||
* Provides database services for shared media.
|
||||
*
|
||||
@@ -49,7 +49,8 @@ public class ShareDao extends AbstractDao {
|
||||
*
|
||||
* @param share The share to create. The ID of the share will be set by this method.
|
||||
*/
|
||||
public synchronized void createShare(Share share) {
|
||||
@Transactional
|
||||
public void createShare(Share share) {
|
||||
String sql = "insert into share (" + INSERT_COLUMNS + ") values (" + questionMarks(INSERT_COLUMNS) + ")";
|
||||
update(sql, share.getName(), share.getDescription(), share.getUsername(), share.getCreated(),
|
||||
share.getExpires(), share.getLastVisited(), share.getVisitCount());
|
||||
|
||||
@@ -19,15 +19,15 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.libresonic.player.Logger;
|
||||
import org.libresonic.player.domain.Transcoding;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import org.libresonic.player.Logger;
|
||||
import org.libresonic.player.domain.Transcoding;
|
||||
|
||||
/**
|
||||
* Provides database services for transcoding configurations.
|
||||
*
|
||||
@@ -82,7 +82,8 @@ public class TranscodingDao extends AbstractDao {
|
||||
*
|
||||
* @param transcoding The transcoding to create.
|
||||
*/
|
||||
public synchronized void createTranscoding(Transcoding transcoding) {
|
||||
@Transactional
|
||||
public void createTranscoding(Transcoding transcoding) {
|
||||
Integer existingMax = getJdbcTemplate().queryForObject("select max(id) from transcoding2", Integer.class);
|
||||
if(existingMax == null) {
|
||||
existingMax = 0;
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.libresonic.player.Logger;
|
||||
import org.libresonic.player.domain.*;
|
||||
import org.libresonic.player.util.StringUtil;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -33,6 +34,7 @@ import java.util.List;
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
@Transactional
|
||||
public class UserDao extends AbstractDao {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(UserDao.class);
|
||||
@@ -71,7 +73,11 @@ public class UserDao extends AbstractDao {
|
||||
*/
|
||||
public User getUserByName(String username) {
|
||||
String sql = "select " + USER_COLUMNS + " from " + getUserTable() + " where username=?";
|
||||
return queryOne(sql, userRowMapper, username);
|
||||
User user = queryOne(sql, userRowMapper, username);
|
||||
if(user != null) {
|
||||
readRoles(user);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,7 +88,11 @@ public class UserDao extends AbstractDao {
|
||||
*/
|
||||
public User getUserByEmail(String email) {
|
||||
String sql = "select " + USER_COLUMNS + " from " + getUserTable() + " where email=?";
|
||||
return queryOne(sql, userRowMapper, email);
|
||||
User user = queryOne(sql, userRowMapper, email);
|
||||
if(user != null) {
|
||||
readRoles(user);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,7 +102,9 @@ public class UserDao extends AbstractDao {
|
||||
*/
|
||||
public List<User> getAllUsers() {
|
||||
String sql = "select " + USER_COLUMNS + " from " + getUserTable();
|
||||
return query(sql, userRowMapper);
|
||||
List<User> users = query(sql, userRowMapper);
|
||||
users.forEach(this::readRoles);
|
||||
return users;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -219,86 +231,85 @@ public class UserDao extends AbstractDao {
|
||||
}
|
||||
|
||||
private void readRoles(User user) {
|
||||
synchronized (user.getUsername().intern()) {
|
||||
String sql = "select role_id from user_role where username=?";
|
||||
List<?> roles = getJdbcTemplate().queryForList(sql, new Object[]{user.getUsername()}, Integer.class);
|
||||
for (Object role : roles) {
|
||||
if (ROLE_ID_ADMIN.equals(role)) {
|
||||
user.setAdminRole(true);
|
||||
} else if (ROLE_ID_DOWNLOAD.equals(role)) {
|
||||
user.setDownloadRole(true);
|
||||
} else if (ROLE_ID_UPLOAD.equals(role)) {
|
||||
user.setUploadRole(true);
|
||||
} else if (ROLE_ID_PLAYLIST.equals(role)) {
|
||||
user.setPlaylistRole(true);
|
||||
} else if (ROLE_ID_COVER_ART.equals(role)) {
|
||||
user.setCoverArtRole(true);
|
||||
} else if (ROLE_ID_COMMENT.equals(role)) {
|
||||
user.setCommentRole(true);
|
||||
} else if (ROLE_ID_PODCAST.equals(role)) {
|
||||
user.setPodcastRole(true);
|
||||
} else if (ROLE_ID_STREAM.equals(role)) {
|
||||
user.setStreamRole(true);
|
||||
} else if (ROLE_ID_SETTINGS.equals(role)) {
|
||||
user.setSettingsRole(true);
|
||||
} else if (ROLE_ID_JUKEBOX.equals(role)) {
|
||||
user.setJukeboxRole(true);
|
||||
} else if (ROLE_ID_SHARE.equals(role)) {
|
||||
user.setShareRole(true);
|
||||
} else {
|
||||
LOG.warn("Unknown role: '" + role + '\'');
|
||||
}
|
||||
String sql = "select role_id from user_role where username=?";
|
||||
List<?> roles = getJdbcTemplate().queryForList(sql, new Object[]{user.getUsername()}, Integer.class);
|
||||
for (Object role : roles) {
|
||||
if (ROLE_ID_ADMIN.equals(role)) {
|
||||
user.setAdminRole(true);
|
||||
} else if (ROLE_ID_DOWNLOAD.equals(role)) {
|
||||
user.setDownloadRole(true);
|
||||
} else if (ROLE_ID_UPLOAD.equals(role)) {
|
||||
user.setUploadRole(true);
|
||||
} else if (ROLE_ID_PLAYLIST.equals(role)) {
|
||||
user.setPlaylistRole(true);
|
||||
} else if (ROLE_ID_COVER_ART.equals(role)) {
|
||||
user.setCoverArtRole(true);
|
||||
} else if (ROLE_ID_COMMENT.equals(role)) {
|
||||
user.setCommentRole(true);
|
||||
} else if (ROLE_ID_PODCAST.equals(role)) {
|
||||
user.setPodcastRole(true);
|
||||
} else if (ROLE_ID_STREAM.equals(role)) {
|
||||
user.setStreamRole(true);
|
||||
} else if (ROLE_ID_SETTINGS.equals(role)) {
|
||||
user.setSettingsRole(true);
|
||||
} else if (ROLE_ID_JUKEBOX.equals(role)) {
|
||||
user.setJukeboxRole(true);
|
||||
} else if (ROLE_ID_SHARE.equals(role)) {
|
||||
user.setShareRole(true);
|
||||
} else {
|
||||
LOG.warn("Unknown role: '" + role + '\'');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void writeRoles(User user) {
|
||||
synchronized (user.getUsername().intern()) {
|
||||
String sql = "delete from user_role where username=?";
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername()});
|
||||
sql = "insert into user_role (username, role_id) values(?, ?)";
|
||||
if (user.isAdminRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_ADMIN});
|
||||
}
|
||||
if (user.isDownloadRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_DOWNLOAD});
|
||||
}
|
||||
if (user.isUploadRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_UPLOAD});
|
||||
}
|
||||
if (user.isPlaylistRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_PLAYLIST});
|
||||
}
|
||||
if (user.isCoverArtRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_COVER_ART});
|
||||
}
|
||||
if (user.isCommentRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_COMMENT});
|
||||
}
|
||||
if (user.isPodcastRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_PODCAST});
|
||||
}
|
||||
if (user.isStreamRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_STREAM});
|
||||
}
|
||||
if (user.isJukeboxRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_JUKEBOX});
|
||||
}
|
||||
if (user.isSettingsRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_SETTINGS});
|
||||
}
|
||||
if (user.isShareRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_SHARE});
|
||||
}
|
||||
String sql = "delete from user_role where username=?";
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername()});
|
||||
sql = "insert into user_role (username, role_id) values(?, ?)";
|
||||
if (user.isAdminRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_ADMIN});
|
||||
}
|
||||
if (user.isDownloadRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_DOWNLOAD});
|
||||
}
|
||||
if (user.isUploadRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_UPLOAD});
|
||||
}
|
||||
if (user.isPlaylistRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_PLAYLIST});
|
||||
}
|
||||
if (user.isCoverArtRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_COVER_ART});
|
||||
}
|
||||
if (user.isCommentRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_COMMENT});
|
||||
}
|
||||
if (user.isPodcastRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_PODCAST});
|
||||
}
|
||||
if (user.isStreamRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_STREAM});
|
||||
}
|
||||
if (user.isJukeboxRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_JUKEBOX});
|
||||
}
|
||||
if (user.isSettingsRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_SETTINGS});
|
||||
}
|
||||
if (user.isShareRole()) {
|
||||
getJdbcTemplate().update(sql, new Object[]{user.getUsername(), ROLE_ID_SHARE});
|
||||
}
|
||||
}
|
||||
|
||||
private class UserRowMapper implements RowMapper<User> {
|
||||
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
User user = new User(rs.getString(1), decrypt(rs.getString(2)), rs.getString(3), rs.getBoolean(4),
|
||||
rs.getLong(5), rs.getLong(6), rs.getLong(7));
|
||||
readRoles(user);
|
||||
return user;
|
||||
return new User(rs.getString(1),
|
||||
decrypt(rs.getString(2)),
|
||||
rs.getString(3),
|
||||
rs.getBoolean(4),
|
||||
rs.getLong(5),
|
||||
rs.getLong(6),
|
||||
rs.getLong(7));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
|
||||
|
||||
<import resource="applicationContext-db-jndi.xml" />
|
||||
<import resource="applicationContext-db-embed.xml" />
|
||||
<import resource="applicationContext-db-legacy.xml" />
|
||||
|
||||
<tx:annotation-driven/>
|
||||
|
||||
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
|
||||
<constructor-arg ref="dataSource"/>
|
||||
</bean>
|
||||
|
||||
<bean id="daoHelper" class="org.libresonic.player.dao.GenericDaoHelper">
|
||||
<constructor-arg name="dataSource" ref="dataSource" />
|
||||
</bean>
|
||||
|
||||
@@ -15,8 +15,6 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class TestCaseUtils {
|
||||
|
||||
private static final String LIBRESONIC_HOME_FOR_TEST = "/tmp/libresonic";
|
||||
|
||||
private static File libresonicHomeDirForTest = null;
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Rule;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runners.model.Statement;
|
||||
import org.libresonic.player.util.LibresonicHomeRule;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.rules.SpringClassRule;
|
||||
import org.springframework.test.context.junit4.rules.SpringMethodRule;
|
||||
|
||||
@ContextConfiguration(locations = {
|
||||
"/applicationContext-service.xml",
|
||||
"/applicationContext-cache.xml",
|
||||
"/applicationContext-testdb.xml",
|
||||
"/applicationContext-mockSonos.xml"})
|
||||
public class DaoTestCaseBean2 {
|
||||
@ClassRule
|
||||
public static final SpringClassRule classRule = new SpringClassRule() {
|
||||
LibresonicHomeRule libresonicRule = new LibresonicHomeRule();
|
||||
@Override
|
||||
public Statement apply(Statement base, Description description) {
|
||||
Statement spring = super.apply(base, description);
|
||||
return libresonicRule.apply(spring, description);
|
||||
}
|
||||
};
|
||||
|
||||
@Rule
|
||||
public final SpringMethodRule springMethodRule = new SpringMethodRule();
|
||||
|
||||
@Autowired
|
||||
GenericDaoHelper genericDaoHelper;
|
||||
|
||||
|
||||
JdbcTemplate getJdbcTemplate() {
|
||||
return genericDaoHelper.getJdbcTemplate();
|
||||
}
|
||||
}
|
||||
+15
-3
@@ -1,20 +1,30 @@
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.libresonic.player.domain.InternetRadio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.libresonic.player.domain.InternetRadio;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Unit test of {@link InternetRadioDao}.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class InternetRadioDaoTestCase extends DaoTestCaseBase {
|
||||
public class InternetRadioDaoTestCase extends DaoTestCaseBean2 {
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
@Autowired
|
||||
InternetRadioDao internetRadioDao;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
getJdbcTemplate().execute("delete from internet_radio");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateInternetRadio() {
|
||||
InternetRadio radio = new InternetRadio("name", "streamUrl", "homePageUrl", true, new Date());
|
||||
internetRadioDao.createInternetRadio(radio);
|
||||
@@ -23,6 +33,7 @@ public class InternetRadioDaoTestCase extends DaoTestCaseBase {
|
||||
assertInternetRadioEquals(radio, newRadio);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateInternetRadio() {
|
||||
InternetRadio radio = new InternetRadio("name", "streamUrl", "homePageUrl", true, new Date());
|
||||
internetRadioDao.createInternetRadio(radio);
|
||||
@@ -39,6 +50,7 @@ public class InternetRadioDaoTestCase extends DaoTestCaseBase {
|
||||
assertInternetRadioEquals(radio, newRadio);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteInternetRadio() {
|
||||
assertEquals("Wrong number of radios.", 0, internetRadioDao.getAllInternetRadios().size());
|
||||
|
||||
|
||||
+15
-4
@@ -19,23 +19,32 @@
|
||||
*/
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Unit test of {@link MusicFolderDao}.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class MusicFolderDaoTestCase extends DaoTestCaseBase {
|
||||
public class MusicFolderDaoTestCase extends DaoTestCaseBean2 {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
@Autowired
|
||||
MusicFolderDao musicFolderDao;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
getJdbcTemplate().execute("delete from music_folder");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateMusicFolder() {
|
||||
MusicFolder musicFolder = new MusicFolder(new File("path"), "name", true, new Date());
|
||||
musicFolderDao.createMusicFolder(musicFolder);
|
||||
@@ -44,6 +53,7 @@ public class MusicFolderDaoTestCase extends DaoTestCaseBase {
|
||||
assertMusicFolderEquals(musicFolder, newMusicFolder);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateMusicFolder() {
|
||||
MusicFolder musicFolder = new MusicFolder(new File("path"), "name", true, new Date());
|
||||
musicFolderDao.createMusicFolder(musicFolder);
|
||||
@@ -59,6 +69,7 @@ public class MusicFolderDaoTestCase extends DaoTestCaseBase {
|
||||
assertMusicFolderEquals(musicFolder, newMusicFolder);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteMusicFolder() {
|
||||
assertEquals("Wrong number of music folders.", 0, musicFolderDao.getAllMusicFolders().size());
|
||||
|
||||
|
||||
+7
-8
@@ -7,31 +7,30 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class MusicFolderDaoMock extends MusicFolderDao {
|
||||
public class MusicFolderTestData {
|
||||
|
||||
private static String baseResources = "/MEDIAS/";
|
||||
|
||||
public static String resolveBaseMediaPath() {
|
||||
String baseDir = MusicFolderDaoMock.class.getResource(baseResources).toString().replace("file:","");
|
||||
String baseDir = MusicFolderTestData.class.getResource(baseResources).toString().replace("file:","");
|
||||
return baseDir;
|
||||
}
|
||||
|
||||
public static String resolveMusicFolderPath() {
|
||||
return (MusicFolderDaoMock.resolveBaseMediaPath() + "Music");
|
||||
return (MusicFolderTestData.resolveBaseMediaPath() + "Music");
|
||||
}
|
||||
|
||||
public static String resolveMusic2FolderPath() {
|
||||
return (MusicFolderDaoMock.resolveBaseMediaPath() + "Music2");
|
||||
return (MusicFolderTestData.resolveBaseMediaPath() + "Music2");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MusicFolder> getAllMusicFolders() {
|
||||
public static List<MusicFolder> getTestMusicFolders() {
|
||||
List<MusicFolder> liste = new ArrayList<>();
|
||||
File musicDir = new File(MusicFolderDaoMock.resolveMusicFolderPath());
|
||||
File musicDir = new File(MusicFolderTestData.resolveMusicFolderPath());
|
||||
MusicFolder musicFolder = new MusicFolder(1,musicDir,"Music",true,new Date());
|
||||
liste.add(musicFolder);
|
||||
|
||||
File music2Dir = new File(MusicFolderDaoMock.resolveMusic2FolderPath());
|
||||
File music2Dir = new File(MusicFolderTestData.resolveMusic2FolderPath());
|
||||
MusicFolder musicFolder2 = new MusicFolder(2,music2Dir,"Music2",true,new Date());
|
||||
liste.add(musicFolder2);
|
||||
return liste;
|
||||
@@ -1,25 +1,34 @@
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.libresonic.player.domain.PlayQueue;
|
||||
import org.libresonic.player.domain.Player;
|
||||
import org.libresonic.player.domain.PlayerTechnology;
|
||||
import org.libresonic.player.domain.TranscodeScheme;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.libresonic.player.domain.Player;
|
||||
import org.libresonic.player.domain.PlayerTechnology;
|
||||
import org.libresonic.player.domain.PlayQueue;
|
||||
import org.libresonic.player.domain.TranscodeScheme;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Unit test of {@link PlayerDao}.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
public class PlayerDaoTestCase extends DaoTestCaseBean2 {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
@Autowired
|
||||
PlayerDao playerDao;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
getJdbcTemplate().execute("delete from player");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreatePlayer() {
|
||||
Player player = new Player();
|
||||
player.setName("name");
|
||||
@@ -41,6 +50,7 @@ public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
assertPlayerEquals(player, newPlayer2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultValues() {
|
||||
playerDao.createPlayer(new Player());
|
||||
Player player = playerDao.getAllPlayers().get(0);
|
||||
@@ -50,6 +60,7 @@ public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
assertNull("Player client ID should be null by default.", player.getClientId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIdentity() {
|
||||
Player player = new Player();
|
||||
|
||||
@@ -76,6 +87,7 @@ public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong number of players.", 3, playerDao.getAllPlayers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPlaylist() {
|
||||
Player player = new Player();
|
||||
playerDao.createPlayer(player);
|
||||
@@ -87,6 +99,7 @@ public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
assertNotSame("Wrong playlist.", playQueue, player.getPlayQueue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPlayersForUserAndClientId() {
|
||||
Player player = new Player();
|
||||
player.setUsername("sindre");
|
||||
@@ -108,6 +121,7 @@ public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
assertPlayerEquals(player, players.get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdatePlayer() {
|
||||
Player player = new Player();
|
||||
playerDao.createPlayer(player);
|
||||
@@ -129,6 +143,7 @@ public class PlayerDaoTestCase extends DaoTestCaseBase {
|
||||
assertPlayerEquals(player, newPlayer);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeletePlayer() {
|
||||
assertEquals("Wrong number of players.", 0, playerDao.getAllPlayers().size());
|
||||
|
||||
|
||||
@@ -1,24 +1,33 @@
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.libresonic.player.domain.PodcastChannel;
|
||||
import org.libresonic.player.domain.PodcastEpisode;
|
||||
import org.libresonic.player.domain.PodcastStatus;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.libresonic.player.domain.PodcastChannel;
|
||||
import org.libresonic.player.domain.PodcastEpisode;
|
||||
import org.libresonic.player.domain.PodcastStatus;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Unit test of {@link PodcastDao}.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
public class PodcastDaoTestCase extends DaoTestCaseBean2 {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
@Autowired
|
||||
PodcastDao podcastDao;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
getJdbcTemplate().execute("delete from podcast_channel");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateChannel() {
|
||||
PodcastChannel channel = new PodcastChannel("http://foo");
|
||||
podcastDao.createChannel(channel);
|
||||
@@ -28,6 +37,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertChannelEquals(channel, newChannel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChannelId() {
|
||||
int channelId = podcastDao.createChannel(new PodcastChannel("http://foo"));
|
||||
|
||||
@@ -42,6 +52,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Error in createChannel.", channelId + 5, podcastDao.createChannel(new PodcastChannel("http://foo")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateChannel() {
|
||||
PodcastChannel channel = new PodcastChannel("http://foo");
|
||||
podcastDao.createChannel(channel);
|
||||
@@ -61,6 +72,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertChannelEquals(channel, newChannel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteChannel() {
|
||||
assertEquals("Wrong number of channels.", 0, podcastDao.getAllChannels().size());
|
||||
|
||||
@@ -78,6 +90,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong number of channels.", 0, podcastDao.getAllChannels().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateEpisode() {
|
||||
int channelId = createChannel();
|
||||
PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", "path", "title", "description",
|
||||
@@ -89,6 +102,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertEpisodeEquals(episode, newEpisode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetEpisode() {
|
||||
assertNull("Error in getEpisode()", podcastDao.getEpisode(23));
|
||||
|
||||
@@ -102,6 +116,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertEpisodeEquals(episode, newEpisode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetEpisodes() {
|
||||
int channelId = createChannel();
|
||||
PodcastEpisode a = new PodcastEpisode(null, channelId, "a", null, null, null,
|
||||
@@ -126,6 +141,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUpdateEpisode() {
|
||||
int channelId = createChannel();
|
||||
PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", null, null, null,
|
||||
@@ -150,6 +166,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
assertEpisodeEquals(episode, newEpisode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteEpisode() {
|
||||
int channelId = createChannel();
|
||||
|
||||
@@ -172,6 +189,7 @@ public class PodcastDaoTestCase extends DaoTestCaseBase {
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testCascadingDelete() {
|
||||
int channelId = createChannel();
|
||||
PodcastEpisode episode = new PodcastEpisode(null, channelId, "http://bar", null, null, null,
|
||||
|
||||
+22
-5
@@ -1,22 +1,34 @@
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.libresonic.player.domain.Player;
|
||||
import org.libresonic.player.domain.Transcoding;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.libresonic.player.domain.Player;
|
||||
import org.libresonic.player.domain.Transcoding;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Unit test of {@link TranscodingDao}.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class TranscodingDaoTestCase extends DaoTestCaseBase {
|
||||
public class TranscodingDaoTestCase extends DaoTestCaseBean2 {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
@Autowired
|
||||
TranscodingDao transcodingDao;
|
||||
|
||||
@Autowired
|
||||
PlayerDao playerDao;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
getJdbcTemplate().execute("delete from transcoding2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateTranscoding() {
|
||||
Transcoding transcoding = new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false);
|
||||
transcodingDao.createTranscoding(transcoding);
|
||||
@@ -25,6 +37,7 @@ public class TranscodingDaoTestCase extends DaoTestCaseBase {
|
||||
assertTranscodingEquals(transcoding, newTranscoding);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateTranscoding() {
|
||||
Transcoding transcoding = new Transcoding(null, "name", "sourceFormats", "targetFormat", "step1", "step2", "step3", false);
|
||||
transcodingDao.createTranscoding(transcoding);
|
||||
@@ -43,6 +56,7 @@ public class TranscodingDaoTestCase extends DaoTestCaseBase {
|
||||
assertTranscodingEquals(transcoding, newTranscoding);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteTranscoding() {
|
||||
assertEquals("Wrong number of transcodings.", 0, transcodingDao.getAllTranscodings().size());
|
||||
|
||||
@@ -59,6 +73,7 @@ public class TranscodingDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong number of transcodings.", 0, transcodingDao.getAllTranscodings().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPlayerTranscoding() {
|
||||
Player player = new Player();
|
||||
playerDao.createPlayer(player);
|
||||
@@ -89,6 +104,7 @@ public class TranscodingDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong number of transcodings.", 0, activeTranscodings.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCascadingDeletePlayer() {
|
||||
Player player = new Player();
|
||||
playerDao.createPlayer(player);
|
||||
@@ -105,6 +121,7 @@ public class TranscodingDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong number of transcodings.", 0, activeTranscodings.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCascadingDeleteTranscoding() {
|
||||
Player player = new Player();
|
||||
playerDao.createPlayer(player);
|
||||
|
||||
@@ -1,29 +1,36 @@
|
||||
package org.libresonic.player.dao;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.libresonic.player.domain.AvatarScheme;
|
||||
import org.libresonic.player.domain.TranscodeScheme;
|
||||
import org.libresonic.player.domain.User;
|
||||
import org.libresonic.player.domain.UserSettings;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Unit test of {@link UserDao}.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class UserDaoTestCase extends DaoTestCaseBase {
|
||||
public class UserDaoTestCase extends DaoTestCaseBean2 {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
JdbcTemplate template = getJdbcTemplate();
|
||||
template.execute("delete from user_role");
|
||||
template.execute("delete from user");
|
||||
@Autowired
|
||||
UserDao userDao;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
getJdbcTemplate().execute("delete from user_role");
|
||||
getJdbcTemplate().execute("delete from user");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateUser() {
|
||||
User user = new User("sindre", "secret", "sindre@activeobjects.no", false, 1000L, 2000L, 3000L);
|
||||
user.setAdminRole(true);
|
||||
@@ -42,6 +49,28 @@ public class UserDaoTestCase extends DaoTestCaseBase {
|
||||
assertUserEquals(user, newUser);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateUserTransactionalError() {
|
||||
User user = new User ("muff1nman", "secret", "noemail") {
|
||||
@Override
|
||||
public boolean isPlaylistRole() {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
};
|
||||
|
||||
user.setAdminRole(true);
|
||||
int beforeSize = userDao.getAllUsers().size();
|
||||
boolean caughtException = false;
|
||||
try {
|
||||
userDao.createUser(user);
|
||||
} catch (RuntimeException e) {
|
||||
caughtException = true;
|
||||
}
|
||||
assertTrue("It was expected for createUser to throw an exception", caughtException);
|
||||
assertEquals(beforeSize, userDao.getAllUsers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateUser() {
|
||||
User user = new User("sindre", "secret", null);
|
||||
user.setAdminRole(true);
|
||||
@@ -81,6 +110,7 @@ public class UserDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong bytes uploaded.", 3, newUser.getBytesUploaded());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserByName() {
|
||||
User user = new User("sindre", "secret", null);
|
||||
userDao.createUser(user);
|
||||
@@ -96,6 +126,7 @@ public class UserDaoTestCase extends DaoTestCaseBase {
|
||||
assertNull("Error in getUserByName().", userDao.getUserByName(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteUser() {
|
||||
assertEquals("Wrong number of users.", 0, userDao.getAllUsers().size());
|
||||
|
||||
@@ -112,6 +143,7 @@ public class UserDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong number of users.", 0, userDao.getAllUsers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRolesForUser() {
|
||||
User user = new User("sindre", "secret", null);
|
||||
user.setAdminRole(true);
|
||||
@@ -130,6 +162,7 @@ public class UserDaoTestCase extends DaoTestCaseBase {
|
||||
assertEquals("Wrong role.", "settings", roles[4]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserSettings() {
|
||||
assertNull("Error in getUserSettings.", userDao.getUserSettings("sindre"));
|
||||
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package org.libresonic.player.service;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runners.model.Statement;
|
||||
import org.libresonic.player.TestCaseUtils;
|
||||
import org.libresonic.player.util.LibresonicHomeRule;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.rules.SpringClassRule;
|
||||
import org.springframework.test.context.junit4.rules.SpringMethodRule;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ContextConfiguration(locations = {
|
||||
"/applicationContext-service.xml",
|
||||
"/applicationContext-cache.xml",
|
||||
"/applicationContext-testdb.xml",
|
||||
"/applicationContext-mockSonos.xml"})
|
||||
public class LegacyDatabaseStartupTestCase {
|
||||
|
||||
@ClassRule
|
||||
public static final SpringClassRule classRule = new SpringClassRule() {
|
||||
LibresonicHomeRule libresonicRule = new LibresonicHomeRule() {
|
||||
@Override
|
||||
protected void before() throws Throwable {
|
||||
super.before();
|
||||
String homeParent = TestCaseUtils.libresonicHomePathForTest();
|
||||
System.setProperty("libresonic.home", TestCaseUtils.libresonicHomePathForTest());
|
||||
TestCaseUtils.cleanLibresonicHomeForTest();
|
||||
File dbDirectory = new File(homeParent, "/db");
|
||||
FileUtils.forceMkdir(dbDirectory);
|
||||
org.libresonic.player.util.FileUtils.copyResourcesRecursively(getClass().getResource("/db/pre-liquibase/db"), new File(homeParent));
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public Statement apply(Statement base, Description description) {
|
||||
Statement spring = super.apply(base, description);
|
||||
return libresonicRule.apply(spring, description);
|
||||
}
|
||||
};
|
||||
|
||||
@Rule
|
||||
public final SpringMethodRule springMethodRule = new SpringMethodRule();
|
||||
|
||||
@Test
|
||||
public void testStartup() throws Exception {
|
||||
System.out.println("Successful startup");
|
||||
}
|
||||
|
||||
}
|
||||
+49
-30
@@ -1,17 +1,24 @@
|
||||
package org.libresonic.player.service;
|
||||
|
||||
import com.codahale.metrics.ConsoleReporter;
|
||||
import com.codahale.metrics.JmxReporter;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.codahale.metrics.Timer;
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runners.model.Statement;
|
||||
import org.libresonic.player.TestCaseUtils;
|
||||
import org.libresonic.player.dao.*;
|
||||
import org.libresonic.player.domain.Album;
|
||||
import org.libresonic.player.domain.Artist;
|
||||
import org.libresonic.player.domain.MediaFile;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.libresonic.player.util.LibresonicHomeRule;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.rules.SpringClassRule;
|
||||
import org.springframework.test.context.junit4.rules.SpringMethodRule;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -30,47 +37,59 @@ import java.util.concurrent.TimeUnit;
|
||||
* An empty database is created on the fly.
|
||||
*
|
||||
*/
|
||||
public class MediaScannerServiceTestCase extends TestCase {
|
||||
@ContextConfiguration(locations = {
|
||||
"/applicationContext-service.xml",
|
||||
"/applicationContext-cache.xml",
|
||||
"/applicationContext-testdb.xml",
|
||||
"/applicationContext-mockSonos.xml"})
|
||||
public class MediaScannerServiceTestCase {
|
||||
|
||||
private static String baseResources = "/org/libresonic/player/service/mediaScannerServiceTestCase/";
|
||||
@ClassRule
|
||||
public static final SpringClassRule classRule = new SpringClassRule() {
|
||||
LibresonicHomeRule libresonicRule = new LibresonicHomeRule();
|
||||
@Override
|
||||
public Statement apply(Statement base, Description description) {
|
||||
Statement spring = super.apply(base, description);
|
||||
return libresonicRule.apply(spring, description);
|
||||
}
|
||||
};
|
||||
|
||||
@Rule
|
||||
public final SpringMethodRule springMethodRule = new SpringMethodRule();
|
||||
|
||||
private final MetricRegistry metrics = new MetricRegistry();
|
||||
|
||||
@Autowired
|
||||
private MediaScannerService mediaScannerService;
|
||||
|
||||
private MediaScannerService mediaScannerService = null;
|
||||
private MediaFileDao mediaFileDao = null;
|
||||
private MusicFolderDao musicFolderDao = null;
|
||||
private DaoHelper daoHelper = null;
|
||||
private MediaFileService mediaFileService = null;
|
||||
private ArtistDao artistDao = null;
|
||||
private AlbumDao albumDao = null;
|
||||
@Autowired
|
||||
private MediaFileDao mediaFileDao;
|
||||
|
||||
@Autowired
|
||||
private MusicFolderDao musicFolderDao;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
@Autowired
|
||||
private DaoHelper daoHelper;
|
||||
|
||||
System.setProperty("libresonic.home", TestCaseUtils.libresonicHomePathForTest());
|
||||
@Autowired
|
||||
private MediaFileService mediaFileService;
|
||||
|
||||
TestCaseUtils.cleanLibresonicHomeForTest();
|
||||
@Autowired
|
||||
private ArtistDao artistDao;
|
||||
|
||||
// load spring context
|
||||
ApplicationContext context = TestCaseUtils.loadSpringApplicationContext(baseResources);
|
||||
|
||||
mediaScannerService = (MediaScannerService)context.getBean("mediaScannerService");
|
||||
mediaFileDao = (MediaFileDao)context.getBean("mediaFileDao");
|
||||
musicFolderDao = (MusicFolderDao) context.getBean("musicFolderDao");
|
||||
daoHelper = (DaoHelper) context.getBean("daoHelper");
|
||||
mediaFileService = (MediaFileService) context.getBean("mediaFileService");
|
||||
artistDao = (ArtistDao) context.getBean("artistDao");
|
||||
albumDao = (AlbumDao) context.getBean("albumDao");
|
||||
}
|
||||
@Autowired
|
||||
private AlbumDao albumDao;
|
||||
|
||||
@Autowired
|
||||
private SettingsService settingsService;
|
||||
|
||||
/**
|
||||
* Tests the MediaScannerService by scanning the test media library into an empty database.
|
||||
*/
|
||||
@Test
|
||||
public void testScanLibrary() {
|
||||
MusicFolderTestData.getTestMusicFolders().forEach(musicFolderDao::createMusicFolder);
|
||||
settingsService.clearMusicFolderCache();
|
||||
|
||||
Timer globalTimer = metrics.timer(MetricRegistry.name(MediaScannerServiceTestCase.class, "Timer.global"));
|
||||
|
||||
@@ -85,10 +104,10 @@ public class MediaScannerServiceTestCase extends TestCase {
|
||||
|
||||
|
||||
// Music Folder Music must have 3 children
|
||||
List<MediaFile> listeMusicChildren = mediaFileDao.getChildrenOf(MusicFolderDaoMock.resolveMusicFolderPath());
|
||||
List<MediaFile> listeMusicChildren = mediaFileDao.getChildrenOf(MusicFolderTestData.resolveMusicFolderPath());
|
||||
Assert.assertEquals(3,listeMusicChildren.size());
|
||||
// Music Folder Music2 must have 1 children
|
||||
List<MediaFile> listeMusic2Children = mediaFileDao.getChildrenOf(MusicFolderDaoMock.resolveMusic2FolderPath());
|
||||
List<MediaFile> listeMusic2Children = mediaFileDao.getChildrenOf(MusicFolderTestData.resolveMusic2FolderPath());
|
||||
Assert.assertEquals(1,listeMusic2Children.size());
|
||||
|
||||
System.out.println("--- List of all artists ---");
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package org.libresonic.player.service;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.libresonic.player.TestCaseUtils;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class StartupTestCase extends TestCase {
|
||||
|
||||
private static String baseResources = "/org/libresonic/player/service/mediaScannerServiceTestCase/";
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
public void testStartup() throws Exception {
|
||||
String homeParent = TestCaseUtils.libresonicHomePathForTest();
|
||||
System.setProperty("libresonic.home", TestCaseUtils.libresonicHomePathForTest());
|
||||
TestCaseUtils.cleanLibresonicHomeForTest();
|
||||
File dbDirectory = new File(homeParent, "/db");
|
||||
FileUtils.forceMkdir(dbDirectory);
|
||||
org.libresonic.player.util.FileUtils.copyResourcesRecursively(getClass().getResource("/db/pre-liquibase/db"), new File(homeParent));
|
||||
|
||||
// load spring context
|
||||
ApplicationContext context = TestCaseUtils.loadSpringApplicationContext(baseResources);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.libresonic.player.util;
|
||||
|
||||
import org.junit.rules.ExternalResource;
|
||||
import org.libresonic.player.TestCaseUtils;
|
||||
|
||||
public class LibresonicHomeRule extends ExternalResource {
|
||||
@Override
|
||||
protected void before() throws Throwable {
|
||||
super.before();
|
||||
System.setProperty("libresonic.home", TestCaseUtils.libresonicHomePathForTest());
|
||||
|
||||
TestCaseUtils.cleanLibresonicHomeForTest();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:jaxws="http://cxf.apache.org/jaxws"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
|
||||
|
||||
<bean id="sonosHelper" class="org.mockito.Mockito" factory-method="mock">
|
||||
<constructor-arg value="org.libresonic.player.service.sonos.SonosHelper" />
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
|
||||
<bean id="dataSource"
|
||||
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
|
||||
|
||||
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
|
||||
<property name="url" value="jdbc:hsqldb:file:#{systemProperties['libresonic.home']}/db/libresonic" />
|
||||
<property name="username" value="sa" />
|
||||
<property name="password" value="" />
|
||||
</bean>
|
||||
</beans>
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
|
||||
|
||||
<bean id="cacheFactory" class="org.libresonic.player.cache.CacheFactory"/>
|
||||
|
||||
<bean id="userCache" factory-bean="cacheFactory" factory-method="getCache">
|
||||
<constructor-arg value="userCache"/>
|
||||
</bean>
|
||||
|
||||
<bean id="mediaFileMemoryCache" factory-bean="cacheFactory" factory-method="getCache">
|
||||
<constructor-arg value="mediaFileMemoryCache"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
-217
@@ -1,217 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
|
||||
|
||||
<!-- DAO's -->
|
||||
|
||||
<bean id="playerDao" class="org.libresonic.player.dao.PlayerDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="mediaFileDao" class="org.libresonic.player.dao.MediaFileDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="artistDao" class="org.libresonic.player.dao.ArtistDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="albumDao" class="org.libresonic.player.dao.AlbumDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="playlistDao" class="org.libresonic.player.dao.PlaylistDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="playQueueDao" class="org.libresonic.player.dao.PlayQueueDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="internetRadioDao" class="org.libresonic.player.dao.InternetRadioDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="musicFileInfoDao" class="org.libresonic.player.dao.RatingDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="musicFolderDao" class="org.libresonic.player.dao.MusicFolderDaoMock">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="userDao" class="org.libresonic.player.dao.UserDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="transcodingDao" class="org.libresonic.player.dao.TranscodingDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="podcastDao" class="org.libresonic.player.dao.PodcastDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="avatarDao" class="org.libresonic.player.dao.AvatarDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="shareDao" class="org.libresonic.player.dao.ShareDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="bookmarkDao" class="org.libresonic.player.dao.BookmarkDao">
|
||||
<property name="daoHelper" ref="daoHelper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="daoHelper" class="org.libresonic.player.dao.GenericDaoHelper">
|
||||
<constructor-arg name="dataSource" ref="dataSource" />
|
||||
</bean>
|
||||
|
||||
<bean id="rollbackFile" class="java.io.File">
|
||||
<constructor-arg type="java.io.File" index="0" value="#{T(org.libresonic.player.service.SettingsService).libresonicHome}" />
|
||||
<constructor-arg type="java.lang.String" index="1" value="rollback.sql" />
|
||||
</bean>
|
||||
|
||||
<bean id="dataSource"
|
||||
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
|
||||
|
||||
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
|
||||
<property name="url" value="jdbc:hsqldb:file:#{systemProperties['libresonic.home']}/db/libresonic" />
|
||||
<property name="username" value="sa" />
|
||||
<property name="password" value="" />
|
||||
</bean>
|
||||
|
||||
<bean id="liquibase" class="org.libresonic.player.spring.SpringLiquibase">
|
||||
<property name="dataSource" ref="dataSource" />
|
||||
<property name="changeLog" value="classpath:liquibase/db-changelog.xml" />
|
||||
<property name="rollbackFile" ref="rollbackFile" />
|
||||
<property name="changeLogParameters">
|
||||
<map>
|
||||
<entry key="defaultMusicFolder" value="#{T(org.libresonic.player.util.Util).getDefaultMusicFolder()}" />
|
||||
<entry key="varcharLimit" value="${database.varchar.maxlength:512}" />
|
||||
<entry key="userTableQuote" value="" />
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!-- Services -->
|
||||
|
||||
<bean id="mediaFileService" class="org.libresonic.player.service.MediaFileService">
|
||||
<property name="securityService" ref="securityService"/>
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
<property name="mediaFileMemoryCache" ref="mediaFileMemoryCache"/>
|
||||
<property name="mediaFileDao" ref="mediaFileDao"/>
|
||||
<property name="albumDao" ref="albumDao"/>
|
||||
<property name="metaDataParserFactory" ref="metaDataParserFactory"/>
|
||||
</bean>
|
||||
|
||||
<bean id="securityService" class="org.libresonic.player.service.SecurityService">
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
<property name="userDao" ref="userDao"/>
|
||||
<property name="userCache" ref="userCache"/>
|
||||
</bean>
|
||||
|
||||
<bean id="configurationService" class="org.libresonic.player.service.ApacheCommonsConfigurationService" />
|
||||
|
||||
<bean id="settingsService" class="org.libresonic.player.service.SettingsService" init-method="init">
|
||||
<property name="internetRadioDao" ref="internetRadioDao"/>
|
||||
<property name="musicFolderDao" ref="musicFolderDao"/>
|
||||
<property name="userDao" ref="userDao"/>
|
||||
<property name="avatarDao" ref="avatarDao"/>
|
||||
<property name="versionService" ref="versionService"/>
|
||||
<property name="configurationService" ref="configurationService" />
|
||||
</bean>
|
||||
|
||||
<bean id="mediaScannerService" class="org.libresonic.player.service.MediaScannerService" init-method="initNoSchedule" depends-on="metaDataParserFactory">
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
<property name="mediaFileDao" ref="mediaFileDao"/>
|
||||
<property name="playlistService" ref="playlistService"/>
|
||||
<property name="artistDao" ref="artistDao"/>
|
||||
<property name="albumDao" ref="albumDao"/>
|
||||
<property name="searchService" ref="searchService"/>
|
||||
<!-- <property name="queueSender" ref="queueSender"/> -->
|
||||
</bean>
|
||||
|
||||
|
||||
<bean id="searchService" class="org.libresonic.player.service.SearchService">
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
<property name="artistDao" ref="artistDao"/>
|
||||
<property name="albumDao" ref="albumDao"/>
|
||||
</bean>
|
||||
|
||||
<bean id="networkService" class="org.libresonic.player.service.NetworkService" init-method="init">
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="playerService" class="org.libresonic.player.service.PlayerService" init-method="init">
|
||||
<property name="playerDao" ref="playerDao"/>
|
||||
<property name="statusService" ref="statusService"/>
|
||||
<property name="securityService" ref="securityService"/>
|
||||
<property name="transcodingService" ref="transcodingService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="playlistService" class="org.libresonic.player.service.PlaylistService">
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
<property name="securityService" ref="securityService"/>
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
<property name="mediaFileDao" ref="mediaFileDao"/>
|
||||
<property name="playlistDao" ref="playlistDao"/>
|
||||
</bean>
|
||||
|
||||
<bean id="versionService" class="org.libresonic.player.service.VersionService" init-method="init"/>
|
||||
|
||||
<bean id="statusService" class="org.libresonic.player.service.StatusService">
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ratingService" class="org.libresonic.player.service.RatingService">
|
||||
<property name="ratingDao" ref="musicFileInfoDao"/>
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
<property name="securityService" ref="securityService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="musicIndexService" class="org.libresonic.player.service.MusicIndexService">
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="transcodingService" class="org.libresonic.player.service.TranscodingService">
|
||||
<property name="transcodingDao" ref="transcodingDao"/>
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
</bean>
|
||||
|
||||
|
||||
<bean id="podcastService" class="org.libresonic.player.service.PodcastService" init-method="init">
|
||||
<property name="podcastDao" ref="podcastDao"/>
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
<property name="securityService" ref="securityService"/>
|
||||
<property name="mediaFileService" ref="mediaFileService"/>
|
||||
<property name="metaDataParserFactory" ref="metaDataParserFactory"/>
|
||||
</bean>
|
||||
|
||||
|
||||
|
||||
<bean id="metaDataParserFactory" class="org.libresonic.player.service.metadata.MetaDataParserFactory">
|
||||
<property name="parsers">
|
||||
<list>
|
||||
<bean class="org.libresonic.player.service.metadata.JaudiotaggerParser"/>
|
||||
<bean class="org.libresonic.player.service.metadata.FFmpegParser">
|
||||
<property name="transcodingService" ref="transcodingService"/>
|
||||
</bean>
|
||||
<bean class="org.libresonic.player.service.metadata.DefaultMetaDataParser"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
|
||||
<bean id="localeResolver" class="org.libresonic.player.i18n.LibresonicLocaleResolver">
|
||||
<property name="securityService" ref="securityService"/>
|
||||
<property name="settingsService" ref="settingsService"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
Reference in New Issue
Block a user