Commit 62de37f6469905a6ed19d67a64603fc2678391d2

Authored by Fernando Ribeiro
Exists in master

Merge branch 'master' into 'master'

Master

validação do TID no validador

See merge request !6
config/validator.xml
... ... @@ -157,6 +157,7 @@
157 157 <check refid="description_exists"/>
158 158 <check refid="date_exists_and_is_valid"/>
159 159 <check refid="tid_exists"/>
  160 + <check refid="tid_valid"/>
160 161  
161 162 </profile>
162 163  
... ... @@ -318,6 +319,28 @@
318 319 </parameter>
319 320 </check>
320 321  
  322 + <check id="tid_valid" severity="ERROR">
  323 + <translation element="body" lang="pt">A indicação “TID inválido” é identificada quando não existe um TID válido
  324 + 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.
  325 + 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.
  326 + </translation>
  327 + <translation element="body" lang="en">A error message “Invalid TID” appears when there is not a valid TID associated
  328 + to the register in the dc.identifier.tid element in thesis/dissertations defended in or after August 7, 2013 does not exist.
  329 + 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.
  330 + </translation>
  331 + <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>
  332 + <translation element="description" lang="en">Checks if TID is valid in thesis/dissertations defended in or after August 7, 2013.
  333 + </translation>
  334 + <translation element="severity" lang="pt">TID inválido &lt;a target="_blank" href="/validator2/help#tid_exists"&gt;&lt;span
  335 + class="glyphicon glyphicon-question-sign"&gt;&lt;/span&gt;&lt;/a&gt;</translation>
  336 + <translation element="severity" lang="en">Invalid TID &lt;a target="_blank"
  337 + href="/validator2/help#tid_exists"&gt;&lt;span class="glyphicon glyphicon-question-sign"&gt;&lt;/span&gt;&lt;/a&gt;</translation>
  338 + <class>pt.uminho.sdum.validador2.check.ValidTid</class>
  339 + <parameter key="field">
  340 + <value>tid</value>
  341 + </parameter>
  342 + </check>
  343 +
321 344 <check id="embargo_date" severity="ERROR">
322 345 <translation element="body" lang="pt">
323 346 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 +}
... ...