diff --git a/questionGenerator/src/main/java/questionGenerator/generator/RightAnswerIsEntity.java b/questionGenerator/src/main/java/questionGenerator/generator/RightAnswerIsEntity.java index e631cee5..9ccddb6a 100644 --- a/questionGenerator/src/main/java/questionGenerator/generator/RightAnswerIsEntity.java +++ b/questionGenerator/src/main/java/questionGenerator/generator/RightAnswerIsEntity.java @@ -8,7 +8,6 @@ import org.wikidata.wdtk.datamodel.implementation.ItemDocumentImpl; import org.wikidata.wdtk.datamodel.interfaces.Statement; -import org.wikidata.wdtk.datamodel.interfaces.Value; import org.wikidata.wdtk.wikibaseapi.apierrors.MediaWikiApiErrorException; import main.java.questionGenerator.question.QuestionType; @@ -19,10 +18,17 @@ public RightAnswerIsEntity(String propertyId, QuestionType type) { super(propertyId, type); } + /** + * This method acts as a wrapper because in some cases this is enough, but not in all of them, + * so the rest are in charge of overriding it and modifying what they need + */ @Override protected String getRightAnswer(Map> claims) { - Value v = claims.get(super.getPropertyId()).get(0).getValue(); - String entity = getRightAnswerEntity(v.toString()); + return processRightAnswer(claims.get(super.getPropertyId()).get(0)); + } + + protected String processRightAnswer(Statement st) { + String entity = getRightAnswerEntity(st.getValue().toString()); String answer = ""; try { ItemDocumentImpl idi = getAlreadyProcessedEntities().get(entity); @@ -34,7 +40,7 @@ protected String getRightAnswer(Map> claims) { else answer = getName(idi.getLabels()); } catch (MediaWikiApiErrorException | IOException e) { - return null; + } return answer; } @@ -59,7 +65,7 @@ protected String getAnswer(String id){ return getRightAnswer(idi.getJsonClaims()); } - private String getRightAnswerEntity(String url) { + protected String getRightAnswerEntity(String url) { String[] split1 = url.split(" "); String[] split2 = split1[0].split("/"); return split2[split2.length-1]; diff --git a/questionGenerator/src/main/java/questionGenerator/generator/specificGenerators/CapitalGenerator.java b/questionGenerator/src/main/java/questionGenerator/generator/specificGenerators/CapitalGenerator.java index e7bc6d3a..59f72953 100644 --- a/questionGenerator/src/main/java/questionGenerator/generator/specificGenerators/CapitalGenerator.java +++ b/questionGenerator/src/main/java/questionGenerator/generator/specificGenerators/CapitalGenerator.java @@ -1,5 +1,12 @@ package main.java.questionGenerator.generator.specificGenerators; +import java.util.List; +import java.util.Map; + +import org.wikidata.wdtk.datamodel.interfaces.Snak; +import org.wikidata.wdtk.datamodel.interfaces.SnakGroup; +import org.wikidata.wdtk.datamodel.interfaces.Statement; + import main.java.questionGenerator.generator.RightAnswerIsEntity; import main.java.questionGenerator.question.QuestionType; @@ -17,4 +24,26 @@ protected String getQuestion(String name) { return String.format(q, name); } + @Override + protected String getRightAnswer(Map> claims) { + for(Statement st : claims.get(super.getPropertyId())) { + boolean valid = true; + for(SnakGroup sg : st.getQualifiers()) { + for(Snak s : sg.getSnaks()) { + String value = getRightAnswerEntity(s.getPropertyId().toString()); + if(value.equals("P582")) { + valid = false; + break; + } + } + if(!valid) + break; + } + if(valid) { + return processRightAnswer(st); + } + } + return null; + } + }