helperClass) {
return validation.get(helperClass);
}
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/RuleLoader.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/RuleLoader.java
index 1895af6..0348b6a 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/RuleLoader.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/RuleLoader.java
@@ -12,18 +12,13 @@
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.MessageFormatter;
/**
* Helper class to deal with of loading rule classes.
*
- * This class is instantiated only once during initialization of a
- * {@link Validator} object. Its method {@link loadRules(List) loadRules}
- * loads class names from 'rules.list' text file resource and creates an
- * instance for each one of the classes.
- *
- * The 'rules.list' resource is automatically generated during build time by
- * maven-antrun-plugin. It makes a scan over the source code folder of
- * package br.ufes.inf.nemo.ufo.protege.validation
+ * This class holds the boilerplate code involved in loading {@link Rule }
+ * subclasses and instantiating them, while generating sensible log messages.
*
* @author luciano
*/
@@ -50,7 +45,8 @@ final class RuleLoader {
}
private void logError(String message, Throwable ex) {
- log.error(String.format(message, ruleClassName), ex);
+ message = MessageFormatter.format(message, ruleClassName).getMessage();
+ log.error(message, ex);
}
private void quit(String message, Object... args) {
@@ -105,7 +101,7 @@ private void processClassName(String ruleClassName) {
if (quitException != ex) {
logError("Unexpected error on loading rule class '%s'", ex);
}
- log.error("Not adding rule class '%s' due to previous errors.", ruleClassName);
+ log.error("Not adding rule class '{}' due to previous errors.", ruleClassName);
}
}
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/helpers/ObjectGraphNode.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/helpers/ObjectGraphNode.java
index 17d028e..bf76101 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/helpers/ObjectGraphNode.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/helpers/ObjectGraphNode.java
@@ -61,9 +61,8 @@ private static Predicate is(OWLObject owlObject) {
return node -> node.owlObject.equals(objectOrIRI);
}
- @SuppressWarnings("unchecked")
private static Predicate isIn(Set iris) {
- return node -> iris.contains((IRI)node.owlObject);
+ return node -> iris.contains(node.getIRI());
}
private Set getSet(int index) {
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/EndurantSubclassRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/EndurantSubclassRule.java
index 66ac8ae..33bf8a7 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/EndurantSubclassRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/EndurantSubclassRule.java
@@ -13,7 +13,9 @@
* @author luciano
*/
@RuleInfo(
- label="Endurant specialization not instantiating EndurantType"
+ label="Endurant specializations not instantiating EndurantType",
+ description =
+ "Every Endurant specialization should instantiate EndurantType"
)
public class EndurantSubclassRule extends ClassRule {
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/KindCannotSubclassSortalRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/KindCannotSubclassSortalRule.java
index 07f0367..e3964e7 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/KindCannotSubclassSortalRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/KindCannotSubclassSortalRule.java
@@ -15,7 +15,8 @@
* @author luciano
*/
@RuleInfo(
- label = "An instance of Kind cannot specialize an instance of Sortal"
+ label = "Kinds specializing sortals",
+ description = "A kind cannot specialize a sortal"
)
public class KindCannotSubclassSortalRule extends ClassRule {
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/NonSortalRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/NonSortalRule.java
index 75593de..9af30ab 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/NonSortalRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/NonSortalRule.java
@@ -14,7 +14,7 @@
* @author luciano
*/
@RuleInfo(
- label="Not instantiable NonSortal",
+ label="Not instantiable nonsortals",
description="Every NonSortal must be specialized by a Sortal or "
+ "specialize a NonSortal which is specialized by a Sortal"
)
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyAKindRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyAKindRule.java
index 8e08126..bb3be68 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyAKindRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyAKindRule.java
@@ -13,17 +13,24 @@
* @author jeferson
*/
@RuleInfo(
- label = "Every sortal type must be a kind type or specialize exactly one kind type"
+ label = "Sortals not specializing exactly one kind",
+ description = "Every sortal must be a kind or specialize exactly one kind"
)
public class OnlyAKindRule extends ClassRule {
@Override
public void validate() {
+ // Every sortal type...
when(classNode().isInstanceOf(Sortal))
- .and(!classNode().isInstanceOf(Kind))
- .and(classNode().ancestors()
+ .and(!(
+ // ...must be a kind type...
+ classNode().isInstanceOf(Kind)
+ || // ...or...
+ // specialize exactly one kind type
+ classNode().properAncestors()
.filter(node -> node.isInstanceOf(Kind))
- .count() != 1)
+ .count() == 1
+ ))
.registerViolation();
}
}
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyPublicClassRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyPublicClassRule.java
index 141c155..ca2ea47 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyPublicClassRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/OnlyPublicClassRule.java
@@ -13,7 +13,9 @@
* @author luciano
*/
@RuleInfo(
- label="Extending internal UFO type"
+ label="Classes extending internal UFO types",
+ description="Some UFO types are not meant to be specialized by "
+ + "domain ontologies."
)
public class OnlyPublicClassRule extends ClassRule {
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/RigidityRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/RigidityRule.java
index 24a9358..3922696 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/RigidityRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/RigidityRule.java
@@ -13,7 +13,8 @@
* @author jeferson
*/
@RuleInfo(
- label="No rigid type specializing anti-rigid type"
+ label="Rigid types specializing anti-rigid ones",
+ description="Rigid types cannot specialize anti-rigid ones"
)
public class RigidityRule extends ClassRule {
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SemiRigidityRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SemiRigidityRule.java
index 06f162d..ec5efea 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SemiRigidityRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SemiRigidityRule.java
@@ -13,7 +13,8 @@
* @author jeferson
*/
@RuleInfo(
- label="No semi-rigid type specializing anti-rigid type"
+ label = "Semi-rigid types specializing anti-rigid ones",
+ description = "Semi-rigid types cannot specialize anti-rigid ones"
)
public class SemiRigidityRule extends ClassRule {
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SortalityRule.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SortalityRule.java
index 4cb35f1..eca7781 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SortalityRule.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/rules/SortalityRule.java
@@ -13,7 +13,10 @@
* @author jeferson
*/
@RuleInfo(
- label="No non-sortal type specializing sortal type"
+ label="Nonsortals specializing sortals",
+ description="Nonsortal cannot specialize sortals. Every class that "
+ + "specializes a sortal inherit from it its identity principle, "
+ + "thus becoming sortal too."
)
public class SortalityRule extends ClassRule {
@@ -23,5 +26,5 @@ public void validate() {
.and(classNode().ancestors()
.anyMatch(node -> node.isInstanceOf(Sortal)))
.registerViolation();
- }
+ }
}
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultDocument.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultDocument.java
index 0195c38..798a982 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultDocument.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultDocument.java
@@ -130,6 +130,10 @@ private void printViolationsForRule(Rule rule, List violations) {
return 1;
});
document.insertBeforeEnd(body, "" + rule.getLabel() + "
");
+ final String description = rule.getDescription();
+ if (!"".equals(description)) {
+ document.insertBeforeEnd(body, "" + description+ "
");
+ }
for (Violation violation : violations) {
OWLObject subject = violation.getSubject();
if (subject instanceof HasIRI) {
@@ -145,6 +149,7 @@ private void printIRI(HasIRI hasIRI) throws BadLocationException, IOException {
IRI iri = hasIRI.getIRI();
StringBuilder str = new StringBuilder();
str.append("");
str.append(iri.getShortForm());
diff --git a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultTextView.java b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultTextView.java
index 9cfd2c9..1d1b5c7 100644
--- a/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultTextView.java
+++ b/src/main/java/br/ufes/inf/nemo/ufo/protege/validation/ui/ValidationResultTextView.java
@@ -70,12 +70,11 @@ public void hyperlinkUpdate(HyperlinkEvent he) {
final OWLWorkspace workspace = getOWLWorkspace();
final OWLSelectionModel selection = workspace.getOWLSelectionModel();
final URL url = he.getURL();
- final IRI selectingIRI = IRI.create(url);
+ final IRI selectingIRI = IRI.create(url.getQuery());
final OWLClass entity = modelManager
.getOWLDataFactory()
.getOWLEntity(EntityType.CLASS, selectingIRI);
selection.setSelectedEntity(entity);
}
-
}
}