Changeset 5402 for CMDIValidator


Ignore:
Timestamp:
06/27/14 23:41:03 (10 years ago)
Author:
Oliver Schonefeld
Message:
  • some more re-factoring and renaming
Location:
CMDIValidator/trunk
Files:
5 edited
6 moved

Legend:

Unmodified
Added
Removed
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIValidationHandler.java

    r5384 r5402  
    1818
    1919
    20 public interface CMDIValidatorHandler {
     20public interface CMDIValidationHandler {
    2121
    2222    public void onJobStarted()
     
    2828
    2929
    30     public void onValidationSuccess(final CMDIValidatorResult result)
     30    public void onValidationReport(final CMDIValidationReport report)
    3131            throws CMDIValidatorException;
    3232
    33 
    34     public void onValidationFailure(final CMDIValidatorResult result)
    35             throws CMDIValidatorException;
    36 
    37 } // interface CMDIValidatorJobHandler
     33} // interface CMDIValidationHandler
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIValidationHandlerAdapter.java

    r5384 r5402  
    1818
    1919
    20 public class CMDIValidatorHandlerAdapter implements CMDIValidatorHandler {
     20public class CMDIValidationHandlerAdapter implements CMDIValidationHandler {
    2121
    2222    @Override
     
    3232
    3333    @Override
    34     public void onValidationSuccess(CMDIValidatorResult result)
     34    public void onValidationReport(final CMDIValidationReport report)
    3535            throws CMDIValidatorException {
    3636    }
    3737
    38 
    39     @Override
    40     public void onValidationFailure(CMDIValidatorResult result)
    41             throws CMDIValidatorException {
    42     }
    43 
    44 } // class CMDIValidatorJobHandlerAdapter
     38} // class CMDIValidationHandlerAdapter
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIValidationReport.java

    r5395 r5402  
    2121
    2222
    23 public interface CMDIValidatorResult {
     23public interface CMDIValidationReport {
    2424    public enum Severity {
    2525        INFO {
     
    8383
    8484
     85    public boolean isSuccess();
     86
     87
     88    public boolean isWarning();
     89
     90
     91    public boolean isFailed();
     92
     93
    8594    public Severity getHighestSeverity();
    8695
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIValidator.java

    r5395 r5402  
    8080import org.xml.sax.SAXParseException;
    8181
    82 import eu.clarin.cmdi.validator.CMDIValidatorResult.Severity;
    8382import eu.clarin.cmdi.validator.utils.LRUCache;
    84 import eu.clarin.cmdi.validator.utils.SaxonLocationUtils;
     83import eu.clarin.cmdi.validator.utils.LocationUtils;
    8584
    8685
     
    126125    private final List<CMDIValidatorExtension> extensions;
    127126    private final FileEnumerator files;
    128     private final CMDIValidatorHandler handler;
     127    private final CMDIValidationHandler handler;
    129128    private final Map<Thread, ThreadContext> contexts =
    130129            new ConcurrentHashMap<Thread, ThreadContext>();
     
    240239
    241240
    242     public CMDIValidatorHandler getHandler() {
     241    public CMDIValidationHandler getHandler() {
    243242        return handler;
    244243    }
     
    462461        private final XsltTransformer schematronValidator;
    463462        private final DocumentBuilder builder;
    464         private CMDIValidatorWriteableResult result;
     463        private CMDIWriteableValidationReport report;
    465464
    466465
     
    617616                logger.debug("validating file '{}' ({} bytes)",
    618617                        file, file.length());
    619                 result = new CMDIValidatorWriteableResultImpl(file);
     618                report = new CMDIWriteableValidatonReportImpl(file);
    620619                stream = new TFileInputStream(file);
    621620
     
    638637                    if (extensions != null) {
    639638                        for (CMDIValidatorExtension extension : extensions) {
    640                             extension.validate(document, result);
     639                            extension.validate(document, report);
    641640                        }
    642641                    }
     
    656655                            "error closing file '" + file + "'", e);
    657656                } finally {
    658                     if ((result != null) && (handler != null)) {
     657                    if ((report != null) && (handler != null)) {
    659658                        try {
    660                             if (result.isHighestSeverity(Severity.ERROR)) {
    661                                 handler.onValidationFailure(result);
    662                             } else {
    663                                 handler.onValidationSuccess(result);
    664                             }
     659                            handler.onValidationReport(report);
    665660                        } finally {
    666                             result = null;
     661                            report = null;
    667662                        }
    668663                    }
     
    712707                schematronValidator.transform();
    713708
    714                 final XdmNode report = destination.getXdmNode();
    715                 if (report != null) {
     709                final XdmNode svrlDocument = destination.getXdmNode();
     710                if (svrlDocument != null) {
    716711                    XPathCompiler xpathCompiler = null;
    717712                    final XQueryEvaluator evaluator =
    718713                            analyzeSchematronReport.load();
    719                     evaluator.setContextItem(report);
     714                    evaluator.setContextItem(svrlDocument);
    720715                    for (final XdmItem item : evaluator) {
    721716                        /* lazy initialize XPath compiler */
     
    737732                            xs.setContextItem(document);
    738733                            XdmItem n = xs.evaluateSingle();
    739                             line = SaxonLocationUtils.getLineNumber(n);
    740                             column = SaxonLocationUtils.getColumnNumber(n);
     734                            line = LocationUtils.getLineNumber(n);
     735                            column = LocationUtils.getColumnNumber(n);
    741736                        }
    742737                        if ("I".equals(s)) {
    743                             result.reportInfo(line, column, m);
     738                            report.reportInfo(line, column, m);
    744739                        } else if ("W".equals(s)) {
    745                             result.reportWarning(line, column, m);
     740                            report.reportWarning(line, column, m);
    746741                        } else {
    747                             result.reportError(line, column, m);
     742                            report.reportError(line, column, m);
    748743                        }
    749744                    } // for
     
    774769                Throwable cause) {
    775770            logger.debug("reporting warning: [{}:{}]: {}", line, col, message);
    776             if (result != null) {
    777                 result.reportWarning(line, col, message, cause);
     771            if (report != null) {
     772                report.reportWarning(line, col, message, cause);
    778773            }
    779774        }
     
    783778                Throwable cause) {
    784779            logger.debug("reporting error: [{}:{}]: {}", line, col, message);
    785             if (result != null) {
    786                 result.reportError(line, col, message, cause);
     780            if (report != null) {
     781                report.reportError(line, col, message, cause);
    787782            }
    788783        }
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIValidatorConfig.java

    r5395 r5402  
    2626public class CMDIValidatorConfig {
    2727    private final File root;
    28     private final CMDIValidatorHandler handler;
     28    private final CMDIValidationHandler handler;
    2929    private FileFilter fileFilter = null;
    3030    private File schemaCacheDirectory = null;
     
    3636
    3737    private CMDIValidatorConfig(final File root,
    38             final CMDIValidatorHandler handler) {
     38            final CMDIValidationHandler handler) {
    3939        if (root == null) {
    4040            throw new NullPointerException("root = null");
     
    5858
    5959
    60     public CMDIValidatorHandler getHandler() {
     60    public CMDIValidationHandler getHandler() {
    6161        return handler;
    6262    }
     
    9696
    9797
    98         public Builder(final File root, final CMDIValidatorHandler handler) {
     98        public Builder(final File root, final CMDIValidationHandler handler) {
    9999            if (root == null) {
    100100                throw new NullPointerException("root == null");
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIValidatorExtension.java

    r5384 r5402  
    3535
    3636
    37     public abstract void validate(XdmNode document,
    38             CMDIValidatorWriteableResult result) throws CMDIValidatorException;
     37    public abstract void validate(final XdmNode document,
     38            final CMDIWriteableValidationReport report)
     39            throws CMDIValidatorException;
    3940
    4041
    4142    protected abstract void doInitialize() throws CMDIValidatorInitException;
    4243
    43 } // CMDIValidatorExtension
     44} // class CMDIValidatorExtension
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIWriteableValidationReport.java

    r5384 r5402  
    1717package eu.clarin.cmdi.validator;
    1818
    19 public interface CMDIValidatorWriteableResult extends CMDIValidatorResult {
     19public interface CMDIWriteableValidationReport extends CMDIValidationReport {
    2020    public void reportInfo(int line, int col, String message);
    2121
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/CMDIWriteableValidatonReportImpl.java

    r5395 r5402  
    66import java.util.List;
    77
    8 final class CMDIValidatorWriteableResultImpl implements CMDIValidatorWriteableResult {
     8final class CMDIWriteableValidatonReportImpl implements CMDIWriteableValidationReport {
    99    private final File file;
    1010    private List<Message> messages;
     
    1212
    1313
    14     CMDIValidatorWriteableResultImpl(File file) {
     14    CMDIWriteableValidatonReportImpl(final File file) {
    1515        this.file = file;
    1616    }
     
    2020    public File getFile() {
    2121        return file;
     22    }
     23
     24
     25    @Override
     26    public boolean isSuccess() {
     27        return isHighestSeverity(Severity.INFO);
     28    }
     29
     30
     31    @Override
     32    public boolean isWarning() {
     33        return isHighestSeverity(Severity.WARNING);
     34    }
     35
     36
     37    @Override
     38    public boolean isFailed() {
     39        return isHighestSeverity(Severity.ERROR);
    2240    }
    2341
     
    150168
    151169    private static final class MessageImpl implements
    152             CMDIValidatorResult.Message {
     170            CMDIValidationReport.Message {
    153171        private final Severity severity;
    154172        private final int line;
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/extensions/CheckHandlesExtension.java

    r5394 r5402  
    3131import eu.clarin.cmdi.validator.CMDIValidatorExtension;
    3232import eu.clarin.cmdi.validator.CMDIValidatorInitException;
    33 import eu.clarin.cmdi.validator.CMDIValidatorWriteableResult;
     33import eu.clarin.cmdi.validator.CMDIWriteableValidationReport;
    3434import eu.clarin.cmdi.validator.utils.HandleResolver;
    35 import eu.clarin.cmdi.validator.utils.SaxonLocationUtils;
     35import eu.clarin.cmdi.validator.utils.LocationUtils;
    3636
    3737public class CheckHandlesExtension extends CMDIValidatorExtension {
     
    7979
    8080    @Override
    81     public void validate(XdmNode document, CMDIValidatorWriteableResult result)
     81    public void validate(final XdmNode document,
     82            final CMDIWriteableValidationReport report)
    8283            throws CMDIValidatorException {
    8384        try {
     
    8687            for (XdmItem item : selector) {
    8788                String handle = null;
    88                 final int line   = SaxonLocationUtils.getLineNumber(item);
    89                 final int column = SaxonLocationUtils.getColumnNumber(item);
     89                final int line   = LocationUtils.getLineNumber(item);
     90                final int column = LocationUtils.getColumnNumber(item);
    9091                final String h = item.getStringValue();
    9192                if (h != null) {
     
    9596                    } else {
    9697                        if (!handle.equals(h)) {
    97                             result.reportWarning(line, column, "handle '" + h +
     98                            report.reportWarning(line, column, "handle '" + h +
    9899                                    "' contains leading or tailing spaces " +
    99100                                    "within <ResourceRef> element");
     
    103104
    104105                if (handle != null) {
    105                     checkHandleURISyntax(handle, result, line, column);
    106                 } else {
    107                     result.reportError(line, column,
     106                    checkHandleURISyntax(report, handle, line, column);
     107                } else {
     108                    report.reportError(line, column,
    108109                            "invalid handle (<ResourceRef> was empty)");
    109110                }
     
    115116
    116117
    117     private void checkHandleURISyntax(String handle,
    118             CMDIValidatorWriteableResult result, int line, int column)
    119             throws CMDIValidatorException {
     118    private void checkHandleURISyntax(
     119            final CMDIWriteableValidationReport report, final String handle,
     120            final int line, final int column) throws CMDIValidatorException {
    120121        try {
    121122            final URI uri = new URI(handle);
     
    128129                    final URI actionableURI =
    129130                            new URI(HDL_PROXY_HTTP, HDL_PROXY_HOST, path, null);
    130                     checkHandleResolves(actionableURI, result, line, column);
     131                    checkHandleResolves(report, actionableURI, line, column);
    131132                } catch (URISyntaxException e) {
    132133                    /* should not happen */
     
    136137            } else if (URN_SCHEME.equals(uri.getScheme())) {
    137138                if (resolveHandles) {
    138                     result.reportInfo(line, column, "PID '" + handle +
     139                    report.reportInfo(line, column, "PID '" + handle +
    139140                            "' skipped, because URN resolving is not supported");
    140141                } else {
    141                     result.reportInfo(line, column, "PID '" + handle +
     142                    report.reportInfo(line, column, "PID '" + handle +
    142143                            "' skipped, because URN sytax checking is not supported");
    143144                }
     
    146147                if (uri.getHost() != null) {
    147148                    if (!HDL_PROXY_HOST.equalsIgnoreCase(uri.getHost())) {
    148                         result.reportError(line, column,
     149                        report.reportError(line, column,
    149150                                "The URI of PID '" + handle +
    150151                                "' contains an unexpected host part of '" +
    151152                                uri.getHost() + "'");
    152153                    }
    153                     checkHandleResolves(uri, result, line, column);
    154                 } else {
    155                     result.reportError(line, column, "The URI of PID '" +
     154                    checkHandleResolves(report, uri, line, column);
     155                } else {
     156                    report.reportError(line, column, "The URI of PID '" +
    156157                            handle + "' is missing the host part");
    157158                }
    158159            } else {
    159160                if (uri.getScheme() != null) {
    160                     result.reportError(line, column,
     161                    report.reportError(line, column,
    161162                            "The URI of PID '" + handle +
    162163                            "' contains an unexpected schema part of '" +
    163164                            uri.getScheme() + "'");
    164165                } else {
    165                     result.reportError(line, column, "The URI of PID '" +
     166                    report.reportError(line, column, "The URI of PID '" +
    166167                            handle + "' is missing a proper schema part");
    167168                }
    168169            }
    169170        } catch (URISyntaxException e) {
    170             result.reportError(line, column, "PID '" + handle +
     171            report.reportError(line, column, "PID '" + handle +
    171172                    "' is not a well-formed URI: " + e.getMessage());
    172173        }
     
    174175
    175176
    176     private void checkHandleResolves(URI uri,
    177             CMDIValidatorWriteableResult result, int line, int column)
    178             throws CMDIValidatorException {
     177    private void checkHandleResolves(
     178            final CMDIWriteableValidationReport result, final URI uri,
     179            final int line, final int column) throws CMDIValidatorException {
    179180        if (resolver != null) {
    180181            try {
  • CMDIValidator/trunk/cmdi-validator-core/src/main/java/eu/clarin/cmdi/validator/utils/LocationUtils.java

    r5396 r5402  
    2020import net.sf.saxon.s9api.XdmNode;
    2121
    22 public final class SaxonLocationUtils {
    23    
    24     private SaxonLocationUtils() {
     22public final class LocationUtils {
     23
     24    private LocationUtils() {
    2525    }
    2626
     
    4141    }
    4242
    43 } // class SaxonLocationUtils
     43} // class LocationUtils
  • CMDIValidator/trunk/cmdi-validator-tool/src/main/java/eu/clarin/cmdi/validator/tool/CMDIValidatorTool.java

    r5391 r5402  
    2323import java.util.Locale;
    2424import java.util.concurrent.TimeUnit;
     25import java.util.concurrent.atomic.AtomicInteger;
     26import java.util.concurrent.atomic.AtomicLong;
    2527
    2628import net.java.truevfs.access.TFile;
     
    4446import eu.clarin.cmdi.validator.CMDIValidatorException;
    4547import eu.clarin.cmdi.validator.CMDIValidatorInitException;
    46 import eu.clarin.cmdi.validator.CMDIValidatorHandlerAdapter;
    47 import eu.clarin.cmdi.validator.CMDIValidatorResult;
    48 import eu.clarin.cmdi.validator.CMDIValidatorResult.Message;
    49 import eu.clarin.cmdi.validator.CMDIValidatorResult.Severity;
     48import eu.clarin.cmdi.validator.CMDIValidationHandlerAdapter;
     49import eu.clarin.cmdi.validator.CMDIValidationReport;
     50import eu.clarin.cmdi.validator.CMDIValidationReport.Message;
     51import eu.clarin.cmdi.validator.CMDIValidationReport.Severity;
    5052import eu.clarin.cmdi.validator.extensions.CheckHandlesExtension;
    5153import eu.clarin.cmdi.validator.utils.HandleResolver;
     
    229231
    230232
    231                     final ValidationHandler handler = new ValidationHandler(verbose);
     233                    final Handler handler = new Handler(verbose);
    232234
    233235                    final CMDIValidatorConfig.Builder builder =
     
    466468
    467469
    468     private static class ValidationHandler extends CMDIValidatorHandlerAdapter {
     470    private static class Handler extends CMDIValidationHandlerAdapter {
    469471        private final boolean verbose;
    470         private long started     = System.currentTimeMillis();
    471         private long finished    = -1;
    472         private int filesTotal   = 0;
    473         private int filesInvalid = 0;
    474         private long totalBytes  = 0;
     472        private long started               = -1;
     473        private long finished              = -1;
     474        private AtomicInteger filesTotal   = new AtomicInteger();
     475        private AtomicInteger filesInvalid = new AtomicInteger();
     476        private AtomicLong    totalBytes   = new AtomicLong();
    475477        private boolean isCompleted = false;
    476478        private final Object waiter = new Object();
    477479
    478480
    479         private ValidationHandler(boolean verbose) {
     481        private Handler(boolean verbose) {
    480482            this.verbose = verbose;
    481483        }
     
    496498
    497499        public int getTotalFileCount() {
    498             return filesTotal;
     500            return filesTotal.get();
    499501        }
    500502
    501503
    502504        public int getValidFileCount() {
    503             return filesTotal - filesInvalid;
     505            return filesTotal.get() - filesInvalid.get();
    504506        }
    505507
    506508        public int getInvalidFileCount() {
    507             return filesInvalid;
     509            return filesInvalid.get();
    508510        }
    509511
    510512
    511513        public float getFailureRate() {
    512             return (filesTotal > 0)
    513                     ? ((float) filesInvalid / (float) filesTotal)
     514            final int total = filesTotal.get();
     515            return (total > 0)
     516                    ? ((float) filesInvalid.get() / (float) total)
    514517                    : 0.0f;
    515518        }
     
    517520
    518521        public long getTotalBytes() {
    519             return totalBytes;
     522            return totalBytes.get();
    520523        }
    521524
     
    539542        public void onJobStarted() throws CMDIValidatorException {
    540543            logger.debug("validation process started");
     544            this.started = System.currentTimeMillis();
    541545        }
    542546
     
    568572
    569573        @Override
    570         public void onValidationSuccess(final CMDIValidatorResult result)
     574        public void onValidationReport(final CMDIValidationReport report)
    571575                throws CMDIValidatorException {
    572             final File file = result.getFile();
    573             synchronized (this) {
    574                 filesTotal++;
    575                 if (file != null) {
    576                     totalBytes += file.length();
    577                 }
    578             } // synchronized (this) {
    579 
    580             if (result.isHighestSeverity(Severity.WARNING)) {
     576            filesTotal.incrementAndGet();
     577
     578            final File file = report.getFile();
     579            if (file != null) {
     580                totalBytes.getAndAdd(file.length());
     581            }
     582
     583            switch (report.getHighestSeverity()) {
     584            case INFO:
     585                logger.debug("file '{}' is valid", file);
     586                break;
     587            case WARNING:
    581588                if (verbose) {
    582589                    logger.warn("file '{}' is valid (with warnings):", file);
    583                     for (Message msg : result.getMessages()) {
     590                    for (Message msg : report.getMessages()) {
    584591                        if ((msg.getLineNumber() != -1) &&
    585592                                (msg.getColumnNumber() != -1)) {
     
    596603                    }
    597604                } else {
    598                     Message msg = result.getFirstMessage(Severity.WARNING);
    599                     int count   = result.getMessageCount(Severity.WARNING);
     605                    Message msg = report.getFirstMessage(Severity.WARNING);
     606                    int count   = report.getMessageCount(Severity.WARNING);
    600607                    if (count > 1) {
    601608                        logger.warn("file '{}' is valid (with warnings): {} ({} more warnings)",
     
    606613                    }
    607614                }
    608             } else {
    609                 logger.debug("file '{}' is valid", file);
    610             }
    611         }
    612 
    613 
    614         @Override
    615         public void onValidationFailure(final CMDIValidatorResult result) {
    616             final File file = result.getFile();
    617             synchronized (this) {
    618                 filesTotal++;
    619                 filesInvalid++;
    620                 if (file != null) {
    621                     totalBytes += file.length();
    622                 }
    623             } // synchronized (this)
    624 
    625             if (verbose) {
    626             logger.error("file '{}' is invalid:", file);
    627                 for (Message msg : result.getMessages()) {
    628                     if ((msg.getLineNumber() != -1) &&
    629                             (msg.getColumnNumber() != -1)) {
    630                         logger.error(" ({}) {} [line={}, column={}]",
    631                                 msg.getSeverity().getShortcut(),
    632                                 msg.getMessage(),
    633                                 msg.getLineNumber(),
    634                                 msg.getColumnNumber());
     615                break;
     616            case ERROR:
     617                filesInvalid.incrementAndGet();
     618                if (verbose) {
     619                    logger.error("file '{}' is invalid:", file);
     620                    for (Message msg : report.getMessages()) {
     621                        if ((msg.getLineNumber() != -1) &&
     622                                (msg.getColumnNumber() != -1)) {
     623                            logger.error(" ({}) {} [line={}, column={}]", msg
     624                                    .getSeverity().getShortcut(), msg
     625                                    .getMessage(), msg.getLineNumber(), msg
     626                                    .getColumnNumber());
     627                        } else {
     628                            logger.error(" ({}) {}", msg.getSeverity()
     629                                    .getShortcut(), msg.getMessage());
     630                        }
     631                    }
     632                } else {
     633                    Message msg = report.getFirstMessage(Severity.ERROR);
     634                    int count   = report.getMessageCount(Severity.ERROR);
     635                    if (count > 1) {
     636                        logger.error(
     637                                "file '{}' is invalid: {} ({} more errors)",
     638                                file, msg.getMessage(), (count - 1));
    635639                    } else {
    636                         logger.error(" ({}) {}",
    637                                 msg.getSeverity().getShortcut(),
     640                        logger.error("file '{}' is invalid: {}", file,
    638641                                msg.getMessage());
    639642                    }
    640643                }
    641             } else {
    642                 Message msg = result.getFirstMessage(Severity.ERROR);
    643                 int count   = result.getMessageCount(Severity.ERROR);
    644                 if (count > 1) {
    645                     logger.error("file '{}' is invalid: {} ({} more errors)",
    646                             file, msg.getMessage(), (count - 1));
    647                 } else {
    648                     logger.error("file '{}' is invalid: {}",
    649                             file, msg.getMessage());
    650                 }
    651             }
    652         }
    653     } // class JobHandler
     644                break;
     645            default:
     646                throw new CMDIValidatorException("unexpected severity: " +
     647                        report.getHighestSeverity());
     648            } // switch
     649        }
     650    } // class Handler
    654651
    655652
Note: See TracChangeset for help on using the changeset viewer.