16
16
17
17
import com .adobe .granite .ui .components .ds .ValueMapResource ;
18
18
import com .exadel .etoolbox .linkinspector .core .models .ui .GridViewItem ;
19
- import com .exadel .etoolbox .linkinspector .core .services .cache .GridResourcesCache ;
20
19
import com .exadel .etoolbox .linkinspector .core .services .data .DataFeedService ;
21
20
import com .exadel .etoolbox .linkinspector .core .services .data .GridResourcesGenerator ;
22
21
import com .exadel .etoolbox .linkinspector .core .services .data .models .DataFilter ;
48
47
import java .io .IOException ;
49
48
import java .nio .charset .StandardCharsets ;
50
49
import java .util .*;
50
+ import java .util .concurrent .CopyOnWriteArrayList ;
51
51
import java .util .concurrent .TimeUnit ;
52
52
import java .util .stream .Collectors ;
53
53
import java .util .stream .Stream ;
60
60
public class DataFeedServiceImpl implements DataFeedService {
61
61
private static final Logger LOG = LoggerFactory .getLogger (DataFeedServiceImpl .class );
62
62
63
+ private final CopyOnWriteArrayList <GridResource > GRID_RESOURCE = new CopyOnWriteArrayList <>();
64
+
63
65
@ Reference
64
66
private RepositoryHelper repositoryHelper ;
65
67
@@ -69,9 +71,6 @@ public class DataFeedServiceImpl implements DataFeedService {
69
71
@ Reference
70
72
private LinkHelper linkHelper ;
71
73
72
- @ Reference
73
- private GridResourcesCache gridResourcesCache ;
74
-
75
74
/**
76
75
* The sling resource type of grid row items
77
76
*/
@@ -115,7 +114,7 @@ public void generateDataFeed() {
115
114
}
116
115
Optional .ofNullable (gridResourcesGenerator .generateGridResources (GRID_RESOURCE_TYPE , resourceResolver ))
117
116
.ifPresent (gridResources -> {
118
- gridResourcesCache . setGridResourcesList (gridResources );
117
+ setGridResourcesList (gridResources );
119
118
gridResourcesToDataFeed (gridResources , resourceResolver );
120
119
generateCsvReport (gridResources , resourceResolver );
121
120
});
@@ -134,11 +133,11 @@ public List<Resource> dataFeedToResources(DataFilter filter) {
134
133
LOG .warn ("ResourceResolver is null, data feed to resources conversion is stopped" );
135
134
return Collections .emptyList ();
136
135
}
137
- if (CollectionUtils .isEmpty (gridResourcesCache . getGridResourcesList ())) {
138
- gridResourcesCache . setGridResourcesList (dataFeedToGridResources (serviceResourceResolver ));
136
+ if (CollectionUtils .isEmpty (getGridResourcesList ())) {
137
+ setGridResourcesList (dataFeedToGridResources (serviceResourceResolver ));
139
138
}
140
139
List <Resource > resources = toSlingResourcesStream (
141
- doFiltering (gridResourcesCache . getGridResourcesList (), filter ),
140
+ doFiltering (getGridResourcesList (), filter ),
142
141
repositoryHelper .getThreadResourceResolver ())
143
142
.collect (Collectors .toList ());
144
143
LOG .info ("EToolbox Link Inspector - the number of items shown is {}" , resources .size ());
@@ -162,7 +161,7 @@ public List<GridResource> dataFeedToGridResources() {
162
161
163
162
@ Override
164
163
public void modifyDataFeed (Map <String , String > valuesMap ) {
165
- List <GridResource > gridResources = gridResourcesCache . getGridResourcesList ();
164
+ List <GridResource > gridResources = getGridResourcesList ();
166
165
try (ResourceResolver serviceResourceResolver = repositoryHelper .getServiceResourceResolver ()) {
167
166
for (GridResource gridResource : gridResources ) {
168
167
String propertyAddress = gridResource .getResourcePath () +"@" + gridResource .getPropertyName ();
@@ -178,7 +177,7 @@ public void modifyDataFeed(Map<String, String> valuesMap) {
178
177
gridResource .setLink (link );
179
178
});
180
179
}
181
- gridResourcesCache . setGridResourcesList (gridResources );
180
+ setGridResourcesList (gridResources );
182
181
gridResourcesToDataFeed (gridResources , serviceResourceResolver );
183
182
}
184
183
}
@@ -189,14 +188,29 @@ public void deleteDataFeed() throws DataFeedException {
189
188
removePreviousDataFeed (serviceResourceResolver );
190
189
removeCsvReport (serviceResourceResolver );
191
190
removePendingNode (serviceResourceResolver );
192
- gridResourcesCache . clearCache ();
191
+ clearStaticDataFeed ();
193
192
serviceResourceResolver .commit ();
194
193
} catch (PersistenceException e ) {
195
194
LOG .error ("Failed to delete data feed" , e );
196
195
throw new DataFeedException ("Exception Deleting Data Feed" );
197
196
}
198
197
}
199
198
199
+ private List <GridResource > getGridResourcesList () {
200
+ return GRID_RESOURCE ;
201
+ }
202
+
203
+ private void setGridResourcesList (List <GridResource > gridResources ) {
204
+ synchronized (this ) {
205
+ GRID_RESOURCE .clear ();
206
+ GRID_RESOURCE .addAll (gridResources );
207
+ }
208
+ }
209
+
210
+ private void clearStaticDataFeed () {
211
+ GRID_RESOURCE .clear ();
212
+ }
213
+
200
214
private List <GridResource > dataFeedToGridResources (ResourceResolver resourceResolver ) {
201
215
List <GridResource > gridResources = new ArrayList <>();
202
216
JSONArray jsonArray = JsonUtil .getJsonArrayFromFile (JSON_FEED_PATH , resourceResolver );
0 commit comments