1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.cartography.modules.solr.provider;
35
36 import java.util.ArrayList;
37 import java.util.Collection;
38 import java.util.HashMap;
39 import java.util.List;
40 import java.util.Map;
41 import java.util.Map.Entry;
42
43 import javax.servlet.http.HttpServletRequest;
44
45 import org.apache.solr.client.solrj.response.FacetField;
46
47 import fr.paris.lutece.plugins.carto.provider.IMarkerProvider;
48 import fr.paris.lutece.plugins.carto.provider.InfoMarker;
49 import fr.paris.lutece.plugins.cartography.modules.solr.service.CartographyService;
50 import fr.paris.lutece.plugins.search.solr.business.SolrFacetedResult;
51 import fr.paris.lutece.plugins.search.solr.business.SolrSearchEngine;
52 import fr.paris.lutece.plugins.search.solr.business.SolrSearchResult;
53 import fr.paris.lutece.plugins.search.solr.business.field.Field;
54 import fr.paris.lutece.plugins.search.solr.business.field.SolrFieldManager;
55 import fr.paris.lutece.plugins.search.solr.indexer.SolrItem;
56 import fr.paris.lutece.plugins.search.solr.service.SolrSearchAppConfService;
57 import fr.paris.lutece.portal.service.search.SearchResult;
58
59 public class CartoSolrMarkerProvider implements IMarkerProvider
60 {
61
62 @Override
63 public String getId( )
64 {
65
66 return "1";
67 }
68
69 @Override
70 public String getTitleI18nKey( )
71 {
72
73 return "Signets SOLR";
74 }
75
76 @Override
77 public Collection<InfoMarker> provideMarkerDescriptions( String solrTag, HttpServletRequest request )
78 {
79
80 List<InfoMarker> listMarkers = new ArrayList<>( );
81
82 SolrSearchEngine engine = SolrSearchEngine.getInstance( );
83
84 List<SearchResult> searchResults = engine.getSearchResults( CartographyService.PARAMETER_SOLR_GEOJSON + ":" + solrTag, request );
85
86
87 SolrFacetedResult facetedResult = engine.getFacetedSearchResults( CartographyService.PARAMETER_SOLR_GEOJSON + ":" + solrTag, new String [ ] {
88 CartographyService.PARAMETER_SOLR_GEOJSON
89 }, "uid", "asc", 10, 1, 100, false );
90 List<SolrSearchResult> listResults = facetedResult.getSolrSearchResults( );
91 List<FacetField> lstfield = facetedResult.getFacetFields( );
92
93
94 for ( FacetField facet : lstfield )
95 {
96 InfoMarker notifyGruMarkerEntry = new InfoMarker( facet.getName( ) );
97 notifyGruMarkerEntry.setDescription( facet.getName( ) );
98 listMarkers.add( notifyGruMarkerEntry );
99 }
100
101 for ( SolrSearchResult result : listResults )
102 {
103 result.getDynamicFields( );
104
105 Map<String, Object> dynamicFields = result.getDynamicFields( );
106
107 for ( Entry<String, Object> entry : dynamicFields.entrySet( ) )
108 {
109 if ( entry.getKey( ).endsWith( SolrItem.DYNAMIC_TEXT_FIELD_SUFFIX ) )
110 {
111
112 boolean isMarkerPresent = false;
113 for ( InfoMarker marker : listMarkers )
114 {
115 if ( marker.getDescription( ).equals( entry.getKey( ) ) )
116 isMarkerPresent = true;
117 }
118 if ( !isMarkerPresent )
119 {
120 InfoMarker markerEntry = new InfoMarker( entry.getKey( ) );
121 markerEntry.setDescription( entry.getKey( ) );
122 listMarkers.add( markerEntry );
123 }
124 }
125
126 }
127 }
128
129 return listMarkers;
130 }
131
132 @Override
133 public Collection<InfoMarker> provideMarkerValues( String solrTag, String uid )
134 {
135 List<InfoMarker> listMarkers = new ArrayList<>( );
136
137 SolrSearchEngine engine = SolrSearchEngine.getInstance( );
138
139 SolrFacetedResult facetedResult = engine.getFacetedSearchResults( CartographyService.PARAMETER_SOLR_GEOJSON + ":" + solrTag + "+AND+uid:" + uid,
140 new String [ ] {
141 SolrSearchAppConfService.loadConfiguration( null ).getFieldList( )
142 }, null, "uid", "asc", 100, 1, 100, false );
143 List<SolrSearchResult> listResults = facetedResult.getSolrSearchResults( );
144 List<FacetField> lstfield = facetedResult.getFacetFields( );
145
146 Map<String, Field> mapFields = SolrFieldManager.getFacetList( );
147 mapFields.get( "uid" );
148
149 for ( FacetField facet : lstfield )
150 {
151 InfoMarker notifyGruMarkerEntry = new InfoMarker( facet.getName( ) );
152 notifyGruMarkerEntry.setValue( facet.getValues( ).get( 0 ).getName( ) );
153 listMarkers.add( notifyGruMarkerEntry );
154 }
155
156 return listMarkers;
157 }
158
159 @Override
160 public Map<String, String> valueMarker( String marker, String solrTag, String uid )
161 {
162 Map<String, String> mapFacet = new HashMap<>( );
163
164 List<InfoMarker> listMarkers = new ArrayList<>( );
165
166 SolrSearchEngine engine = SolrSearchEngine.getInstance( );
167
168 SolrFacetedResult facetedResult = engine.getFacetedSearchResults( "uid:" + uid, new String [ ] {
169 SolrSearchAppConfService.loadConfiguration( null ).getFieldList( )
170 }, null, "uid", "asc", 100, 1, 100, false );
171 List<SolrSearchResult> listResults = facetedResult.getSolrSearchResults( );
172 List<FacetField> lstfield = facetedResult.getFacetFields( );
173
174 Map<String, Field> mapFields = SolrFieldManager.getFacetList( );
175 mapFields.get( "uid" );
176
177 for ( SolrSearchResult result : listResults )
178 {
179 result.getTitle( );
180
181 Map<String, Object> dynamicFields = result.getDynamicFields( );
182
183 for ( Entry<String, Object> entry : dynamicFields.entrySet( ) )
184 {
185
186 if ( entry.getKey( ).endsWith( SolrItem.DYNAMIC_TEXT_FIELD_SUFFIX ) )
187 {
188 mapFacet.put( entry.getKey( ), (String) entry.getValue( ) );
189 }
190 }
191
192 }
193
194 return mapFacet;
195 }
196
197 }