Author: rwesten
Date: Tue Apr 29 09:43:14 2014
New Revision: 1590930
URL: http://svn.apache.org/r1590930
Log:
Implementation for STANBOL-1334 in the 0.12 branch
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/core/pom.xml
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceConstants.java
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineConfig.java
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/EntityDereferenceEngine.java
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/test/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineTest.java
stanbol/branches/release-0.12/enhancement-engines/dereference/entityhub/src/main/java/org/apache/stanbol/enhancer/engines/dereference/entityhub/EntityhubDereferenceEngine.java
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/core/pom.xml
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancement-engines/dereference/core/pom.xml?rev=1590930&r1=1590929&r2=1590930&view=diff
==============================================================================
--- stanbol/branches/release-0.12/enhancement-engines/dereference/core/pom.xml
(original)
+++ stanbol/branches/release-0.12/enhancement-engines/dereference/core/pom.xml
Tue Apr 29 09:43:14 2014
@@ -82,6 +82,11 @@
<artifactId>org.apache.stanbol.commons.stanboltools.offline</artifactId>
<version>0.9.0-incubating</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.stanbol</groupId>
+
<artifactId>org.apache.stanbol.commons.namespaceprefix.service</artifactId>
+ <version>0.11.0</version>
+ </dependency>
<dependency>
<groupId>org.apache.stanbol</groupId>
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceConstants.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceConstants.java?rev=1590930&r1=1590929&r2=1590930&view=diff
==============================================================================
---
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceConstants.java
(original)
+++
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceConstants.java
Tue Apr 29 09:43:14 2014
@@ -19,6 +19,7 @@ package org.apache.stanbol.enhancer.engi
import org.apache.clerezza.rdf.core.Language;
import org.apache.clerezza.rdf.core.PlainLiteral;
import org.apache.clerezza.rdf.core.Triple;
+import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
/**
* Define configuration parameters for Dereference engines
@@ -63,6 +64,14 @@ public interface DereferenceConstants {
boolean DEFAULT_FILTER_ACCEPT_LANGUAGES = true;
/**
+ * Property used to configure the properties linking entities. If not
present
+ * the {@link Properties#ENHANCER_ENTITY_REFERENCE} will be used. If
present
+ * this property is not automatically added.<p>
+ * @since 0.12.1 (<a
href="https://issues.apache.org/jira/browse/STANBOL-1334">STANBOL-1334</a>)
+ */
+ String ENTITY_REFERENCES = "enhancer.engines.dereference.references";
+
+ /**
* Property used to configure the fields that should be dereferenced.<p>
* DereferenceEngines need to support a list of URIs but may also support
more
* complex syntax (such as the Entityhub FiedMapping). However parsing a
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineConfig.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineConfig.java?rev=1590930&r1=1590929&r2=1590930&view=diff
==============================================================================
---
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineConfig.java
(original)
+++
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineConfig.java
Tue Apr 29 09:43:14 2014
@@ -16,7 +16,8 @@
*/
package org.apache.stanbol.enhancer.engines.dereference;
-import static
org.apache.stanbol.enhancer.engines.dereference.DereferenceConstants.NO_LANGUAGE_KEY;
+import static
org.apache.stanbol.commons.namespaceprefix.NamespaceMappingUtils.getConfiguredUri;
+import static
org.apache.stanbol.enhancer.servicesapi.rdf.Properties.ENHANCER_ENTITY_REFERENCE;
import java.util.ArrayList;
import java.util.Arrays;
@@ -29,40 +30,52 @@ import java.util.List;
import java.util.Locale;
import java.util.Set;
+import org.apache.clerezza.rdf.core.UriRef;
import org.apache.commons.lang.StringUtils;
+import org.apache.stanbol.commons.namespaceprefix.NamespacePrefixService;
import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine;
+import org.apache.stanbol.enhancer.servicesapi.rdf.Properties;
import org.osgi.framework.Constants;
import org.osgi.service.cm.ConfigurationException;
public class DereferenceEngineConfig implements DereferenceConstants {
-
+ private final NamespacePrefixService nsPrefixService;
private final Dictionary<String,Object> config;
-
+ private String ldpath;
+ private List<String> dereferenced;
+ private List<UriRef> entityReferences;
/**
* Creates a DereferenceEngine configuration based on a Dictionary.
Typically
* the dictionary will contain keys as defined by {@link
DereferenceConstants}
- * and {@link EnhancementEngine}
+ * and {@link EnhancementEngine}. The created instance will not have
support
+ * for the use of QNAMES for {@link #getEntityReferences()}
* @param config the config - typically as parsed in the activate method of
- * an OSGI component.
+ * an OSGI component. Changes to the parsed dictionary will not be
reflected
+ * @throws ConfigurationException if the parsed config is not valid
+ * @deprecated use {@link #DereferenceEngineConfig(Dictionary,
NamespacePrefixService)}
+ * with parsing <code>null</code> as 2nd parameter instead.
*/
+ @Deprecated
public DereferenceEngineConfig(Dictionary<String,Object> config) throws
ConfigurationException {
- this.config = config;
- validateRequired(config);
+ this(config,null);
}
/**
- * Constructor that parses the config (ATM only used by unit tests)
- * @param name
- * @param filterContentLang
- * @param filterAcceptLang
- * @throws ConfigurationException
- */
- protected DereferenceEngineConfig(String name, boolean filterContentLang,
boolean filterAcceptLang)
- throws ConfigurationException {
- config = new Hashtable<String,Object>();
- config.put(EnhancementEngine.PROPERTY_NAME, name);
- config.put(FILTER_CONTENT_LANGUAGES, filterContentLang);
- config.put(FILTER_ACCEPT_LANGUAGES, filterAcceptLang);
+ * Creates a DereferenceEngine configuration based on a Dictionary.
Typically
+ * the dictionary will contain keys as defined by {@link
DereferenceConstants}
+ * and {@link EnhancementEngine}
+ * @param config the config - typically as parsed in the activate method of
+ * an OSGI component.
+ * @param nsPrefixService the {@link NamespacePrefixService} used to
resolve
+ * <code>{ns}:{local-name}</code> like configurations for the configured
+ * {@link #getEntityReferences()} properties. If <code>null</code>
+ * using qnames for the entity references will cause a
+ * {@link ConfigurationException}
+ * @throws ConfigurationException if the parsed config is not valid
+ */
+ public DereferenceEngineConfig(Dictionary<String,Object> config,
NamespacePrefixService nsPrefixService) throws ConfigurationException {
+ this.nsPrefixService = nsPrefixService;
+ this.config = config;
validateRequired(config);
}
@@ -85,29 +98,23 @@ public class DereferenceEngineConfig imp
return value == null ? DEFAULT_FILTER_ACCEPT_LANGUAGES :
Boolean.parseBoolean(value.toString());
}
-
+ /**
+ * Validates the parsed configuration.
+ * @param config the configuration to validate
+ * @throws ConfigurationException for the first property with an invalid
+ * configuration. (1) if no name is set for the engine (2) the configured
+ * dereferenced fields are invalid (3) the configured LDPath program is
+ * invalid (4) the configured entity references are invalid
+ */
private void validateRequired(Dictionary<String,Object> config) throws
ConfigurationException {
Object value = config.get(EnhancementEngine.PROPERTY_NAME);
if(value == null || StringUtils.isBlank(value.toString())){
throw new ConfigurationException(EnhancementEngine.PROPERTY_NAME,
"The EnhancementEngine name MUST NOT be NULL nor empty!");
}
- value = config.get(DEREFERENCE_ENTITIES_FIELDS);
- if(value != null && !(value instanceof String || value instanceof
String[] ||
- value instanceof Collection<?>)){
- throw new ConfigurationException(DEREFERENCE_ENTITIES_FIELDS,
- "Dereference Entities Fields MUST BE parsed as String[],
Collection<String> or "
- + "String (single value). The actual value '"+value+"'(type:
'"+value.getClass()
- + "') is NOT supported");
- }
- value = config.get(DEREFERENCE_ENTITIES_LDPATH);
- if(value != null && !(value instanceof String || value instanceof
String[] ||
- value instanceof Collection<?>)){
- throw new ConfigurationException(DEREFERENCE_ENTITIES_LDPATH,
- "Dereference LDPath statements MUST BE parsed as String,
String[] or "
- + "Collection<String>. The actual value '"+value+"'(type:
'"+value.getClass()
- + "') is NOT supported");
- }
+ this.dereferenced = parseDereferenceFields();
+ this.ldpath = parseLdPathProgram();
+ this.entityReferences = parseEntityReferences();
}
/**
@@ -131,6 +138,74 @@ public class DereferenceEngineConfig imp
}
/**
+ * Getter for the list of properties used to refer Entities as configured
+ * by the {@link DereferenceConstants#ENTITY_REFERENCES} property. <p>
+ * @return the configured entity references or a singleton list containing
+ * {@link Properties#ENHANCER_ENTITY_REFERENCE} if no custom configuration
+ * is present
+ * @since 0.12.1 (<a
href="https://issues.apache.org/jira/browse/STANBOL-1334">STANBOL-1334</a>)
+ */
+ public List<UriRef> getEntityReferences() {
+ return entityReferences;
+ }
+ /**
+ * Parses the list of properties used to reference Entities from the
+ * {@link DereferenceConstants#ENTITY_REFERENCES} property
+ * @return the list of properties used to reference entities. If none are
+ * present this returns a singleton list containing
+ * {@link Properties#ENHANCER_ENTITY_REFERENCE}
+ * @since 0.12.1 (<a
href="https://issues.apache.org/jira/browse/STANBOL-1334">STANBOL-1334</a>)
+ */
+ public List<UriRef> parseEntityReferences() throws ConfigurationException {
+ Object value = config.get(ENTITY_REFERENCES);
+ final List<String> fields;
+ if(value instanceof String[]){
+ fields = Arrays.asList((String[])value);
+ } else if(value instanceof Collection<?>){
+ fields = new ArrayList<String>(((Collection<?>)value).size());
+ for(Object field : (Collection<?>)value){
+ if(field != null){
+ fields.add(field.toString());
+ }
+ }
+ } else if(value instanceof String){
+ fields = Collections.singletonList((String)value);
+ } else if(value != null){ //unsupported type
+ throw new ConfigurationException(ENTITY_REFERENCES,
+ "Entity References MUST BE parsed as String[],
Collection<String> or "
+ + "String (single value). The actual value '"+value+"'(type:
'"+value.getClass()
+ + "') is NOT supported");
+ } else { //not specified return the default
+ return Collections.singletonList(ENHANCER_ENTITY_REFERENCE);
+ }
+ //convert configured fields (incl. 'ns:local-name' configurations) to
+ //full UriRef instances
+ List<UriRef> references = new ArrayList<UriRef>(fields.size());
+ for(String field : fields){
+ if(!StringUtils.isBlank(field)){
+ references.add(new UriRef(getConfiguredUri(nsPrefixService,
+ ENTITY_REFERENCES, field.trim())));
+ }
+ }
+ if(references.isEmpty()){ //no valid configuration left ... return the
default
+ return Collections.singletonList(ENHANCER_ENTITY_REFERENCE);
+ } else {
+ return references;
+ }
+ }
+ /**
+ * Getter for the list of dereferenced fields as configured by the
+ * {@link DereferenceConstants#DEREFERENCE_ENTITIES_FIELDS} property.<p>
+ * <i>NOTE</i>: this is the list of configured values. This may still
include
+ * '<code>{ns}:{local-name}</code>' like values or special syntax supported
+ * by the actual {@link EntityDereferencer} implementation.
+ * @return the list of configured dereferenced fields.
+ */
+ public List<String> getDereferenceFields(){
+ return dereferenced;
+ }
+
+ /**
* Parsed the {@link DereferenceConstants#DEREFERENCE_ENTITIES_FIELDS}
* config from the parsed Dictionary regardless if it is defined as
* <code>String[]</code>, <code>Collection<String></code> or
@@ -141,7 +216,7 @@ public class DereferenceEngineConfig imp
* that
* @return the {@link List} with the unprocessed dereference fields as list
*/
- public List<String> getDereferenceFields(){
+ private List<String> parseDereferenceFields() throws
ConfigurationException {
Object value = config.get(DEREFERENCE_ENTITIES_FIELDS);
final List<String> fields;
if(value instanceof String[]){
@@ -157,12 +232,25 @@ public class DereferenceEngineConfig imp
}
} else if(value instanceof String){
fields = Collections.singletonList((String)value);
- } else { //value == null or of unsupported type
+ } else if(value != null){
+ throw new ConfigurationException(DEREFERENCE_ENTITIES_FIELDS,
+ "Dereference Entities Fields MUST BE parsed as String[],
Collection<String> or "
+ + "String (single value). The actual value '"+value+"'(type:
'"+value.getClass()
+ + "') is NOT supported");
+ } else {//value == null
fields = Collections.emptyList();
}
return fields;
}
/**
+ * Getter for the LDPath program as configured by the
+ * {@link DereferenceConstants#DEREFERENCE_ENTITIES_LDPATH} property.
+ * @return the LDPath property
+ */
+ public String getLdPathProgram(){
+ return ldpath;
+ }
+ /**
* Parses the LdPath program from the value of the
* {@link DereferenceConstants#DEREFERENCE_ENTITIES_LDPATH} property. <p>
* This supports <code>String</code> (the program as a single String),
@@ -172,7 +260,7 @@ public class DereferenceEngineConfig imp
* done by the LdPath repository used by the dereferencer.
* @return the unparsed LDPath program as String
*/
- public String getLdPathProgram(){
+ private String parseLdPathProgram() throws ConfigurationException {
Object value = config.get(DEREFERENCE_ENTITIES_LDPATH);
if(value == null){
return null;
@@ -203,13 +291,20 @@ public class DereferenceEngineConfig imp
sb.append(line);
}
}
- } //else unsupported type - ignore
+ } else if(value != null) {//unsupported type
+ throw new ConfigurationException(DEREFERENCE_ENTITIES_LDPATH,
+ "Dereference LDPath statements MUST BE parsed as String,
String[] or "
+ + "Collection<String>. The actual value '"+value+"'(type:
'"+value.getClass()
+ + "') is NOT supported");
+ }
//if first == false we we have not found any non blank line -> return
null!
return !first ? sb.toString() : null;
}
/**
- * The dictionary holding the config
- * @return the dictionary holding the config
+ * The dictionary parsed to this configuration object. NOTE: that changes
+ * to this dictionary will not be reflected by the getters of this class.
+ * @return the dictionary holding the parsed configuration (expected to
+ * be used as read-only).
*/
public Dictionary<String,Object> getDict(){
return config;
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/EntityDereferenceEngine.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/EntityDereferenceEngine.java?rev=1590930&r1=1590929&r2=1590930&view=diff
==============================================================================
---
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/EntityDereferenceEngine.java
(original)
+++
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/main/java/org/apache/stanbol/enhancer/engines/dereference/EntityDereferenceEngine.java
Tue Apr 29 09:43:14 2014
@@ -251,20 +251,24 @@ public class EntityDereferenceEngine imp
//parse the referenced entities from the graph
//(2) read all Entities we need to dereference from the parsed
contentItem
Set<UriRef> checked = new HashSet<UriRef>();
- Iterator<Triple> entityReferences = metadata.filter(null,
ENHANCER_ENTITY_REFERENCE, null);
- while(entityReferences.hasNext()){
- Triple triple = entityReferences.next();
- Resource entityReference = triple.getObject();
- if((entityReference instanceof UriRef) && //only URIs
- checked.add((UriRef)entityReference) && //do
not check a URI twice
- chekcFallbackMode((UriRef)entityReference,
metadata) && //fallback mode
- checkURI((UriRef)entityReference)){ //URI
prefixes and patterns
- boolean added =
referencedEntities.add((UriRef)entityReference);
- if(added && log.isTraceEnabled()){
- log.trace(" ... schedule Entity {}", entityReference);
+ for(UriRef referenceProperty : config.getEntityReferences()){
+ Iterator<Triple> entityReferences = metadata.filter(null,
referenceProperty, null);
+ while(entityReferences.hasNext()){
+ Triple triple = entityReferences.next();
+ Resource entityReference = triple.getObject();
+ if((entityReference instanceof UriRef) && //only URIs
+ checked.add((UriRef)entityReference) && //do
not check a URI twice
+ chekcFallbackMode((UriRef)entityReference,
metadata) && //fallback mode
+ checkURI((UriRef)entityReference)){ //URI
prefixes and patterns
+ boolean added =
referencedEntities.add((UriRef)entityReference);
+ if(added && log.isTraceEnabled()){
+ log.trace(" ... schedule Entity {}
(referenced-by: {})",
+ entityReference, referenceProperty);
+ }
+ } else if(log.isTraceEnabled()){
+ log.trace(" ... ignore Entity {} (referenced-by: {})",
+ entityReferences, referenceProperty);
}
- } else if(log.isTraceEnabled()){
- log.trace(" ... ignore Entity {}",entityReferences);
}
}
} finally {
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/test/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineTest.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/test/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineTest.java?rev=1590930&r1=1590929&r2=1590930&view=diff
==============================================================================
---
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/test/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineTest.java
(original)
+++
stanbol/branches/release-0.12/enhancement-engines/dereference/core/src/test/java/org/apache/stanbol/enhancer/engines/dereference/DereferenceEngineTest.java
Tue Apr 29 09:43:14 2014
@@ -16,6 +16,9 @@
*/
package org.apache.stanbol.enhancer.engines.dereference;
+import static
org.apache.stanbol.enhancer.engines.dereference.DereferenceConstants.ENTITY_REFERENCES;
+import static
org.apache.stanbol.enhancer.engines.dereference.DereferenceConstants.FILTER_ACCEPT_LANGUAGES;
+import static
org.apache.stanbol.enhancer.engines.dereference.DereferenceConstants.FILTER_CONTENT_LANGUAGES;
import static
org.apache.stanbol.enhancer.servicesapi.rdf.OntologicalClasses.SKOS_CONCEPT;
import static
org.apache.stanbol.enhancer.servicesapi.rdf.Properties.ENHANCER_ENTITY_REFERENCE;
import static
org.apache.stanbol.enhancer.servicesapi.rdf.Properties.RDFS_LABEL;
@@ -23,6 +26,8 @@ import static org.apache.stanbol.enhance
import java.io.IOException;
import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.Random;
import java.util.concurrent.ExecutorService;
@@ -73,6 +78,9 @@ public class DereferenceEngineTest {
public static final UriRef NAME = new UriRef(NamespaceEnum.rdfs+"label");
public static final UriRef TYPE = new UriRef(NamespaceEnum.rdf+"type");
public static final UriRef REDIRECT = new
UriRef(NamespaceEnum.rdfs+"seeAlso");
+
+ public static final UriRef OTHER_ENTITY_REFERENCE = new UriRef(
+
"http://www.example.org/stanbol/enhancer/dereference/test#other-entity-reference");
private static final ContentItemFactory ciFactory =
InMemoryContentItemFactory.getInstance();
@@ -84,6 +92,7 @@ public class DereferenceEngineTest {
private static final int NUM_ENTITIES = 1000;
public static final float PERCENTAGE_LINKED = 0.3f;
+ public static final float PERCENTAGE_LINKED_OTHER = 0.2f;
public static final float PERCENTAGE_PRESENT = 0.9f;
@BeforeClass
@@ -109,16 +118,25 @@ public class DereferenceEngineTest {
log.info(" ... created {} Entities",numEntities);
testMetadata = new IndexedMGraph();
int numLinks = 0;
+ int numOtherLinks = 0;
for(int i = 0; i < NUM_ENTITIES ; i++){
- if(random.nextFloat() < PERCENTAGE_LINKED){
+ float r = random.nextFloat();
+ if(r < PERCENTAGE_LINKED){
UriRef enhancementUri = new UriRef("urn:test:enhancement"+i);
UriRef entityUri = new UriRef("urn:test:entity"+i);
//we do not need any other triple for testing in the
contentItem
testMetadata.add(new TripleImpl(enhancementUri,
ENHANCER_ENTITY_REFERENCE, entityUri));
numLinks++;
+ } else if((r-PERCENTAGE_LINKED) < PERCENTAGE_LINKED_OTHER){
+ UriRef enhancementUri = new UriRef("urn:test:enhancement"+i);
+ UriRef entityUri = new UriRef("urn:test:entity"+i);
+ //we do not need any other triple for testing in the
contentItem
+ testMetadata.add(new TripleImpl(enhancementUri,
OTHER_ENTITY_REFERENCE, entityUri));
+ numOtherLinks++;
}
}
- log.info(" ... created {} Entity references ", numLinks);
+ log.info("> created {} Entity references and {} references using an
alternative proeprty ",
+ numLinks, numOtherLinks);
}
@@ -140,8 +158,12 @@ public class DereferenceEngineTest {
return false;
}
};
+ Dictionary<String,Object> dict = new Hashtable<String,Object>();
+ dict.put(EnhancementEngine.PROPERTY_NAME, "online");
+ dict.put(FILTER_CONTENT_LANGUAGES, false);
+ dict.put(FILTER_ACCEPT_LANGUAGES, false);
EntityDereferenceEngine engine = new
EntityDereferenceEngine(onlineDereferencer,
- new DereferenceEngineConfig("online", false, false));
+ new DereferenceEngineConfig(dict, null));
//engine in online mode
Assert.assertNotEquals(engine.canEnhance(ci),
EnhancementEngine.CANNOT_ENHANCE);
//set engine in offline mode
@@ -152,31 +174,81 @@ public class DereferenceEngineTest {
@Test
public void testSyncDereferencing() throws Exception {
ContentItem ci = getContentItem("urn:test:testSyncDereferencing");
+ Dictionary<String,Object> dict = new Hashtable<String,Object>();
+ dict.put(EnhancementEngine.PROPERTY_NAME, "sync");
+ dict.put(FILTER_CONTENT_LANGUAGES, false);
+ dict.put(FILTER_ACCEPT_LANGUAGES, false);
EntityDereferenceEngine engine = new
EntityDereferenceEngine(syncDereferencer,
- new DereferenceEngineConfig("sync", false, false));
+ new DereferenceEngineConfig(dict, null));
Assert.assertNotEquals(engine.canEnhance(ci),
EnhancementEngine.CANNOT_ENHANCE);
engine.computeEnhancements(ci);
- validateDereferencedEntities(ci.getMetadata());
+ validateDereferencedEntities(ci.getMetadata(),
ENHANCER_ENTITY_REFERENCE);
}
@Test
public void testAsyncDereferencing() throws Exception {
ContentItem ci = getContentItem("urn:test:testSyncDereferencing");
+ Dictionary<String,Object> dict = new Hashtable<String,Object>();
+ dict.put(EnhancementEngine.PROPERTY_NAME, "async");
+ dict.put(FILTER_CONTENT_LANGUAGES, false);
+ dict.put(FILTER_ACCEPT_LANGUAGES, false);
EntityDereferenceEngine engine = new
EntityDereferenceEngine(asyncDereferencer,
- new DereferenceEngineConfig("async", false, false));
+ new DereferenceEngineConfig(dict,null));
Assert.assertNotEquals(engine.canEnhance(ci),
EnhancementEngine.CANNOT_ENHANCE);
engine.computeEnhancements(ci);
- validateDereferencedEntities(ci.getMetadata());
+ validateDereferencedEntities(ci.getMetadata(),
ENHANCER_ENTITY_REFERENCE);
}
- private void validateDereferencedEntities(TripleCollection metadata) {
- Iterator<Triple> referenced = metadata.filter(null,
ENHANCER_ENTITY_REFERENCE, null);
+ /**
+ * Test for <a
href="https://issues.apache.org/jira/browse/STANBOL-1334">STANBOL-1334</a>
+ * @throws Exception
+ */
+ @Test
+ public void testAsyncOtherEntityReferenceDereferencing() throws Exception {
+ ContentItem ci = getContentItem("urn:test:testSyncDereferencing");
+ Dictionary<String,Object> dict = new Hashtable<String,Object>();
+ dict.put(EnhancementEngine.PROPERTY_NAME, "async");
+ dict.put(FILTER_CONTENT_LANGUAGES, false);
+ dict.put(FILTER_ACCEPT_LANGUAGES, false);
+ dict.put(ENTITY_REFERENCES,OTHER_ENTITY_REFERENCE.getUnicodeString());
+ DereferenceEngineConfig config = new
DereferenceEngineConfig(dict,null);
+ EntityDereferenceEngine engine = new
EntityDereferenceEngine(asyncDereferencer, config);
+ Assert.assertNotEquals(engine.canEnhance(ci),
EnhancementEngine.CANNOT_ENHANCE);
+ engine.computeEnhancements(ci);
+ validateDereferencedEntities(ci.getMetadata(), OTHER_ENTITY_REFERENCE);
+ }
+
+ /**
+ * Test for <a
href="https://issues.apache.org/jira/browse/STANBOL-1334">STANBOL-1334</a>
+ * @throws Exception
+ */
+ @Test
+ public void testAsyncMultipleEntityReferenceDereferencing() throws
Exception {
+ ContentItem ci = getContentItem("urn:test:testSyncDereferencing");
+ Dictionary<String,Object> dict = new Hashtable<String,Object>();
+ dict.put(EnhancementEngine.PROPERTY_NAME, "async");
+ dict.put(FILTER_CONTENT_LANGUAGES, false);
+ dict.put(FILTER_ACCEPT_LANGUAGES, false);
+ dict.put(ENTITY_REFERENCES, new String[]{
+ OTHER_ENTITY_REFERENCE.getUnicodeString(),
+ ENHANCER_ENTITY_REFERENCE.getUnicodeString()});
+ DereferenceEngineConfig config = new
DereferenceEngineConfig(dict,null);
+ EntityDereferenceEngine engine = new
EntityDereferenceEngine(asyncDereferencer, config);
+ Assert.assertNotEquals(engine.canEnhance(ci),
EnhancementEngine.CANNOT_ENHANCE);
+ engine.computeEnhancements(ci);
+ validateDereferencedEntities(ci.getMetadata(), OTHER_ENTITY_REFERENCE,
ENHANCER_ENTITY_REFERENCE);
+ }
+
+ private void validateDereferencedEntities(TripleCollection metadata,
UriRef...entityReferenceFields) {
MGraph expected = new IndexedMGraph();
- while(referenced.hasNext()){
- UriRef entity = (UriRef)referenced.next().getObject();
- Iterator<Triple> entityTriples = testData.filter(entity, null,
null);
- while(entityTriples.hasNext()){
- expected.add(entityTriples.next());
+ for(UriRef entityReferenceField : entityReferenceFields){
+ Iterator<Triple> referenced = metadata.filter(null,
entityReferenceField, null);
+ while(referenced.hasNext()){
+ UriRef entity = (UriRef)referenced.next().getObject();
+ Iterator<Triple> entityTriples = testData.filter(entity, null,
null);
+ while(entityTriples.hasNext()){
+ expected.add(entityTriples.next());
+ }
}
}
MGraph notExpected = new IndexedMGraph(testData);
Modified:
stanbol/branches/release-0.12/enhancement-engines/dereference/entityhub/src/main/java/org/apache/stanbol/enhancer/engines/dereference/entityhub/EntityhubDereferenceEngine.java
URL:
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancement-engines/dereference/entityhub/src/main/java/org/apache/stanbol/enhancer/engines/dereference/entityhub/EntityhubDereferenceEngine.java?rev=1590930&r1=1590929&r2=1590930&view=diff
==============================================================================
---
stanbol/branches/release-0.12/enhancement-engines/dereference/entityhub/src/main/java/org/apache/stanbol/enhancer/engines/dereference/entityhub/EntityhubDereferenceEngine.java
(original)
+++
stanbol/branches/release-0.12/enhancement-engines/dereference/entityhub/src/main/java/org/apache/stanbol/enhancer/engines/dereference/entityhub/EntityhubDereferenceEngine.java
Tue Apr 29 09:43:14 2014
@@ -155,7 +155,7 @@ public class EntityhubDereferenceEngine
bundleContext = ctx.getBundleContext();
log.info("> activate {}",getClass().getSimpleName());
//get the metadata later set to the enhancement engine
- DereferenceEngineConfig engineConfig = new
DereferenceEngineConfig(properties);
+ DereferenceEngineConfig engineConfig = new
DereferenceEngineConfig(properties, prefixService);
log.debug(" - engineName: {}", engineConfig.getEngineName());
//parse the Entityhub Site used for dereferencing
Object value = properties.get(SITE_ID);