Skip to content

Commit 2658b09

Browse files
committed
refactor: remove code for migrating site parser configuration from file to database.
Addressed to #975
1 parent f91e40a commit 2658b09

11 files changed

+0
-225
lines changed

src/main/java/ru/mystamps/web/feature/series/importing/event/DownloadingSucceededEventListener.java

-48
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
*/
1818
package ru.mystamps.web.feature.series.importing.event;
1919

20-
import java.util.List;
21-
2220
import javax.annotation.PostConstruct;
2321

2422
import org.slf4j.Logger;
@@ -30,12 +28,9 @@
3028

3129
import ru.mystamps.web.feature.series.importing.RawParsedDataDto;
3230
import ru.mystamps.web.feature.series.importing.SeriesImportService;
33-
import ru.mystamps.web.feature.series.importing.extractor.JsoupSiteParser;
3431
import ru.mystamps.web.feature.series.importing.extractor.SeriesInfo;
3532
import ru.mystamps.web.feature.series.importing.extractor.SiteParser;
36-
import ru.mystamps.web.feature.series.importing.extractor.SiteParserConfiguration;
3733
import ru.mystamps.web.feature.series.importing.extractor.SiteParserService;
38-
import ru.mystamps.web.feature.series.importing.extractor.TimedSiteParser;
3934

4035
/**
4136
* Listener of the {@link DownloadingSucceeded} event.
@@ -54,14 +49,10 @@ public class DownloadingSucceededEventListener
5449
private final Logger log;
5550
private final SeriesImportService seriesImportService;
5651
private final SiteParserService siteParserService;
57-
private final List<SiteParser> siteParsers;
5852
private final ApplicationEventPublisher eventPublisher;
5953

6054
@PostConstruct
6155
public void init() {
62-
// TODO: remove migration logic after finishing migration
63-
siteParsers.forEach(this::migrateParser);
64-
6556
log.info("Registered site parsers: {}", siteParserService.findParserNames());
6657
}
6758

@@ -107,43 +98,4 @@ public void onApplicationEvent(DownloadingSucceeded event) {
10798
seriesImportService.saveParsedData(requestId, data);
10899
}
109100

110-
@SuppressWarnings({ "PMD.AvoidReassigningParameters", "checkstyle:parameterassignment" })
111-
private void migrateParser(SiteParser parser) {
112-
if (parser instanceof TimedSiteParser) {
113-
parser = ((TimedSiteParser)parser).getOrigin();
114-
}
115-
116-
if (!(parser instanceof JsoupSiteParser)) {
117-
log.warn(
118-
"Could not migrate unknown (non-Jsoup based) parser: {}",
119-
parser.getClass().getName()
120-
);
121-
return;
122-
}
123-
124-
JsoupSiteParser jsoupParser = (JsoupSiteParser)parser;
125-
126-
SiteParserConfiguration cfg = jsoupParser.toConfiguration();
127-
String url = cfg.getMatchedUrl();
128-
String name = cfg.getName();
129-
if (siteParserService.findForUrl(url) != null) {
130-
log.warn(
131-
"Parser '{}': already exist in database and "
132-
+ "can be removed from application*.properties file",
133-
name
134-
);
135-
return;
136-
}
137-
138-
log.info("Parser '{}': migrating to database", name);
139-
140-
siteParserService.add(cfg);
141-
142-
log.warn(
143-
"Parser '{}': successfully migrated and "
144-
+ "can be removed from application*.properties file",
145-
name
146-
);
147-
}
148-
149101
}

src/main/java/ru/mystamps/web/feature/series/importing/event/EventsConfig.java

-10
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@
1717
*/
1818
package ru.mystamps.web.feature.series.importing.event;
1919

20-
import java.util.Collections;
2120
import java.util.HashMap;
22-
import java.util.List;
2321
import java.util.Map;
24-
import java.util.Optional;
2522

2623
import javax.annotation.PostConstruct;
2724

@@ -35,7 +32,6 @@
3532
import org.springframework.context.ApplicationListener;
3633
import org.springframework.context.annotation.Bean;
3734
import org.springframework.context.annotation.Configuration;
38-
import org.springframework.context.annotation.DependsOn;
3935
import org.springframework.core.env.ConfigurableEnvironment;
4036
import org.springframework.core.env.EnumerablePropertySource;
4137
import org.springframework.core.env.PropertySource;
@@ -104,21 +100,15 @@ public ApplicationListener<ImportRequestCreated> getImportRequestCreatedEventLis
104100
);
105101
}
106102

107-
// This bean has logic that modifies database. To ensure that all migrations have been applied
108-
// we need this dependency. This annotation shouldn't be needed in Spring Boot 2.
109-
// TODO: remove this annotation when migration will be completed
110-
@DependsOn("liquibase")
111103
@Bean
112104
public ApplicationListener<DownloadingSucceeded> getDownloadingSucceededEventListener(
113-
Optional<List<SiteParser>> siteParsers,
114105
SiteParserService siteParserService
115106
) {
116107

117108
return new DownloadingSucceededEventListener(
118109
LoggerFactory.getLogger(DownloadingSucceededEventListener.class),
119110
seriesImportService,
120111
siteParserService,
121-
siteParsers.orElse(Collections.emptyList()),
122112
eventPublisher
123113
);
124114
}

src/main/java/ru/mystamps/web/feature/series/importing/extractor/AddParserParameterDbDto.java

-29
This file was deleted.

src/main/java/ru/mystamps/web/feature/series/importing/extractor/JdbcSiteParserDao.java

-47
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,13 @@
1818
package ru.mystamps.web.feature.series.importing.extractor;
1919

2020
import java.util.Collections;
21-
import java.util.HashMap;
2221
import java.util.List;
2322
import java.util.Map;
2423

25-
import org.apache.commons.lang3.Validate;
26-
2724
import org.springframework.beans.factory.annotation.Value;
2825
import org.springframework.dao.EmptyResultDataAccessException;
2926
import org.springframework.jdbc.core.ResultSetExtractor;
30-
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
3127
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
32-
import org.springframework.jdbc.support.GeneratedKeyHolder;
33-
import org.springframework.jdbc.support.KeyHolder;
3428

3529
import lombok.RequiredArgsConstructor;
3630

@@ -42,12 +36,6 @@ public class JdbcSiteParserDao implements SiteParserDao {
4236

4337
private final NamedParameterJdbcTemplate jdbcTemplate;
4438

45-
@Value("${site_parser.create}")
46-
private String addParserSql;
47-
48-
@Value("${site_parser_param.create}")
49-
private String addParserParameterSql;
50-
5139
@Value("${site_parser.find_like_matched_url}")
5240
private String findParserIdByMatchedUrlSql;
5341

@@ -58,41 +46,6 @@ public class JdbcSiteParserDao implements SiteParserDao {
5846
@Value("${site_parser_param.find_all_with_parser_name}")
5947
private String findParametersWithParserNameSql;
6048

61-
@Override
62-
public Integer addParser(String name) {
63-
KeyHolder holder = new GeneratedKeyHolder();
64-
65-
int affected = jdbcTemplate.update(
66-
addParserSql,
67-
new MapSqlParameterSource("name", name),
68-
holder
69-
);
70-
71-
Validate.validState(
72-
affected == 1,
73-
"Unexpected number of affected rows after creation of site parser: %d",
74-
affected
75-
);
76-
77-
return holder.getKey().intValue();
78-
}
79-
80-
@Override
81-
public void addParserParameter(AddParserParameterDbDto param) {
82-
Map<String, Object> params = new HashMap<>();
83-
params.put("parser_id", param.getParserId());
84-
params.put("name", param.getName());
85-
params.put("value", param.getValue());
86-
87-
int affected = jdbcTemplate.update(addParserParameterSql, params);
88-
89-
Validate.validState(
90-
affected == 1,
91-
"Unexpected number of affected rows after adding parser parameter: %d",
92-
affected
93-
);
94-
}
95-
9649
@Override
9750
public Integer findParserIdForUrl(String url) {
9851
try {

src/main/java/ru/mystamps/web/feature/series/importing/extractor/JsoupSiteParser.java

-15
Original file line numberDiff line numberDiff line change
@@ -80,21 +80,6 @@ public JsoupSiteParser(SiteParserConfiguration cfg) {
8080
currencyValue = cfg.getCurrencyValue();
8181
}
8282

83-
// TODO: remove because it's only needed for migrating configuration from file to database
84-
public SiteParserConfiguration toConfiguration() {
85-
SiteParserConfiguration cfg = new SiteParserConfiguration(name, matchedUrl);
86-
cfg.setCategoryLocator(categoryLocator);
87-
cfg.setCountryLocator(countryLocator);
88-
cfg.setShortDescriptionLocator(shortDescriptionLocator);
89-
cfg.setImageUrlLocator(imageUrlLocator);
90-
cfg.setImageUrlAttribute(imageUrlAttribute);
91-
cfg.setIssueDateLocator(issueDateLocator);
92-
cfg.setSellerLocator(sellerLocator);
93-
cfg.setPriceLocator(priceLocator);
94-
cfg.setCurrencyValue(currencyValue);
95-
return cfg;
96-
}
97-
9883
@Override
9984
public boolean setField(String name, String value) {
10085
Validate.validState(StringUtils.isNotBlank(name), "Field name must be non-blank");

src/main/java/ru/mystamps/web/feature/series/importing/extractor/SiteParserConfiguration.java

-23
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package ru.mystamps.web.feature.series.importing.extractor;
1919

20-
import java.util.HashMap;
2120
import java.util.Map;
2221

2322
import lombok.EqualsAndHashCode;
@@ -62,26 +61,4 @@ public class SiteParserConfiguration {
6261
currencyValue = params.get("currency-value");
6362
}
6463

65-
/* default */ Map<String, String> toMap() {
66-
Map<String, String> map = new HashMap<>();
67-
addIfNotNull(map, "name", name);
68-
addIfNotNull(map, "matched-url", matchedUrl);
69-
addIfNotNull(map, "category-locator", categoryLocator);
70-
addIfNotNull(map, "country-locator", countryLocator);
71-
addIfNotNull(map, "short-description-locator", shortDescriptionLocator);
72-
addIfNotNull(map, "image-url-locator", imageUrlLocator);
73-
addIfNotNull(map, "image-url-attribute", imageUrlAttribute);
74-
addIfNotNull(map, "issue-date-locator", issueDateLocator);
75-
addIfNotNull(map, "seller-locator", sellerLocator);
76-
addIfNotNull(map, "price-locator", priceLocator);
77-
addIfNotNull(map, "currency-value", currencyValue);
78-
return map;
79-
}
80-
81-
private static void addIfNotNull(Map<String, String> map, String name, String value) {
82-
if (value != null) {
83-
map.put(name, value);
84-
}
85-
}
86-
8764
}

src/main/java/ru/mystamps/web/feature/series/importing/extractor/SiteParserDao.java

-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import java.util.List;
2121

2222
public interface SiteParserDao {
23-
Integer addParser(String name);
24-
void addParserParameter(AddParserParameterDbDto param);
2523
Integer findParserIdForUrl(String url);
2624
List<String> findParserNames();
2725
SiteParserConfiguration findConfigurationForParser(Integer parserId);

src/main/java/ru/mystamps/web/feature/series/importing/extractor/SiteParserService.java

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.List;
2121

2222
public interface SiteParserService {
23-
void add(SiteParserConfiguration cfg);
2423
SiteParser findForUrl(String url);
2524
List<String> findParserNames();
2625
}

src/main/java/ru/mystamps/web/feature/series/importing/extractor/SiteParserServiceImpl.java

-27
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package ru.mystamps.web.feature.series.importing.extractor;
1919

2020
import java.util.List;
21-
import java.util.Map;
2221

2322
import org.apache.commons.lang3.Validate;
2423

@@ -34,32 +33,6 @@ public class SiteParserServiceImpl implements SiteParserService {
3433
private final Logger log;
3534
private final SiteParserDao siteParserDao;
3635

37-
// TODO: remove after finishing migration
38-
@Override
39-
@Transactional
40-
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
41-
public void add(SiteParserConfiguration cfg) {
42-
Validate.isTrue(cfg != null, "Site parser configuration must be non null");
43-
44-
Integer id = siteParserDao.addParser(cfg.getName());
45-
log.info("Site parser #{} ({}) has been created", id, cfg.getName());
46-
47-
for (Map.Entry<String, String> param : cfg.toMap().entrySet()) {
48-
String name = param.getKey();
49-
if ("name".equals(name)) {
50-
// "name" belongs to the parser itself and has been already saved above
51-
continue;
52-
}
53-
54-
String value = param.getValue();
55-
AddParserParameterDbDto paramDto = new AddParserParameterDbDto(id, name, value);
56-
57-
siteParserDao.addParserParameter(paramDto);
58-
59-
log.info("Site parser #{}: parameter '{}' has been added", id, name);
60-
}
61-
}
62-
6336
// @todo #975 SiteParserServiceImpl.findForUrl(): add unit tests
6437
@Override
6538
@Transactional(readOnly = true)

src/main/java/ru/mystamps/web/feature/series/importing/extractor/TimedSiteParser.java

-5
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ public class TimedSiteParser implements SiteParser {
3131
private final Logger log;
3232
private final SiteParser parser;
3333

34-
// TODO: remove after finishing migration of the site parsers
35-
public SiteParser getOrigin() {
36-
return parser;
37-
}
38-
3934
@Override
4035
public boolean setField(String name, String value) {
4136
return parser.setField(name, value);

src/main/resources/sql/site_parser_dao_queries.properties

-18
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,3 @@
1-
site_parser.create = \
2-
INSERT \
3-
INTO site_parsers(name) \
4-
VALUES (:name)
5-
6-
site_parser_param.create = \
7-
INSERT \
8-
INTO site_parser_params \
9-
( parser_id \
10-
, name \
11-
, value \
12-
) \
13-
VALUES \
14-
( :parser_id \
15-
, :name \
16-
, :value \
17-
)
18-
191
site_parser.find_like_matched_url = \
202
SELECT parser_id AS id \
213
FROM site_parser_params \

0 commit comments

Comments
 (0)