Coverage Report - liquibase.parser.ChangeLogParserFactory
 
Classes in this File Line Coverage Branch Coverage Complexity
ChangeLogParserFactory
92%
23/25
100%
8/8
2
ChangeLogParserFactory$1
100%
2/2
N/A
2
 
 1  
 package liquibase.parser;
 2  
 
 3  
 import java.util.ArrayList;
 4  
 import java.util.Collections;
 5  
 import java.util.Comparator;
 6  
 import java.util.List;
 7  
 
 8  
 import liquibase.exception.LiquibaseException;
 9  
 import liquibase.exception.UnexpectedLiquibaseException;
 10  
 import liquibase.resource.ResourceAccessor;
 11  
 import liquibase.servicelocator.ServiceLocator;
 12  
 
 13  
 public class ChangeLogParserFactory {
 14  
 
 15  
     private static ChangeLogParserFactory instance;
 16  
 
 17  
     private List<ChangeLogParser> parsers;
 18  
     private Comparator<ChangeLogParser> changelogParserComparator;
 19  
 
 20  
     public static void reset() {
 21  17
         instance = new ChangeLogParserFactory();
 22  17
     }
 23  
 
 24  
     public static ChangeLogParserFactory getInstance() {
 25  43
         if (instance == null) {
 26  1
             instance = new ChangeLogParserFactory();
 27  
         }
 28  43
         return instance;
 29  
     }
 30  
 
 31  18
     private ChangeLogParserFactory() {
 32  
         Class<? extends ChangeLogParser>[] classes;
 33  102
         changelogParserComparator = new Comparator<ChangeLogParser>() {
 34  
             @Override
 35  
             public int compare(ChangeLogParser o1, ChangeLogParser o2) {
 36  84
                 return Integer.valueOf(o2.getPriority()).compareTo(o1.getPriority());
 37  
             }
 38  
         };
 39  
 
 40  18
         parsers = new ArrayList<ChangeLogParser>();
 41  
         try {
 42  18
             classes = ServiceLocator.getInstance().findClasses(ChangeLogParser.class);
 43  
 
 44  72
             for (Class<? extends ChangeLogParser> clazz : classes) {
 45  54
                 register((ChangeLogParser) clazz.getConstructor().newInstance());
 46  
             }
 47  0
         } catch (Exception e) {
 48  0
             throw new UnexpectedLiquibaseException(e);
 49  18
         }
 50  
 
 51  18
     }
 52  
 
 53  
     public List<ChangeLogParser> getParsers() {
 54  20
         return parsers;
 55  
     }
 56  
 
 57  
     public ChangeLogParser getParser(String fileNameOrExtension, ResourceAccessor resourceAccessor)
 58  
             throws LiquibaseException {
 59  13
         for (ChangeLogParser parser : parsers) {
 60  22
             if (parser.supports(fileNameOrExtension, resourceAccessor)) {
 61  12
                 return parser;
 62  
             }
 63  
         }
 64  
 
 65  1
         throw new LiquibaseException("Cannot find parser that supports " + fileNameOrExtension);
 66  
     }
 67  
 
 68  
     public void register(ChangeLogParser changeLogParser) {
 69  68
         parsers.add(changeLogParser);
 70  68
         Collections.sort(parsers, changelogParserComparator);
 71  68
     }
 72  
 
 73  
     public void unregister(ChangeLogParser changeLogParser) {
 74  3
         parsers.remove(changeLogParser);
 75  3
     }
 76  
 }