11package  com .lazerycode .selenium ;
22
33import  com .lazerycode .selenium .download .DownloadHandler ;
4- import  com .lazerycode .selenium .repository .*;
4+ import  com .lazerycode .selenium .repository .DriverContext ;
5+ import  com .lazerycode .selenium .repository .DriverDetails ;
6+ import  com .lazerycode .selenium .repository .DriverMap ;
7+ import  static  com .lazerycode .selenium .repository .FileRepository .buildDownloadableFileRepository ;
8+ import  com .lazerycode .selenium .repository .OperatingSystem ;
9+ import  static  com .lazerycode .selenium .repository .OperatingSystem .getOperatingSystem ;
10+ import  com .lazerycode .selenium .repository .SystemArchitecture ;
11+ import  static  com .lazerycode .selenium .repository .SystemArchitecture .getCurrentSystemArcitecture ;
12+ import  com .lazerycode .selenium .repository .XMLParser ;
13+ import  java .io .File ;
14+ import  java .io .IOException ;
15+ import  java .io .InputStream ;
16+ import  java .net .URISyntaxException ;
17+ import  java .net .URL ;
18+ import  java .util .ArrayList ;
19+ import  java .util .HashMap ;
20+ import  java .util .HashSet ;
21+ import  java .util .Map ;
22+ import  java .util .Set ;
23+ import  javax .xml .XMLConstants ;
24+ import  javax .xml .bind .JAXBException ;
25+ import  javax .xml .transform .Source ;
26+ import  javax .xml .transform .stream .StreamSource ;
27+ import  javax .xml .validation .Schema ;
28+ import  javax .xml .validation .SchemaFactory ;
29+ import  javax .xml .validation .Validator ;
30+ import  javax .xml .xpath .XPathExpressionException ;
531import  org .apache .log4j .BasicConfigurator ;
632import  org .apache .log4j .Logger ;
733import  org .apache .maven .plugin .AbstractMojo ;
834import  org .apache .maven .plugin .MojoExecutionException ;
935import  org .apache .maven .plugin .MojoFailureException ;
10- import  org .apache .maven .plugins .annotations .Execute ;
36+ import  org .apache .maven .plugins .annotations .Component ;
1137import  org .apache .maven .plugins .annotations .LifecyclePhase ;
1238import  org .apache .maven .plugins .annotations .Mojo ;
1339import  org .apache .maven .plugins .annotations .Parameter ;
1440import  org .apache .maven .project .MavenProject ;
41+ import  org .codehaus .plexus .resource .ResourceManager ;
42+ import  org .codehaus .plexus .resource .loader .FileResourceCreationException ;
43+ import  org .codehaus .plexus .resource .loader .ResourceNotFoundException ;
1544import  org .xml .sax .SAXException ;
1645
17- import  javax .xml .XMLConstants ;
18- import  javax .xml .bind .JAXBException ;
19- import  javax .xml .transform .Source ;
20- import  javax .xml .transform .stream .StreamSource ;
21- import  javax .xml .validation .Schema ;
22- import  javax .xml .validation .SchemaFactory ;
23- import  javax .xml .validation .Validator ;
24- import  javax .xml .xpath .XPathExpressionException ;
25- import  java .io .File ;
26- import  java .io .IOException ;
27- import  java .io .InputStream ;
28- import  java .net .URISyntaxException ;
29- import  java .net .URL ;
30- import  java .util .*;
31- 
32- import  static  com .lazerycode .selenium .repository .FileRepository .buildDownloadableFileRepository ;
33- import  static  com .lazerycode .selenium .repository .OperatingSystem .getOperatingSystem ;
34- import  static  com .lazerycode .selenium .repository .SystemArchitecture .getCurrentSystemArcitecture ;
35- 
3646/** 
3747 * Selenium Standalone Server Maven Plugin 
3848 * 
@@ -57,11 +67,11 @@ public class SeleniumServerMojo extends AbstractMojo {
5767    protected  File  downloadedZipFileDirectory ;
5868
5969    /** 
60-      * <h3>Absolute path  to the XML RepositoryMap</h3> 
70+      * <h3>Path  to the XML RepositoryMap</h3> 
6171     * <p><xmlRepositoryMap>${project.basedir}/src/main/resources/RepositoryMap.xml</xmlRepositoryMap></p> 
6272     */ 
6373    @ Parameter 
64-     protected  File  customRepositoryMap ;
74+     protected  String  customRepositoryMap ;
6575
6676    /** 
6777     * <h3>Only get drivers that are compatible with the operating system running the plugin</h3> 
@@ -178,6 +188,9 @@ public class SeleniumServerMojo extends AbstractMojo {
178188    @ Parameter (defaultValue  = "${project}" , required  = true , readonly  = true )
179189    protected  MavenProject  project ;
180190
191+     @ Component 
192+     private  ResourceManager  locator ;
193+ 
181194    protected  InputStream  xmlRepositoryMap  = null ;
182195    private  static  final  Logger  LOG  = Logger .getLogger (SeleniumServerMojo .class );
183196
@@ -270,23 +283,31 @@ protected void setSystemProperties(DriverMap driverRepository) {
270283        }
271284    }
272285
286+     private  File  getRepositoryMapFile (String  customRepositoryMap ) {
287+         File  repositoryMap  = null ;
288+         try  {
289+             repositoryMap  = locator .getResourceAsFile (customRepositoryMap );
290+         } catch  (ResourceNotFoundException  e ) {
291+             LOG .info ("Unable to access the specified custom repository map, defaulting to bundled version...\n " );
292+         } catch  (FileResourceCreationException  e ) {
293+         }
294+         return  repositoryMap ;
295+     }
296+ 
273297    /** 
274298     * Set the RepositoryMap used to get file information. 
275299     * If the supplied map is invalid it will default to the pre-packaged one here. 
276300     * 
277301     * @throws MojoExecutionException 
278302     */ 
279303    private  void  setRepositoryMapFile () throws  MojoExecutionException  {
280-         if  (this .customRepositoryMap  == null  || !this .customRepositoryMap .exists ()) {
281-             if  (this .customRepositoryMap  != null ) {
282-                 LOG .info ("Unable to access the specified custom repository map, defaulting to bundled version..." );
283-                 LOG .info (" " );
284-             }
304+         File  repositoryMap  = getRepositoryMapFile (this .customRepositoryMap );
305+         if  (repositoryMap  == null  || !repositoryMap .exists ()) {
285306            this .xmlRepositoryMap  = this .getClass ().getResourceAsStream ("/RepositoryMap.xml" );
286307        } else  {
287-             checkRepositoryMapIsValid ();
308+             checkRepositoryMapIsValid (repositoryMap );
288309            try  {
289-                 this .xmlRepositoryMap  = this . customRepositoryMap .toURI ().toURL ().openStream ();
310+                 this .xmlRepositoryMap  = repositoryMap .toURI ().toURL ().openStream ();
290311            } catch  (IOException  ioe ) {
291312                throw  new  MojoExecutionException (ioe .getLocalizedMessage ());
292313            }
@@ -300,9 +321,9 @@ private void setRepositoryMapFile() throws MojoExecutionException {
300321     * 
301322     * @throws MojoExecutionException thrown if customRepositoryMap is not valid 
302323     */ 
303-     protected  void  checkRepositoryMapIsValid () throws  MojoExecutionException  {
324+     protected  void  checkRepositoryMapIsValid (File   repositoryMap ) throws  MojoExecutionException  {
304325        URL  schemaFile  = this .getClass ().getResource ("/RepositoryMap.xsd" );
305-         Source  xmlFile  = new  StreamSource (this . customRepositoryMap );
326+         Source  xmlFile  = new  StreamSource (repositoryMap );
306327        SchemaFactory  schemaFactory  = SchemaFactory .newInstance (XMLConstants .W3C_XML_SCHEMA_NS_URI );
307328        try  {
308329            Schema  schema  = schemaFactory .newSchema (schemaFile );
@@ -311,7 +332,7 @@ protected void checkRepositoryMapIsValid() throws MojoExecutionException {
311332            LOG .info (" "  + xmlFile .getSystemId () + " is valid" );
312333            LOG .info (" " );
313334        } catch  (SAXException  saxe ) {
314-             throw  new  MojoExecutionException (this . customRepositoryMap .getName () + " is not valid: "  + saxe .getLocalizedMessage ());
335+             throw  new  MojoExecutionException (repositoryMap .getName () + " is not valid: "  + saxe .getLocalizedMessage ());
315336        } catch  (IOException  ioe ) {
316337            //Assume it doesn't exist, set to null so that we default to packaged version 
317338            this .customRepositoryMap  = null ;
0 commit comments