source: vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSpringConfig.java @ 4983

Last change on this file since 4983 was 4983, checked in by Twan Goosen, 10 years ago

package and class name refactoring in eu.clarin.cmdi.vlo.service

File size: 8.2 KB
Line 
1/*
2 * Copyright (C) 2014 CLARIN
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 3 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, see <http://www.gnu.org/licenses/>.
16 */
17package eu.clarin.cmdi.vlo.config;
18
19import com.google.common.collect.ImmutableList;
20import com.google.common.collect.Sets;
21import eu.clarin.cmdi.vlo.FacetConstants;
22import eu.clarin.cmdi.vlo.VloWicketApplication;
23import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
24import eu.clarin.cmdi.vlo.service.FieldFilter;
25import eu.clarin.cmdi.vlo.service.handle.HandleClient;
26import eu.clarin.cmdi.vlo.service.PageParametersConverter;
27import eu.clarin.cmdi.vlo.service.ResourceStringConverter;
28import eu.clarin.cmdi.vlo.service.ResourceTypeCountingService;
29import eu.clarin.cmdi.vlo.service.UriResolver;
30import eu.clarin.cmdi.vlo.service.XmlTransformationService;
31import eu.clarin.cmdi.vlo.service.impl.ExclusiveFieldFilter;
32import eu.clarin.cmdi.vlo.service.handle.impl.HandleRestApiClient;
33import eu.clarin.cmdi.vlo.service.impl.UriResolverImpl;
34import eu.clarin.cmdi.vlo.service.impl.InclusiveFieldFilter;
35import eu.clarin.cmdi.vlo.service.impl.ResourceStringConverterImpl;
36import eu.clarin.cmdi.vlo.service.impl.ResourceTypeCountingServiceImpl;
37import eu.clarin.cmdi.vlo.service.impl.XmlTransformationServiceImpl;
38import eu.clarin.cmdi.vlo.service.solr.AutoCompleteService;
39import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
40import eu.clarin.cmdi.vlo.service.solr.SearchResultsDao;
41import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService;
42import eu.clarin.cmdi.vlo.service.solr.SolrFacetQueryFactory;
43import eu.clarin.cmdi.vlo.service.solr.impl.AutoCompleteServiceImpl;
44import eu.clarin.cmdi.vlo.service.impl.QueryFacetsSelectionParametersConverter;
45import eu.clarin.cmdi.vlo.service.solr.impl.SearchResultsDaoImpl;
46import eu.clarin.cmdi.vlo.service.solr.impl.SolrDocumentQueryFactoryImpl;
47import eu.clarin.cmdi.vlo.service.solr.impl.SolrDocumentServiceImpl;
48import eu.clarin.cmdi.vlo.service.solr.impl.SolrFacetFieldsService;
49import eu.clarin.cmdi.vlo.service.solr.impl.SolrFacetQueryFactoryImpl;
50import java.io.IOException;
51import java.util.Collection;
52import java.util.Properties;
53import javax.xml.transform.OutputKeys;
54import javax.xml.transform.Source;
55import javax.xml.transform.TransformerConfigurationException;
56import javax.xml.transform.stream.StreamSource;
57import org.apache.solr.client.solrj.SolrServer;
58import org.apache.solr.client.solrj.impl.HttpSolrServer;
59import org.springframework.context.annotation.Bean;
60import org.springframework.context.annotation.Configuration;
61
62/**
63 * Annotation based Spring configuration for the VLO web application.
64 *
65 * Note: this works because
66 * {@link org.apache.wicket.spring.SpringWebApplicationFactory} is used in place
67 * of the standard Wicket application factory and annotation driven
68 * configuration is enabled in WEB-INF/applicationContext.xml
69 *
70 * @author twagoo
71 */
72@Configuration
73public class VloSpringConfig {
74
75    /**
76     *
77     * @return the web application object that represents the Wicket application
78     */
79    @Bean
80    public VloWicketApplication webApplication() {
81        return new VloWicketApplication();
82    }
83
84    @Bean
85    public VloConfig vloConfig() {
86        try {
87            return vloConfigFactory().newConfig();
88        } catch (IOException ex) {
89            throw new RuntimeException("Could not read VLO configuration", ex);
90        }
91    }
92
93    @Bean
94    public VloConfigFactory vloConfigFactory() {
95        return new ServletVloConfigFactory();
96    }
97
98    @Bean
99    public FacetFieldsService facetFieldsService() {
100        return new SolrFacetFieldsService(searchResultsDao(), facetQueryFactory());
101    }
102
103    @Bean
104    public SolrFacetQueryFactory facetQueryFactory() {
105        return new SolrFacetQueryFactoryImpl();
106    }
107
108    @Bean
109    public SolrDocumentService documentService() {
110        return new SolrDocumentServiceImpl(searchResultsDao(), documentQueryFactory());
111    }
112
113    @Bean
114    public SearchResultsDao searchResultsDao() {
115        return new SearchResultsDaoImpl(solrServer(), vloConfig());
116    }
117
118    @Bean
119    public SolrDocumentQueryFactoryImpl documentQueryFactory() {
120        return new SolrDocumentQueryFactoryImpl(DOCUMENT_FIELDS);
121    }
122
123    @Bean
124    public AutoCompleteService autoCompleteService() {
125        return new AutoCompleteServiceImpl(solrServer(), vloConfig());
126    }
127
128    @Bean
129    public ResourceTypeCountingService resourceTypeCountingService() {
130        return new ResourceTypeCountingServiceImpl(resourceStringConverter());
131    }
132
133    @Bean(name = "resourceStringConverter")
134    public ResourceStringConverter resourceStringConverter() {
135        return new ResourceStringConverterImpl();
136    }
137
138    @Bean(name = "resolvingResourceStringConverter")
139    public ResourceStringConverter resolvingResourceStringConverter() {
140        return new ResourceStringConverterImpl(uriResolver());
141    }
142
143    @Bean
144    public UriResolver uriResolver() {
145        return new UriResolverImpl(handleClient());
146    }
147
148    public HandleClient handleClient() {
149        return new HandleRestApiClient();
150    }
151
152    @Bean
153    public PageParametersConverter<QueryFacetsSelection> queryParametersConverter() {
154        return new QueryFacetsSelectionParametersConverter();
155    }
156
157    @Bean
158    public SolrServer solrServer() {
159        return new HttpSolrServer(vloConfig().getSolrUrl());
160    }
161
162    @Bean
163    public XmlTransformationService cmdiTransformationService() throws TransformerConfigurationException {
164        final Source xsltSource = new StreamSource(getClass().getResourceAsStream("/cmdi2xhtml.xsl"));
165        //TODO: Read properties from file??
166        final Properties transformationProperties = new Properties();
167        transformationProperties.setProperty(OutputKeys.METHOD, "html");
168        transformationProperties.setProperty(OutputKeys.INDENT, "yes");
169        transformationProperties.setProperty(OutputKeys.ENCODING, "UTF-8");
170        return new XmlTransformationServiceImpl(xsltSource, transformationProperties);
171    }
172
173    @Bean(name = "basicPropertiesFilter")
174    public FieldFilter basicPropertiesFieldFilter() {
175        return new ExclusiveFieldFilter(Sets.union(
176                vloConfig().getIgnoredFields(),
177                vloConfig().getTechnicalFields()));
178    }
179
180    @Bean(name = "searchResultPropertiesFilter")
181    public FieldFilter searchResultPropertiesFilter() {
182        return new InclusiveFieldFilter(vloConfig().getSearchResultFields());
183    }
184
185    @Bean(name = "technicalPropertiesFilter")
186    public FieldFilter technicalPropertiesFieldFilter() {
187        return new InclusiveFieldFilter(
188                vloConfig().getTechnicalFields());
189    }
190
191    /**
192     * Fields to request for documents. TODO: Make configurable?
193     */
194    public static final Collection<String> DOCUMENT_FIELDS = ImmutableList.of(
195            FacetConstants.FIELD_NAME,
196            FacetConstants.FIELD_DESCRIPTION,
197            FacetConstants.FIELD_COLLECTION,
198            FacetConstants.FIELD_LANGUAGE,
199            FacetConstants.FIELD_MODALITY,
200            FacetConstants.FIELD_CONTINENT,
201            FacetConstants.FIELD_COUNTRY,
202            FacetConstants.FIELD_GENRE,
203            FacetConstants.FIELD_SUBJECT,
204            FacetConstants.FIELD_ORGANISATION,
205            FacetConstants.FIELD_KEYWORDS,
206            FacetConstants.FIELD_NATIONAL_PROJECT,
207            FacetConstants.FIELD_RESOURCE_CLASS,
208            FacetConstants.FIELD_RESOURCE,
209            FacetConstants.FIELD_ID,
210            FacetConstants.FIELD_DATA_PROVIDER,
211            FacetConstants.FIELD_FILENAME,
212            FacetConstants.FIELD_FORMAT,
213            FacetConstants.FIELD_LANDINGPAGE,
214            FacetConstants.FIELD_SEARCHPAGE,
215            FacetConstants.FIELD_SEARCH_SERVICE,
216            FacetConstants.FIELD_LAST_SEEN,
217            FacetConstants.FIELD_CLARIN_PROFILE
218    );
219}
Note: See TracBrowser for help on using the repository browser.