Changeset 5204


Ignore:
Timestamp:
05/16/14 14:46:30 (10 years ago)
Author:
Oliver Schonefeld
Message:
  • a first stab at checking the persistent identifiers (use -p to enable)
Location:
CMDIValidator/trunk
Files:
6 added
5 edited

Legend:

Unmodified
Added
Removed
  • CMDIValidator/trunk/pom.xml

    r5052 r5204  
    44        <groupId>eu.clarin.cmdi</groupId>
    55        <artifactId>cmdi-validator</artifactId>
    6         <version>0.0.1-SNAPSHOT</version>
     6        <version>0.0.2-SNAPSHOT</version>
    77
    88        <properties>
  • CMDIValidator/trunk/src/main/java/eu/clarin/cmdi/validator/CMDIValidator.java

    r5056 r5204  
    44import java.io.IOException;
    55import java.io.InputStream;
    6 import java.util.LinkedHashMap;
    76import java.util.LinkedHashSet;
     7import java.util.List;
    88import java.util.Map;
    99import java.util.Set;
     
    4949
    5050import eu.clarin.cmdi.validator.CMDIValidatorResult.Severity;
     51import eu.clarin.cmdi.validator.utils.LRUCache;
    5152
    5253
     
    8384    private final XML11Configuration config;
    8485    private final DocumentBuilder builder;
     86    private final List<CMDIValidationPlugin> plugins;
    8587    private final CMDIValidatorResultImpl result;
    8688
    8789
    88     CMDIValidator(final Processor processor, final SchemaLoader schemaLoader,
    89             XsltExecutable schematronExecutable)
     90    CMDIValidator(final Processor processor,
     91            final SchemaLoader schemaLoader,
     92            XsltExecutable schematronExecutable,
     93            List<CMDIValidationPlugin> plugins)
    9094            throws CMDIValidatorInitException {
    9195        if (processor == null) {
     
    215219
    216220            /*
     221             * initialize plugins
     222             */
     223            if ((plugins != null) && !plugins.isEmpty()) {
     224                this.plugins = plugins;
     225            } else {
     226                this.plugins = null;
     227            }
     228
     229            /*
    217230             * initialize other stuff
    218231             */
     
    238251            final XdmNode document = parseInstance(stream);
    239252
    240             /*
    241              * step 2: perform Schematron validation
    242              */
    243253            if (document != null) {
     254                /*
     255                 * step 2: perform Schematron validation
     256                 */
    244257                if (schematronValidator != null) {
    245258                    validateSchematron(document);
     259                }
     260
     261                /*
     262                 * step 3: run plugins, if any
     263                 */
     264                if (plugins != null) {
     265                    for (CMDIValidationPlugin plugin : plugins) {
     266                        plugin.validate(document, result);
     267                    }
    246268                }
    247269            } else {
     
    501523    }  // class ShadowCacheGrammarPool
    502524
    503 
    504     @SuppressWarnings("serial")
    505     private static class LRUCache<A, B> extends LinkedHashMap<A, B> {
    506         private final int maxEntries;
    507 
    508 
    509         public LRUCache(final int maxEntries) {
    510             super(maxEntries + 1, 1.0f, true);
    511             this.maxEntries = maxEntries;
    512         }
    513 
    514 
    515         @Override
    516         protected boolean removeEldestEntry(final Map.Entry<A, B> eldest) {
    517             return super.size() > maxEntries;
    518         }
    519     } // class LRUCache
    520 
    521525} // class CMDIValidator
  • CMDIValidator/trunk/src/main/java/eu/clarin/cmdi/validator/CMDIValidatorFactory.java

    r5073 r5204  
    44import java.net.MalformedURLException;
    55import java.net.URL;
     6import java.util.ArrayList;
     7import java.util.List;
    68
    79import javax.xml.transform.stream.StreamSource;
     
    3537    private final SchemaLoader schemaLoader;
    3638    private final XsltExecutable schematronValidator;
    37 
     39    private final List<CMDIValidationPluginFactory> pluginFactories;
    3840
    3941    private CMDIValidatorFactory(File cacheDirectory,
    40             File schematronSchemaFile, boolean disableSchematron)
     42            File schematronSchemaFile, boolean disableSchematron,
     43            List<CMDIValidationPluginFactory> pluginFactories)
    4144            throws CMDIValidatorInitException {
    4245        /*
     
    151154            this.schematronValidator = null;
    152155        }
     156
     157        /*
     158         * store pluginFactories
     159         */
     160        if ((pluginFactories != null) && !pluginFactories.isEmpty()) {
     161            this.pluginFactories = pluginFactories;
     162        } else {
     163            this.pluginFactories = null;
     164        }
    153165    }
    154166
    155167
    156168    public CMDIValidator newValidator() throws CMDIValidatorInitException {
    157         return new CMDIValidator(processor, schemaLoader, schematronValidator);
     169        List<CMDIValidationPlugin> plugins = null;
     170        if (pluginFactories != null) {
     171            plugins = new ArrayList<CMDIValidationPlugin>(pluginFactories.size());
     172            for (CMDIValidationPluginFactory pluginFactory : pluginFactories) {
     173                plugins.add(pluginFactory.newInstance(processor));
     174            }
     175        }
     176
     177        return new CMDIValidator(processor, schemaLoader,
     178                schematronValidator, plugins);
    158179    }
    159180
    160181
    161182    public static CMDIValidatorFactory newInstance(File cacheDircetory,
    162             File schematronSchemaFile, boolean disableSchematron)
    163             throws CMDIValidatorInitException {
    164         return new CMDIValidatorFactory(cacheDircetory, schematronSchemaFile,
    165                 disableSchematron);
     183            File schematronSchemaFile,
     184            boolean disableSchematron,
     185            List<CMDIValidationPluginFactory> pluginFactories)
     186            throws CMDIValidatorInitException {
     187        return new CMDIValidatorFactory(cacheDircetory,
     188                schematronSchemaFile,
     189                disableSchematron,
     190                pluginFactories);
    166191    }
    167192
     
    169194    public static CMDIValidatorFactory newInstance()
    170195            throws CMDIValidatorInitException {
    171         return new CMDIValidatorFactory(null, null, false);
     196        return new CMDIValidatorFactory(null, null, false, null);
    172197    }
    173198
  • CMDIValidator/trunk/src/main/java/eu/clarin/cmdi/validator/CMDIValidatorResultImpl.java

    r5055 r5204  
    77
    88
    9 final class CMDIValidatorResultImpl implements CMDIValidatorResult {
     9public final class CMDIValidatorResultImpl implements CMDIValidatorResult {
    1010    private static class MessageImpl implements CMDIValidatorResult.Message {
    1111        private Severity severity;
     
    147147
    148148
    149     void setFile(File file) {
    150         this.file = file;
    151     }
    152 
    153 
    154     void reportInfo(int line, int col, String message) {
     149    public void reportInfo(int line, int col, String message) {
    155150        reportInfo(line, col, message, null);
    156151    }
    157152
    158153
    159     void reportInfo(int line, int col, String message, Throwable cause) {
     154    public void reportInfo(int line, int col, String message, Throwable cause) {
    160155        entries.add(new MessageImpl(Severity.INFO, line, col, message, cause));
    161156    }
    162157
    163158
    164     void reportWarning(int line, int col, String message) {
     159    public void reportWarning(int line, int col, String message) {
    165160        reportWarning(line, col, message, null);
    166161    }
    167162
    168163
    169     void reportWarning(int line, int col, String message, Throwable cause) {
     164    public void reportWarning(int line, int col, String message, Throwable cause) {
    170165        switch (highestSeverity) {
    171166        case WARNING:
     
    180175
    181176
    182     void reportError(int line, int col, String message) {
     177    public void reportError(int line, int col, String message) {
    183178        reportError(line, col, message, null);
    184179    }
    185180
    186181
    187     void reportError(int line, int col, String message, Throwable cause) {
     182    public void reportError(int line, int col, String message, Throwable cause) {
    188183        switch (highestSeverity) {
    189184        case ERROR:
     
    196191
    197192
     193    void setFile(File file) {
     194        this.file = file;
     195    }
     196
     197
    198198    void reset() {
    199199        this.entries.clear();
  • CMDIValidator/trunk/src/main/java/eu/clarin/cmdi/validator/tool/CMDIValidatorTool.java

    r5073 r5204  
    55import java.io.File;
    66import java.io.PrintWriter;
     7import java.util.ArrayList;
     8import java.util.List;
    79import java.util.Locale;
    810import java.util.concurrent.TimeUnit;
     
    1113import net.java.truevfs.access.TVFS;
    1214import net.java.truevfs.kernel.spec.FsSyncException;
    13 
    1415import org.apache.commons.cli.CommandLine;
    1516import org.apache.commons.cli.CommandLineParser;
     
    2324import org.slf4j.LoggerFactory;
    2425
     26import eu.clarin.cmdi.validator.CMDIValidationPluginFactory;
    2527import eu.clarin.cmdi.validator.CMDIValidator;
    2628import eu.clarin.cmdi.validator.CMDIValidatorEngine;
     
    3234import eu.clarin.cmdi.validator.CMDIValidatorResult.Message;
    3335import eu.clarin.cmdi.validator.CMDIValidatorResult.Severity;
     36import eu.clarin.cmdi.validator.plugins.CheckPidPluginFactory;
    3437
    3538
     
    4851    private static final char OPT_NO_SCHEMATRON         = 'S';
    4952    private static final char OPT_SCHEMATRON_FILE       = 's';
     53    private static final char OPT_CHECK_PIDS            = 'p';
    5054    private static final Logger logger =
    5155            LoggerFactory.getLogger(CMDIValidatorTool.class);
     
    6670        boolean disableSchematron = false;
    6771        File schematronFile       = null;
     72        boolean checkPids         = false;
    6873
    6974        /*
     
    136141                }
    137142                schematronFile = new File(name);
     143            }
     144            if (line.hasOption(OPT_CHECK_PIDS)) {
     145                checkPids = true;
    138146            }
    139147
     
    170178                    logger.info("using Schematron schema from file: {}", schematronFile);
    171179                }
     180
     181                List<CMDIValidationPluginFactory> pluginFactories =
     182                        new ArrayList<CMDIValidationPluginFactory>();
     183                if (checkPids) {
     184                    logger.info("performing PID checking");
     185                    pluginFactories.add(new CheckPidPluginFactory());
     186                }
     187
    172188                final CMDIValidatorFactory factory =
    173189                        CMDIValidatorFactory.newInstance(schemaCacheDir,
    174                                 schematronFile, disableSchematron);
     190                                schematronFile,
     191                                disableSchematron,
     192                                pluginFactories);
    175193
    176194                /*
     
    360378                .create(OPT_SCHEMATRON_FILE));
    361379        options.addOptionGroup(g3);
     380        options.addOption(OptionBuilder
     381                .withDescription("check if persistent identifiers resolve correctly")
     382                .withLongOpt("check-pids")
     383                .create(OPT_CHECK_PIDS));
    362384        return options;
    363385    }
Note: See TracChangeset for help on using the changeset viewer.