Changeset 5231


Ignore:
Timestamp:
05/19/14 12:40:49 (10 years ago)
Author:
Twan Goosen
Message:

Modularised spring configuration

Location:
vlo/trunk/vlo-web-app/src
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSpringConfig.java

    r5093 r5231  
    1717package eu.clarin.cmdi.vlo.config;
    1818
    19 import com.google.common.collect.ImmutableList;
    20 import com.google.common.collect.Sets;
    21 import eu.clarin.cmdi.vlo.FacetConstants;
    22 import eu.clarin.cmdi.vlo.VloWicketApplication;
    23 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    24 import eu.clarin.cmdi.vlo.pojo.SearchContext;
    25 import eu.clarin.cmdi.vlo.service.FieldFilter;
    26 import eu.clarin.cmdi.vlo.service.handle.HandleClient;
    27 import eu.clarin.cmdi.vlo.service.PageParametersConverter;
    28 import eu.clarin.cmdi.vlo.service.ResourceStringConverter;
    29 import eu.clarin.cmdi.vlo.service.ResourceTypeCountingService;
    30 import eu.clarin.cmdi.vlo.service.UriResolver;
    31 import eu.clarin.cmdi.vlo.service.XmlTransformationService;
    32 import eu.clarin.cmdi.vlo.service.impl.ExclusiveFieldFilter;
    33 import eu.clarin.cmdi.vlo.service.handle.impl.HandleRestApiClient;
    34 import eu.clarin.cmdi.vlo.service.impl.DocumentParametersConverter;
    35 import eu.clarin.cmdi.vlo.service.impl.UriResolverImpl;
    36 import eu.clarin.cmdi.vlo.service.impl.InclusiveFieldFilter;
    37 import eu.clarin.cmdi.vlo.service.impl.ResourceStringConverterImpl;
    38 import eu.clarin.cmdi.vlo.service.impl.ResourceTypeCountingServiceImpl;
    39 import eu.clarin.cmdi.vlo.service.impl.XmlTransformationServiceImpl;
    40 import eu.clarin.cmdi.vlo.service.solr.AutoCompleteService;
    41 import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    42 import eu.clarin.cmdi.vlo.service.solr.SearchResultsDao;
    43 import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService;
    44 import eu.clarin.cmdi.vlo.service.solr.SolrFacetQueryFactory;
    45 import eu.clarin.cmdi.vlo.service.solr.impl.AutoCompleteServiceImpl;
    46 import eu.clarin.cmdi.vlo.service.impl.QueryFacetsSelectionParametersConverter;
    47 import eu.clarin.cmdi.vlo.service.impl.SearchContextParametersConverter;
    48 import eu.clarin.cmdi.vlo.service.solr.impl.SearchResultsDaoImpl;
    49 import eu.clarin.cmdi.vlo.service.solr.impl.SolrDocumentQueryFactoryImpl;
    50 import eu.clarin.cmdi.vlo.service.solr.impl.SolrDocumentServiceImpl;
    51 import eu.clarin.cmdi.vlo.service.solr.impl.SolrFacetFieldsService;
    52 import eu.clarin.cmdi.vlo.service.solr.impl.SolrFacetQueryFactoryImpl;
    53 import java.io.IOException;
    54 import java.util.List;
    55 import java.util.Properties;
    56 import javax.xml.transform.OutputKeys;
    57 import javax.xml.transform.Source;
    58 import javax.xml.transform.TransformerConfigurationException;
    59 import javax.xml.transform.stream.StreamSource;
    60 import org.apache.solr.client.solrj.SolrServer;
    61 import org.apache.solr.client.solrj.impl.HttpSolrServer;
    62 import org.apache.solr.common.SolrDocument;
    63 import org.springframework.context.annotation.Bean;
    6419import org.springframework.context.annotation.Configuration;
     20import org.springframework.context.annotation.Import;
    6521
    6622/**
    67  * Annotation based Spring configuration for the VLO web application.
     23 * Annotation based Spring configuration for the VLO web application. Note: this
     24 * class imports a number of configuration modules.
    6825 *
    69  * Note: this works because
     26 * Note: All of this works because
    7027 * {@link org.apache.wicket.spring.SpringWebApplicationFactory} is used in place
    7128 * of the standard Wicket application factory and annotation driven
     
    7532 */
    7633@Configuration
     34@Import({VloApplicationSpringConfig.class, VloServicesSpringConfig.class, VloSolrSpringConfig.class})
    7735public class VloSpringConfig {
    78 
    79     /**
    80      *
    81      * @return the web application object that represents the Wicket application
    82      */
    83     @Bean
    84     public VloWicketApplication webApplication() {
    85         return new VloWicketApplication();
    86     }
    87 
    88     @Bean
    89     public VloConfig vloConfig() {
    90         try {
    91             return vloConfigFactory().newConfig();
    92         } catch (IOException ex) {
    93             throw new RuntimeException("Could not read VLO configuration", ex);
    94         }
    95     }
    96 
    97     @Bean
    98     public VloConfigFactory vloConfigFactory() {
    99         return new ServletVloConfigFactory();
    100     }
    101 
    102     @Bean
    103     public FacetFieldsService facetFieldsService() {
    104         return new SolrFacetFieldsService(searchResultsDao(), facetQueryFactory());
    105     }
    106 
    107     @Bean
    108     public SolrFacetQueryFactory facetQueryFactory() {
    109         return new SolrFacetQueryFactoryImpl();
    110     }
    111 
    112     @Bean
    113     public SolrDocumentService documentService() {
    114         return new SolrDocumentServiceImpl(searchResultsDao(), documentQueryFactory());
    115     }
    116 
    117     @Bean
    118     public SearchResultsDao searchResultsDao() {
    119         return new SearchResultsDaoImpl(solrServer(), vloConfig());
    120     }
    121 
    122     @Bean
    123     public SolrDocumentQueryFactoryImpl documentQueryFactory() {
    124         return new SolrDocumentQueryFactoryImpl(DOCUMENT_FIELDS);
    125     }
    126 
    127     @Bean
    128     public AutoCompleteService autoCompleteService() {
    129         return new AutoCompleteServiceImpl(solrServer(), vloConfig());
    130     }
    131 
    132     @Bean
    133     public ResourceTypeCountingService resourceTypeCountingService() {
    134         return new ResourceTypeCountingServiceImpl(resourceStringConverter());
    135     }
    136 
    137     @Bean(name = "resourceStringConverter")
    138     public ResourceStringConverter resourceStringConverter() {
    139         return new ResourceStringConverterImpl();
    140     }
    141 
    142     @Bean(name = "resolvingResourceStringConverter")
    143     public ResourceStringConverter resolvingResourceStringConverter() {
    144         return new ResourceStringConverterImpl(uriResolver());
    145     }
    146 
    147     @Bean
    148     public UriResolver uriResolver() {
    149         return new UriResolverImpl(handleClient());
    150     }
    151 
    152     public HandleClient handleClient() {
    153         return new HandleRestApiClient();
    154     }
    155 
    156     @Bean(name = "queryParametersConverter")
    157     public PageParametersConverter<QueryFacetsSelection> queryParametersConverter() {
    158         return new QueryFacetsSelectionParametersConverter();
    159     }
    160 
    161     @Bean(name = "documentParamsConverter")
    162     public PageParametersConverter<SolrDocument> documentParamsConverter() {
    163         return new DocumentParametersConverter();
    164     }
    165 
    166     @Bean(name = "searchContextParamsConverter")
    167     public PageParametersConverter<SearchContext> searchContextParamsConverter() {
    168         return new SearchContextParametersConverter(queryParametersConverter());
    169     }
    170 
    171     @Bean
    172     public SolrServer solrServer() {
    173         return new HttpSolrServer(vloConfig().getSolrUrl());
    174     }
    175 
    176     @Bean
    177     public XmlTransformationService cmdiTransformationService() throws TransformerConfigurationException {
    178         final Source xsltSource = new StreamSource(getClass().getResourceAsStream("/cmdi2xhtml.xsl"));
    179         //TODO: Read properties from file??
    180         final Properties transformationProperties = new Properties();
    181         transformationProperties.setProperty(OutputKeys.METHOD, "html");
    182         transformationProperties.setProperty(OutputKeys.INDENT, "yes");
    183         transformationProperties.setProperty(OutputKeys.ENCODING, "UTF-8");
    184         return new XmlTransformationServiceImpl(xsltSource, transformationProperties);
    185     }
    186 
    187     @Bean(name = "basicPropertiesFilter")
    188     public FieldFilter basicPropertiesFieldFilter() {
    189         return new ExclusiveFieldFilter(Sets.union(
    190                 vloConfig().getIgnoredFields(),
    191                 vloConfig().getTechnicalFields()));
    192     }
    193 
    194     @Bean(name = "searchResultPropertiesFilter")
    195     public FieldFilter searchResultPropertiesFilter() {
    196         return new InclusiveFieldFilter(vloConfig().getSearchResultFields());
    197     }
    198 
    199     @Bean(name = "technicalPropertiesFilter")
    200     public FieldFilter technicalPropertiesFieldFilter() {
    201         return new InclusiveFieldFilter(
    202                 vloConfig().getTechnicalFields());
    203     }
    204 
    205     @Bean(name = "documentFieldOrder")
    206     public List<String> documentFieldOrder() {
    207         return DOCUMENT_FIELDS;
    208     }
    209 
    210     /**
    211      * Fields to request for documents. TODO: Make configurable?
    212      *
    213      */
    214     public static final List<String> DOCUMENT_FIELDS = ImmutableList.of(
    215             FacetConstants.FIELD_NAME,
    216             FacetConstants.FIELD_DESCRIPTION,
    217             FacetConstants.FIELD_COLLECTION,
    218             FacetConstants.FIELD_LANGUAGES,
    219             FacetConstants.FIELD_MODALITY,
    220             FacetConstants.FIELD_CONTINENT,
    221             FacetConstants.FIELD_COUNTRY,
    222             FacetConstants.FIELD_GENRE,
    223             FacetConstants.FIELD_SUBJECT,
    224             FacetConstants.FIELD_ORGANISATION,
    225             FacetConstants.FIELD_KEYWORDS,
    226             FacetConstants.FIELD_NATIONAL_PROJECT,
    227             FacetConstants.FIELD_RESOURCE_CLASS,
    228             FacetConstants.FIELD_RESOURCE,
    229             FacetConstants.FIELD_SELF_LINK,
    230             FacetConstants.FIELD_ID,
    231             FacetConstants.FIELD_DATA_PROVIDER,
    232             FacetConstants.FIELD_FILENAME,
    233             FacetConstants.FIELD_FORMAT,
    234             FacetConstants.FIELD_LANDINGPAGE,
    235             FacetConstants.FIELD_SEARCHPAGE,
    236             FacetConstants.FIELD_SEARCH_SERVICE,
    237             FacetConstants.FIELD_LAST_SEEN,
    238             FacetConstants.FIELD_CLARIN_PROFILE,
    239             FacetConstants.FIELD_COMPLETE_METADATA
    240     );
    24136}
  • vlo/trunk/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestFacetedSearchPage.java

    r5227 r5231  
    11package eu.clarin.cmdi.vlo.wicket.pages;
    22
     3import eu.clarin.cmdi.vlo.VloApplicationTestConfig;
    34import eu.clarin.cmdi.vlo.VloWicketApplication;
    4 import eu.clarin.cmdi.vlo.config.DefaultVloConfigFactory;
    5 import eu.clarin.cmdi.vlo.config.VloConfigFactory;
    6 import eu.clarin.cmdi.vlo.config.VloSpringConfig;
     5import eu.clarin.cmdi.vlo.config.VloServicesSpringConfig;
     6import eu.clarin.cmdi.vlo.config.VloSolrSpringConfig;
    77import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    88import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
     
    2222import org.springframework.context.annotation.Bean;
    2323import org.springframework.context.annotation.Configuration;
     24import org.springframework.context.annotation.Import;
    2425import org.springframework.test.context.ContextConfiguration;
    2526import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     
    3435public class TestFacetedSearchPage {
    3536
    36     @Configuration
    37     static class ContextConfiguration extends VloSpringConfig {
    38 
    39         @Bean
    40         public Mockery mockery() {
    41             return new JUnit4Mockery();
    42         }
    43 
    44         @Override
    45         public FacetFieldsService facetFieldsService() {
    46             return mockery().mock(FacetFieldsService.class, "facetFieldsService");
    47         }
    48 
    49         @Override
    50         public SolrDocumentService documentService() {
    51             return mockery().mock(SolrDocumentService.class);
    52         }
    53 
    54         @Override
    55         public VloConfigFactory vloConfigFactory() {
    56             //TODO: Separate test config? -> override vloConfig() instead
    57             return new DefaultVloConfigFactory();
    58         }
    59 
    60     }
    61 
    62     private WicketTester tester;
    6337    @Inject
    6438    private VloWicketApplication application;
    6539    @Inject
    6640    private Mockery mockery;
    67 
    6841    @Inject
    6942    private FacetFieldsService facetFieldsService;
    70 
    7143    @Inject
    7244    private SolrDocumentService documentService;
     45
     46    private WicketTester tester;
    7347
    7448    @Before
     
    10276        tester.assertRenderedPage(FacetedSearchPage.class);
    10377    }
     78
     79    /**
     80     * Custom configuration injected into web app for testing
     81     */
     82    @Configuration
     83    @Import({
     84        VloSolrTestConfig.class,
     85        VloApplicationTestConfig.class,
     86        VloServicesSpringConfig.class})
     87    static class ContextConfiguration {
     88
     89        @Bean
     90        public Mockery mockery() {
     91            // shared mockery context
     92            return new JUnit4Mockery();
     93        }
     94    }
     95
     96    /**
     97     * Provides some mock Solr services
     98     */
     99    @Configuration
     100    static class VloSolrTestConfig extends VloSolrSpringConfig {
     101
     102        @Inject
     103        private Mockery mockery;
     104
     105        @Override
     106        public SolrDocumentService documentService() {
     107            return mockery.mock(SolrDocumentService.class);
     108        }
     109
     110        @Override
     111        public FacetFieldsService facetFieldsService() {
     112            return mockery.mock(FacetFieldsService.class, "facetFieldsService");
     113        }
     114    }
    104115}
  • vlo/trunk/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestRecordPage.java

    r5227 r5231  
    22
    33import eu.clarin.cmdi.vlo.FacetConstants;
     4import eu.clarin.cmdi.vlo.VloApplicationTestConfig;
    45import eu.clarin.cmdi.vlo.VloWebAppParameters;
    56import eu.clarin.cmdi.vlo.VloWicketApplication;
    6 import eu.clarin.cmdi.vlo.config.DefaultVloConfigFactory;
    7 import eu.clarin.cmdi.vlo.config.VloConfigFactory;
    8 import eu.clarin.cmdi.vlo.config.VloSpringConfig;
     7import eu.clarin.cmdi.vlo.config.VloServicesSpringConfig;
     8import eu.clarin.cmdi.vlo.config.VloSolrSpringConfig;
    99import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService;
    1010import javax.inject.Inject;
     
    2121import org.springframework.context.annotation.Bean;
    2222import org.springframework.context.annotation.Configuration;
     23import org.springframework.context.annotation.Import;
    2324import org.springframework.test.annotation.DirtiesContext;
    2425import org.springframework.test.annotation.DirtiesContext.ClassMode;
     
    3637public class TestRecordPage {
    3738
    38     @Configuration
    39     static class ContextConfiguration extends VloSpringConfig {
    40 
    41         @Bean
    42         public Mockery mockery() {
    43             return new JUnit4Mockery();
    44         }
    45 
    46         @Override
    47         public SolrDocumentService documentService() {
    48             return mockery().mock(SolrDocumentService.class);
    49         }
    50 
    51         @Override
    52         public VloConfigFactory vloConfigFactory() {
    53             //TODO: Separate test config? -> override vloConfig() instead
    54             return new DefaultVloConfigFactory();
    55         }
    56 
    57     }
    58 
    59     private WicketTester tester;
    6039    @Inject
    6140    private VloWicketApplication application;
     
    6544    private SolrDocumentService documentService;
    6645
     46    private WicketTester tester;
    6747    private SolrDocument document;
    6848    private PageParameters params;
     
    11898
    11999    //TODO: Add test for display of resources
     100    /**
     101     * Custom configuration injected into web app for testing
     102     */
     103    @Configuration
     104    @Import({
     105        VloSolrSpringTestConfig.class,
     106        VloApplicationTestConfig.class,
     107        VloServicesSpringConfig.class})
     108    static class ContextConfiguration {
     109
     110        @Bean
     111        public Mockery mockery() {
     112            return new JUnit4Mockery();
     113        }
     114    }
     115
     116    /**
     117     * Provides some mock Solr services
     118     */
     119    @Configuration
     120    static class VloSolrSpringTestConfig extends VloSolrSpringConfig {
     121
     122        @Inject
     123        private Mockery mockery;
     124
     125        @Override
     126        public SolrDocumentService documentService() {
     127            return mockery.mock(SolrDocumentService.class);
     128        }
     129    }
     130
    120131}
  • vlo/trunk/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/panels/ContentSearchFormPanelTest.java

    r5227 r5231  
    2020import eu.clarin.cmdi.vlo.VloWicketApplication;
    2121import eu.clarin.cmdi.vlo.config.DefaultVloConfigFactory;
     22import eu.clarin.cmdi.vlo.config.VloApplicationSpringConfig;
    2223import eu.clarin.cmdi.vlo.config.VloConfig;
    23 import eu.clarin.cmdi.vlo.config.VloSpringConfig;
     24import eu.clarin.cmdi.vlo.config.VloServicesSpringConfig;
     25import eu.clarin.cmdi.vlo.config.VloSolrSpringConfig;
    2426import java.io.IOException;
    2527import java.util.regex.Pattern;
     
    3234import org.junit.runner.RunWith;
    3335import org.springframework.context.annotation.Configuration;
     36import org.springframework.context.annotation.Import;
    3437import org.springframework.test.context.ContextConfiguration;
    3538import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     
    4548@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
    4649public class ContentSearchFormPanelTest {
    47 
    48     /**
    49      * custom configuration injected into web app for testing
    50      */
    51     @Configuration
    52     static class ContextConfiguration extends VloSpringConfig {
    53 
    54         @Override
    55         public VloConfig vloConfig() {
    56             try {
    57                 final VloConfig config = new DefaultVloConfigFactory().newConfig();
    58                 // this globally configured URL should be the action target of the form
    59                 config.setFederatedContentSearchUrl("http://fcs.org/aggregator");
    60                 return config;
    61             } catch (IOException ex) {
    62                 throw new RuntimeException(ex);
    63             }
    64         }
    65 
    66     }
    6750
    6851    @Inject
     
    8265        final ContentSearchFormPanel panel = new ContentSearchFormPanel("panel", Model.of(document), Model.of("http://cqlEndPoint/"));
    8366        tester.startComponentInPage(panel);
    84        
     67
    8568        // form action should be aggregator search page
    8669        tester.assertContains("action=\"http://fcs.org/aggregator\"");
     
    9073    }
    9174
     75    /**
     76     * Custom configuration injected into web app for testing
     77     */
     78    @Configuration
     79    @Import({
     80        VloApplicationTestConfig.class,
     81        VloSolrSpringConfig.class,
     82        VloServicesSpringConfig.class})
     83    static class ContextConfiguration {
     84    }
     85
     86    /**
     87     * Overrides returned application configuration
     88     */
     89    @Configuration
     90    static class VloApplicationTestConfig extends VloApplicationSpringConfig {
     91
     92        @Override
     93        public VloConfig vloConfig() {
     94            try {
     95                // override default config
     96                final VloConfig config = new DefaultVloConfigFactory().newConfig();
     97                // this globally configured URL should be the action target of the form
     98                config.setFederatedContentSearchUrl("http://fcs.org/aggregator");
     99                return config;
     100            } catch (IOException ex) {
     101                throw new RuntimeException(ex);
     102            }
     103        }
     104    }
     105
    92106}
Note: See TracChangeset for help on using the changeset viewer.