Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# eENVplus Thesaurus Framework Exploitation Service
# eENVplus Thesaurus Framework Exploitation Service
2 changes: 1 addition & 1 deletion TF_Exploitation_Server_core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>net.disy.eenvplus</groupId>
<artifactId>eenvplus-tf-exploitation-server-parent</artifactId>
<version>0.3.3-SNAPSHOT</version>
<version>0.4.4-SNAPSHOT</version>
</parent>

<dependencies>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//Copyright (c) 2015 by Disy Informationssysteme GmbH
package net.disy.eenvplus.tfes.core.api.exceptions;

// NOT_PUBLISHED

public class UnknownRelationException extends ServiceException {
private static final long serialVersionUID = 1L;

private final String relation;

public UnknownRelationException(String relation) {
super(null);
this.relation = relation;
}

public String getRelation() {
return relation;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//Copyright (c) 2015 by Disy Informationssysteme GmbH
package net.disy.eenvplus.tfes.core.api.modules;

import java.util.concurrent.Callable;

import net.disy.eenvplus.tfes.core.api.query.IConceptQuery;
import net.disy.eenvplus.tfes.core.api.response.IVisualizationNode;

// NOT_PUBLISHED

public interface IRelativeNeighbourhoodProviderServiceModule extends IServiceModule {

Callable<IVisualizationNode> getNeighbourhood(IConceptQuery query);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//Copyright (c) 2015 by Disy Informationssysteme GmbH
package net.disy.eenvplus.tfes.core.api.query;

// NOT_PUBLISHED

public enum QueryParameterKeys {
QUERY_DEPTH("query_depth"), RELATIONS("relations"); //$NON-NLS-1$//$NON-NLS-2$

private String key;

private QueryParameterKeys(String key) {
this.key = key;
}

public String getKey() {
return key;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//Copyright (c) 2015 by Disy Informationssysteme GmbH
package net.disy.eenvplus.tfes.core.api.response;

import java.util.Collection;

// NOT_PUBLISHED

public interface IVisualizationNode {
IRelatedConcept getElement();

Collection<IVisualizationNode> getChildren();

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import net.disy.eenvplus.tfes.core.api.capabilities.ServiceModuleDescription;
import net.disy.eenvplus.tfes.core.api.exceptions.ServiceException;
import net.disy.eenvplus.tfes.core.api.query.IConceptQuery;
import net.disy.eenvplus.tfes.core.api.query.IDescribeConceptQuery;
import net.disy.eenvplus.tfes.core.api.query.IRelativeQuery;
import net.disy.eenvplus.tfes.core.api.query.IResolveThesaurusQuery;
Expand All @@ -18,6 +19,7 @@
import net.disy.eenvplus.tfes.core.api.response.ISuggestion;
import net.disy.eenvplus.tfes.core.api.response.ISynonym;
import net.disy.eenvplus.tfes.core.api.response.ITopMostConcept;
import net.disy.eenvplus.tfes.core.api.response.IVisualizationNode;

// NOT_PUBLISHED
public interface IServiceManager {
Expand All @@ -34,6 +36,8 @@ public interface IServiceManager {

List<ServiceModuleDescription> getTopMostConceptDescriptions();

List<ServiceModuleDescription> getRelativeNeighbourhoodDescriptions();

Collection<ISuggestion> getSuggestions(ISuggestionQuery query) throws ServiceException;

IConceptDescription describeConcept(IDescribeConceptQuery capture) throws ServiceException;
Expand All @@ -47,4 +51,6 @@ public interface IServiceManager {
Collection<ITopMostConcept> getTopMostConcepts(ITopMostConceptQuery query)
throws ServiceException;

IVisualizationNode getRelativeNeighbourhood(IConceptQuery query) throws ServiceException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import net.disy.eenvplus.tfes.core.api.capabilities.ServiceModuleDescription;
import net.disy.eenvplus.tfes.core.api.exceptions.ServiceException;
import net.disy.eenvplus.tfes.core.api.query.IConceptQuery;
import net.disy.eenvplus.tfes.core.api.query.IDescribeConceptQuery;
import net.disy.eenvplus.tfes.core.api.query.IRelativeQuery;
import net.disy.eenvplus.tfes.core.api.query.IResolveThesaurusQuery;
Expand All @@ -18,8 +19,10 @@
import net.disy.eenvplus.tfes.core.api.response.ISuggestion;
import net.disy.eenvplus.tfes.core.api.response.ISynonym;
import net.disy.eenvplus.tfes.core.api.response.ITopMostConcept;
import net.disy.eenvplus.tfes.core.api.response.IVisualizationNode;
import net.disy.eenvplus.tfes.core.api.service.IServiceManager;
import net.disy.eenvplus.tfes.core.module.DescribeConceptModulesManager;
import net.disy.eenvplus.tfes.core.module.RelatedNeighbourhoodModulesManager;
import net.disy.eenvplus.tfes.core.module.RelativeModulesManager;
import net.disy.eenvplus.tfes.core.module.ResolveThesaurusModulesManager;
import net.disy.eenvplus.tfes.core.module.SuggestionModulesManager;
Expand All @@ -45,6 +48,9 @@ public class ServiceManager implements IServiceManager {
@Autowired
private RelativeModulesManager relativeModulesManager;

@Autowired
private RelatedNeighbourhoodModulesManager relatedNeighbourhoodModulesManager;

@Autowired
private SynonymModulesManager synonymModulesManager;

Expand Down Expand Up @@ -113,4 +119,14 @@ public Collection<ITopMostConcept> getTopMostConcepts(ITopMostConceptQuery query
return topMostConceptModulesManager.getTopMostConcepts(query);
}

@Override
public List<ServiceModuleDescription> getRelativeNeighbourhoodDescriptions() {
return relatedNeighbourhoodModulesManager.getServiceModuleDescription();
}

@Override
public IVisualizationNode getRelativeNeighbourhood(IConceptQuery query) throws ServiceException {
return relatedNeighbourhoodModulesManager.getRelativeNeighbourhood(query);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
package net.disy.eenvplus.tfes.core.module;

import static net.disy.eenvplus.tfes.core.api.response.EmptyConceptDescription.EMPTY_CONCEPT;
import static net.disy.eenvplus.tfes.core.util.CollectionUtilities.first;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
Expand Down Expand Up @@ -44,11 +44,7 @@ public IConceptDescription getConceptDescription(IDescribeConceptQuery query)
throws ServiceException {
Set<Future<IConceptDescription>> futures = submitQuery(query);
Collection<IConceptDescription> results = retrieveResults(futures);
Iterator<IConceptDescription> result = results.iterator();
if (result.hasNext()) {
return result.next();
}
return EMPTY_CONCEPT;
return first(results, EMPTY_CONCEPT);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
//Copyright (c) 2015 by Disy Informationssysteme GmbH
package net.disy.eenvplus.tfes.core.module;

import static net.disy.eenvplus.tfes.core.util.CollectionUtilities.first;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;

import net.disy.eenvplus.tfes.core.api.exceptions.ServiceException;
import net.disy.eenvplus.tfes.core.api.modules.IRelativeNeighbourhoodProviderServiceModule;
import net.disy.eenvplus.tfes.core.api.query.IConceptQuery;
import net.disy.eenvplus.tfes.core.api.response.IVisualizationNode;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

// NOT_PUBLISHED
@Service
public class RelatedNeighbourhoodModulesManager
extends
AbstractModuleManager<IRelativeNeighbourhoodProviderServiceModule, IConceptQuery, IVisualizationNode> {

@Autowired(required = false)
List<IRelativeNeighbourhoodProviderServiceModule> modules = new ArrayList<>();

@Override
protected List<IRelativeNeighbourhoodProviderServiceModule> getServiceModules() {
return modules;
}

@Override
protected Callable<IVisualizationNode> createCallable(
IConceptQuery query,
IRelativeNeighbourhoodProviderServiceModule module) {
return module.getNeighbourhood(query);
}

public IVisualizationNode getRelativeNeighbourhood(IConceptQuery query) throws ServiceException {
Set<Future<IVisualizationNode>> futures = submitQuery(query);
Collection<IVisualizationNode> results = retrieveResults(futures);
return first(results, null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
package net.disy.eenvplus.tfes.core.util;

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

Expand Down Expand Up @@ -30,4 +31,12 @@ public static <E> List<E> limitResults(List<E> list, int maxIndex) {
return list;
}

public static <E> E first(Collection<? extends E> collection, E alternative) {
Iterator<? extends E> iterator = collection.iterator();
if (iterator.hasNext()) {
return iterator.next();
}
return alternative;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// NOT_PUBLISHED

public class IConceptQueryMatcher {
public static Matcher<IConceptQuery> hasKeyword(Matcher<String> expected) {
public static Matcher<IConceptQuery> hasConcept(Matcher<String> expected) {
return new FeatureMatcher<IConceptQuery, String>(expected, "Concept", "Concept") { //$NON-NLS-1$ //$NON-NLS-2$

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.is;

import java.util.Map;
Expand Down Expand Up @@ -66,20 +67,27 @@ protected Iterable<String> featureValueOf(IServiceQuery query) {
};
}

public static Matcher<? super IServiceQuery> hasExtraParameters(
Matcher<Map<? extends String, ? extends Object>> expected) {
return new FeatureMatcher<IServiceQuery, Map<String, ? extends Object>>(
public static <V> Matcher<? super IServiceQuery> hasExtraParameters(
Matcher<Map<? extends String, ? extends V>> expected) {
return new FeatureMatcher<IServiceQuery, Map<String, ? extends V>>(
expected,
"Extra Parameters", "Extra Parameters") { //$NON-NLS-1$ //$NON-NLS-2$

@SuppressWarnings("unchecked")
@Override
protected Map<String, ? extends Object> featureValueOf(IServiceQuery query) {
return query.getExtraParameters();
protected Map<String, ? extends V> featureValueOf(IServiceQuery query) {
return (Map<String, V>) query.getExtraParameters();
}

};
}

public static <V> Matcher<? super IServiceQuery> hasExtraParameters(
QueryParameterKeys key,
Matcher<V> expectedValue) {
return hasExtraParameters(hasEntry(is(key.getKey()), expectedValue));
}

public static Matcher<? super IServiceQuery> isEmptyQuery() {
return allOf(
hasLanguages(NO_ENTRIES),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package net.disy.eenvplus.tfes.core.api.response;

public class IRelatedConceptBuilder {

private String conceptUri;
private String sourceLabel;
private String language;
private String label;
private String relationUri;
private String relationLabel;

private IRelatedConceptBuilder(String conceptUri) {
this.conceptUri = conceptUri;
}

public static IRelatedConceptBuilder forConceptUri(String conceptUri) {
return new IRelatedConceptBuilder(conceptUri);
}

public IRelatedConceptBuilder withLabel(String label) {
this.label = label;
return this;
}

public IRelatedConceptBuilder withLanguage(String language) {
this.language = language;
return this;
}

public IRelatedConceptBuilder withRelationUri(String relationUri) {
this.relationUri = relationUri;
return this;
}

public IRelatedConceptBuilder withRelationLabel(String relationLabel) {
this.relationLabel = relationLabel;
return this;
}

public IRelatedConceptBuilder withSourceLabel(String sourceLabel) {
this.sourceLabel = sourceLabel;
return this;
}

public IRelatedConcept build() {
return new IRelatedConcept() {

@Override
public String getSourceLabel() {
return sourceLabel;
}

@Override
public String getLanguage() {
return language;
}

@Override
public String getLabel() {
return label;
}

@Override
public String getConceptUri() {
return conceptUri;
}

@Override
public String getRelationUri() {
return relationUri;
}

@Override
public String getRelationLabel() {
return relationLabel;
}
};
}

}
Loading