Commit dba1df97cf14dc9660caec1633886bb5bebf5563

Authored by Nelson Torres Universidade U Minho
1 parent 960a56901c
Exists in master

TID validation

config/validator.xml
... ... @@ -318,6 +318,28 @@
318 318 </parameter>
319 319 </check>
320 320  
  321 + <check id="tid_valid" severity="ERROR">
  322 + <translation element="body" lang="pt">A indicação “TID inválido” é identificada quando não existe um TID válido
  323 + associado ao registo no elemento dc.identifier.tid em teses/dissertações com data de defesa igual ou superior a 7 de Agosto de 2013.
  324 + Se apenas o ano ou ano e mês foi indicado, então verifica-se o TID para data de defesa igual ou superior a 2013 ou Agosto de 2013 respectivamente.
  325 + </translation>
  326 + <translation element="body" lang="en">A error message “Invalid TID” appears when there is not a valid TID associated
  327 + to the register in the dc.identifier.tid element in thesis/dissertations defended in or after August 7, 2013 does not exist.
  328 + If only the year or month and year is specified, The TID is checked for defense dates greater than or equal to 2013 or August 2013 respectively.
  329 + </translation>
  330 + <translation element="description" lang="pt">Valida o TID em teses/dissertações com data de defesa igual ou superior a 7 de Agosto de 2013.</translation>
  331 + <translation element="description" lang="en">Checks if TID is valid in thesis/dissertations defended in or after August 7, 2013.
  332 + </translation>
  333 + <translation element="severity" lang="pt">TID inválido &lt;a target="_blank" href="/validator2/help#tid_exists"&gt;&lt;span
  334 + class="glyphicon glyphicon-question-sign"&gt;&lt;/span&gt;&lt;/a&gt;</translation>
  335 + <translation element="severity" lang="en">Invalid TID &lt;a target="_blank"
  336 + href="/validator2/help#tid_exists"&gt;&lt;span class="glyphicon glyphicon-question-sign"&gt;&lt;/span&gt;&lt;/a&gt;</translation>
  337 + <class>pt.uminho.sdum.validador2.check.ValidTid</class>
  338 + <parameter key="field">
  339 + <value>tid</value>
  340 + </parameter>
  341 + </check>
  342 +
321 343 <check id="embargo_date" severity="ERROR">
322 344 <translation element="body" lang="pt">
323 345 A indicação "Incoerência de Embargo" aparece quando um Item tem "embargoedAccess" no registo no elemento dc.rghts
... ...
src/pt/uminho/sdum/validador2/check/ValidTid.java
... ... @@ -0,0 +1,67 @@
  1 +package pt.uminho.sdum.validador2.check;
  2 +
  3 +
  4 +import pt.keep.metarepository.core.harvester.server.data.Metadata;
  5 +import pt.keep.metarepository.core.harvester.server.data.Record;
  6 +import pt.keep.metarepository.core.validator2.application.CheckResult;
  7 +import pt.keep.metarepository.core.validator2.checks.CheckInterface;
  8 +import pt.keep.metarepository.core.validator2.profiles.data.Check;
  9 +import pt.keep.metarepository.core.validator2.profiles.data.Parameter;
  10 +import pt.keep.metarepository.core.validator2.registration.ValidationRequestInfo;
  11 +import pt.uminho.sdum.utils.DateUtils;
  12 +import pt.uminho.sdum.utils.DateValidator;
  13 +
  14 +import java.util.ArrayList;
  15 +import java.util.List;
  16 +
  17 +/**
  18 + * Checks if thesis issued after 2013-08-06 have valid TID
  19 + * @author NTorres on 23/01/2017.
  20 + */
  21 +public class ValidTid extends CheckInterface {
  22 + @Override
  23 + public CheckResult check(ValidationRequestInfo validationRequest, Record record, Check check) {
  24 + DateValidator dateValidator = new DateValidator("2013-08-06", "2013-07", "2012");
  25 + CheckResult checkResult = new CheckResult(true);
  26 + Metadata metadata = record.getMetadata();
  27 +
  28 + if(dateValidator.verify(DateUtils.getDcDateIssueFromOai(metadata.getDateList()))) {
  29 + List<String> tids = getTID(metadata);
  30 + if(tids.isEmpty())
  31 + checkResult.setOk(false);
  32 + }
  33 + return checkResult;
  34 + }
  35 +
  36 + @Override
  37 + public boolean areParametersValid(List<Parameter> parameters) {
  38 + return parameters.size() == 1;
  39 + }
  40 +
  41 + private List<String> getTID(Metadata metadata) {
  42 + List<String> lTid = new ArrayList<>();
  43 +
  44 + for (String identifier : metadata.getIdentifierList())
  45 + if (isTidValid(identifier))
  46 + lTid.add(identifier);
  47 +
  48 + return lTid;
  49 + }
  50 +
  51 + public static boolean isTidValid(String tid){
  52 + boolean validation = false;
  53 + if (tid.matches("[0-9]{9}") &&
  54 + (Character.getNumericValue(tid.charAt(0))==1 || Character.getNumericValue(tid.charAt(0))==2)) {
  55 + int tidValue=0;
  56 + for(int i=0;i<8;++i){
  57 + tidValue += Character.getNumericValue(tid.charAt(i)) * (9-i);
  58 + }
  59 + tidValue = tidValue % 11;
  60 + if((tidValue == 0 || tidValue == 1) && tid.charAt(8) == '0' )
  61 + validation = true;
  62 + else if(tidValue > 1 && Character.getNumericValue(tid.charAt(8)) == 11 - tidValue )
  63 + validation = true;
  64 + }
  65 + return validation;
  66 + }
  67 +}
... ...