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.googleapi.service;
35
36 import fr.paris.lutece.plugins.googleapi.business.FeedProvider;
37 import fr.paris.lutece.plugins.googleapi.business.Item;
38 import fr.paris.lutece.portal.service.spring.SpringContextService;
39 import fr.paris.lutece.portal.service.util.AppLogService;
40 import fr.paris.lutece.portal.service.util.AppPropertiesService;
41 import fr.paris.lutece.util.ReferenceList;
42 import fr.paris.lutece.util.url.UrlItem;
43
44 import org.xml.sax.SAXException;
45
46 import java.io.IOException;
47 import java.io.InputStream;
48
49 import java.net.HttpURLConnection;
50 import java.net.URL;
51 import java.net.URLEncoder;
52
53 import java.util.HashMap;
54 import java.util.List;
55 import java.util.Map;
56
57 import javax.xml.parsers.ParserConfigurationException;
58 import javax.xml.parsers.SAXParser;
59 import javax.xml.parsers.SAXParserFactory;
60
61
62
63
64
65 public class FeedsService
66 {
67 private static final String PLUGIN_NAME = "googleapi";
68 private static final String BEAN_FEEDS = "googleapi.feeds";
69 private static final String PROPERTY_API_KEY = "googleapi.api.key";
70 private static Map<String, FeedProvider> _mapProviders = new HashMap<String, FeedProvider>( );
71 private static FeedsService _singleton;
72
73
74 private FeedsService( )
75 {
76 }
77
78
79
80
81
82 public static FeedsService getInstance( )
83 {
84 if ( _singleton == null )
85 {
86 _singleton = (FeedsService) SpringContextService.getPluginBean( PLUGIN_NAME, BEAN_FEEDS );
87 }
88
89 return _singleton;
90 }
91
92
93
94
95
96 public void setFeedsMap( Map<String, FeedProvider> map )
97 {
98 _mapProviders = map;
99 }
100
101
102
103
104
105
106 public FeedProvider getProvider( String strKey )
107 {
108 return _mapProviders.get( strKey );
109 }
110
111
112
113
114
115 public ReferenceList getProviders( )
116 {
117 ReferenceList listProviders = new ReferenceList( );
118
119 for ( FeedProvider fp : _mapProviders.values( ) )
120 {
121 listProviders.addItem( fp.getKey( ), fp.getName( ) );
122 }
123
124 return listProviders;
125 }
126
127
128
129
130
131 public ReferenceList getProviders( Class classProvider )
132 {
133 ReferenceList listProviders = new ReferenceList( );
134
135 for ( FeedProvider fp : _mapProviders.values( ) )
136 {
137 if ( classProvider.isInstance( fp ) )
138 {
139 listProviders.addItem( fp.getKey( ), fp.getName( ) );
140 }
141 }
142
143 return listProviders;
144 }
145
146
147
148
149
150
151
152
153
154
155
156 public void getItems( String strQuery, List<Item> listItems, FeedProvider provider )
157 throws IOException, SAXException, ParserConfigurationException
158 {
159
160
161
162
163 String strApiKey = AppPropertiesService.getProperty( PROPERTY_API_KEY );
164
165 UrlItem url = new UrlItem( provider.getFeedsUrl( ) );
166 url.addParameter( provider.getQueryParameter( ), URLEncoder.encode( strQuery, "UTF-8" ) );
167
168 if ( ( strApiKey != null ) && ( !strApiKey.equals( "" ) ) )
169 {
170 url.addParameter( "key", strApiKey );
171 }
172
173 URL urlFeed = new URL( url.getUrl( ) );
174 HttpURLConnection httpConnection = (HttpURLConnection) urlFeed.openConnection( );
175 InputStream inputStream = httpConnection.getInputStream( );
176
177 AppLogService.info( "Retrieving items URL : " + url.getUrl( ) );
178
179
180
181
182
183
184
185 SAXParserFactory factory = SAXParserFactory.newInstance( );
186 SAXParser parser = factory.newSAXParser( );
187 FeedHandler handler = provider.getFeedHandler( );
188 handler.setItemList( listItems );
189 parser.parse( inputStream, handler );
190 }
191 }