Skip to content

Commit 4dca489

Browse files
committed
DatabaseImagePersistenceStrategy.get(): replace usage of ImageData.
Addressed to #120 No functional changes.
1 parent 7fa1008 commit 4dca489

File tree

10 files changed

+129
-39
lines changed

10 files changed

+129
-39
lines changed

src/main/java/ru/mystamps/web/config/DaoConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public JdbcImageDao getJdbcImageDao() {
5757
return new JdbcImageDaoImpl(jdbcTemplate);
5858
}
5959

60+
@Bean
61+
public JdbcImageDataDao getJdbcImageDataDao() {
62+
return new JdbcImageDataDaoImpl(jdbcTemplate);
63+
}
64+
6065
@Bean
6166
public MichelCatalogDao getMichelCatalogDao() {
6267
return new JdbcMichelCatalogDaoImpl(jdbcTemplate);

src/main/java/ru/mystamps/web/config/StrategiesConfig.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,16 @@ class DbStrategiesConfig implements StrategiesConfig {
3939
@Autowired
4040
private ImageDataDao imageDataDao;
4141

42+
@Autowired
43+
private DaoConfig daoConfig;
44+
4245
@Bean
4346
@Override
4447
public ImagePersistenceStrategy getImagePersistenceStrategy() {
45-
return new DatabaseImagePersistenceStrategy(imageDataDao);
48+
return new DatabaseImagePersistenceStrategy(
49+
imageDataDao,
50+
daoConfig.getJdbcImageDataDao()
51+
);
4652
}
4753

4854
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (C) 2009-2016 Slava Semushin <[email protected]>
3+
*
4+
* This program is free software; you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation; either version 2 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program; if not, write to the Free Software
16+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17+
*/
18+
package ru.mystamps.web.dao;
19+
20+
import ru.mystamps.web.service.dto.DbImageDto;
21+
22+
public interface JdbcImageDataDao {
23+
DbImageDto findByImageId(Integer imageId);
24+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright (C) 2009-2016 Slava Semushin <[email protected]>
3+
*
4+
* This program is free software; you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation; either version 2 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program; if not, write to the Free Software
16+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17+
*/
18+
package ru.mystamps.web.dao.impl;
19+
20+
import java.util.Collections;
21+
22+
import org.springframework.beans.factory.annotation.Value;
23+
import org.springframework.dao.EmptyResultDataAccessException;
24+
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
25+
26+
import lombok.RequiredArgsConstructor;
27+
28+
import ru.mystamps.web.dao.JdbcImageDataDao;
29+
import ru.mystamps.web.service.dto.DbImageDto;
30+
31+
@RequiredArgsConstructor
32+
public class JdbcImageDataDaoImpl implements JdbcImageDataDao {
33+
34+
private final NamedParameterJdbcTemplate jdbcTemplate;
35+
36+
@Value("${image_data.find_by_image_id}")
37+
private String findByImageIdSql;
38+
39+
@Override
40+
public DbImageDto findByImageId(Integer imageId) {
41+
try {
42+
return jdbcTemplate.queryForObject(
43+
findByImageIdSql,
44+
Collections.singletonMap("image_id", imageId),
45+
RowMappers::forDbImageDto
46+
);
47+
} catch (EmptyResultDataAccessException ex) {
48+
return null;
49+
}
50+
}
51+
52+
}

src/main/java/ru/mystamps/web/dao/impl/RowMappers.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import ru.mystamps.web.dao.dto.UserDetails;
2929
import ru.mystamps.web.dao.dto.UsersActivationDto;
3030
import ru.mystamps.web.dao.dto.UsersActivationFullDto;
31+
import ru.mystamps.web.service.dto.DbImageDto;
3132
import ru.mystamps.web.service.dto.LinkEntityDto;
3233
import ru.mystamps.web.service.dto.SelectEntityDto;
3334
import ru.mystamps.web.service.dto.SeriesInfoDto;
@@ -223,4 +224,11 @@ public static UserDetails forUserDetails(ResultSet rs, int i) throws SQLExceptio
223224
);
224225
}
225226

227+
public static DbImageDto forDbImageDto(ResultSet rs, int i) throws SQLException {
228+
return new DbImageDto(
229+
rs.getString("type"),
230+
rs.getBytes("data")
231+
);
232+
}
233+
226234
}

src/main/java/ru/mystamps/web/service/DatabaseImagePersistenceStrategy.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import lombok.RequiredArgsConstructor;
3030

3131
import ru.mystamps.web.dao.ImageDataDao;
32+
import ru.mystamps.web.dao.JdbcImageDataDao;
3233
import ru.mystamps.web.entity.Image;
3334
import ru.mystamps.web.entity.ImageData;
3435
import ru.mystamps.web.service.dto.DbImageDto;
@@ -41,6 +42,7 @@ public class DatabaseImagePersistenceStrategy implements ImagePersistenceStrateg
4142
LoggerFactory.getLogger(DatabaseImagePersistenceStrategy.class);
4243

4344
private final ImageDataDao imageDataDao;
45+
private final JdbcImageDataDao jdbcImageDataDao;
4446

4547
@PostConstruct
4648
public void init() {
@@ -65,13 +67,13 @@ public void save(MultipartFile file, Image image) {
6567

6668
@Override
6769
public ImageDto get(Image image) {
68-
ImageData imageData = imageDataDao.findByImage(image);
69-
if (imageData == null) {
70+
DbImageDto imageDto = jdbcImageDataDao.findByImageId(image.getId());
71+
if (imageDto == null) {
7072
LOG.warn("Found image without content: #{}", image.getId());
7173
return null;
7274
}
7375

74-
return new DbImageDto(imageData);
76+
return imageDto;
7577
}
7678

7779
}

src/main/java/ru/mystamps/web/service/dto/DbImageDto.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,13 @@
1818
package ru.mystamps.web.service.dto;
1919

2020
import lombok.EqualsAndHashCode;
21+
import lombok.Getter;
2122
import lombok.RequiredArgsConstructor;
2223

23-
import ru.mystamps.web.entity.ImageData;
24-
24+
@Getter
2525
@EqualsAndHashCode
2626
@RequiredArgsConstructor
2727
public class DbImageDto implements ImageDto {
28-
private final ImageData imageData;
29-
30-
@Override
31-
public String getType() {
32-
return imageData.getImage().getType().toString();
33-
}
34-
35-
@Override
36-
public byte[] getData() {
37-
return imageData.getContent();
38-
}
39-
28+
private final String type;
29+
private final byte[] data;
4030
}

src/main/resources/sql/image_dao_queries.properties

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,11 @@ series_image.find_by_series_id = \
1313
SELECT image_id \
1414
FROM series_images \
1515
WHERE series_id = :series_id
16+
17+
image_data.find_by_image_id = \
18+
SELECT d.content AS data \
19+
, i.type \
20+
FROM images_data d \
21+
JOIN images i \
22+
ON i.id = d.image_id \
23+
WHERE d.image_id = :image_id

src/test/groovy/ru/mystamps/web/service/DatabaseImagePersistenceStrategyTest.groovy

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,21 @@ import org.springframework.web.multipart.MultipartFile
2222
import spock.lang.Specification
2323

2424
import ru.mystamps.web.dao.ImageDataDao
25+
import ru.mystamps.web.dao.JdbcImageDataDao
2526
import ru.mystamps.web.entity.Image
2627
import ru.mystamps.web.entity.ImageData
27-
import ru.mystamps.web.service.dto.DbImageDto
2828
import ru.mystamps.web.service.dto.ImageDto
2929
import ru.mystamps.web.service.exception.ImagePersistenceException
3030

3131
class DatabaseImagePersistenceStrategyTest extends Specification {
3232

3333
private ImageDataDao imageDataDao = Mock()
34+
private JdbcImageDataDao jdbcImageDataDao = Mock()
3435
private MultipartFile multipartFile = Mock()
3536
private Image image = TestObjects.createImage()
3637

37-
private ImagePersistenceStrategy strategy = new DatabaseImagePersistenceStrategy(imageDataDao)
38+
private ImagePersistenceStrategy strategy =
39+
new DatabaseImagePersistenceStrategy(imageDataDao, jdbcImageDataDao)
3840

3941
//
4042
// Tests for save()
@@ -82,19 +84,22 @@ class DatabaseImagePersistenceStrategyTest extends Specification {
8284

8385
def "get() should pass image to image data dao"() {
8486
given:
85-
Image expectedImage = TestObjects.createImage()
87+
Integer expectedImageId = image.getId()
88+
and:
89+
Image image = TestObjects.createImage()
90+
image.setId(expectedImageId)
8691
when:
87-
strategy.get(expectedImage)
92+
strategy.get(image)
8893
then:
89-
1 * imageDataDao.findByImage({ Image image ->
90-
assert image == expectedImage
94+
1 * jdbcImageDataDao.findByImageId({ Integer imageId ->
95+
assert imageId == expectedImageId
9196
return true
9297
})
9398
}
9499

95100
def "get() should return null when image data dao returned null"() {
96101
given:
97-
imageDataDao.findByImage(_ as Image) >> null
102+
jdbcImageDataDao.findByImageId(_ as Integer) >> null
98103
when:
99104
ImageDto result = strategy.get(image)
100105
then:
@@ -103,15 +108,13 @@ class DatabaseImagePersistenceStrategyTest extends Specification {
103108

104109
def "get() should return result from image data dao"() {
105110
given:
106-
ImageData expectedImageData = TestObjects.createImageData()
107-
and:
108-
ImageDto expectedImage = new DbImageDto(expectedImageData)
111+
ImageDto expectedImageDto = TestObjects.createDbImageDto()
109112
and:
110-
imageDataDao.findByImage(_ as Image) >> expectedImageData
113+
jdbcImageDataDao.findByImageId(_ as Integer) >> expectedImageDto
111114
when:
112115
ImageDto result = strategy.get(image)
113116
then:
114-
result == expectedImage
117+
result == expectedImageDto
115118
}
116119

117120
}

src/test/java/ru/mystamps/web/service/TestObjects.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import ru.mystamps.web.dao.dto.UsersActivationDto;
2525
import ru.mystamps.web.dao.dto.UsersActivationFullDto;
2626
import ru.mystamps.web.entity.Image;
27-
import ru.mystamps.web.entity.ImageData;
2827
import ru.mystamps.web.service.dto.DbImageDto;
2928
import ru.mystamps.web.service.dto.LinkEntityDto;
3029
import ru.mystamps.web.service.dto.SeriesInfoDto;
@@ -108,15 +107,8 @@ public static Image createImage() {
108107
return image;
109108
}
110109

111-
public static ImageData createImageData() {
112-
ImageData imageData = new ImageData();
113-
imageData.setContent("test".getBytes());
114-
imageData.setImage(createImage());
115-
return imageData;
116-
}
117-
118110
public static DbImageDto createDbImageDto() {
119-
return new DbImageDto(createImageData());
111+
return new DbImageDto("PNG", "test".getBytes());
120112
}
121113

122114
public static SitemapInfoDto createSitemapInfoDto() {

0 commit comments

Comments
 (0)