--- a/src/main/java/net/timbusproject/dpes/pi/kbserver/beans/QueryBean.java
+++ b/src/main/java/net/timbusproject/dpes/pi/kbserver/beans/QueryBean.java
@@ -18,7 +18,9 @@
package net.timbusproject.dpes.pi.kbserver.beans;
import ch.lambdaj.function.convert.Converter;
+
import com.hp.hpl.jena.query.QuerySolution;
+
import org.apache.commons.lang3.StringUtils;
import org.sba_research.timbus.kb.FormatMigrationOption;
import org.sba_research.timbus.kb.PackageKnowledgeBase;
@@ -36,6 +38,7 @@
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
+
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -58,7 +61,9 @@
private static final String tplFormatInfo = "Format: %s\nPronom IDs: %s\n\n";
private static final String tplToolInfo = "Tool: %s\n\nActions:\n %s\n\nGenres:\n %s\n\n\n";
private static final String tplToolReplacement = "%s (using %s)\n\nsupports:\n%s\n\ngenres:\n%s\n\n\n";
- private static final String tplPackageReplacement = "%s (both provide virtual Package(s) %s)\n";
+
+ private static final String tplPackageReplacementBoth = "%s (both provide virtual Package(s) %s)\n";
+ private static final String tplPackageReplacement = "%s (also provides virtual Package(s) %s)\n";
private static final String tplPackageInfo= "%s provides Package(s) \n%s\n";
private static final String tplVirtualPackageInfo= "%s provided by Package(s) \n%s\n";
@@ -165,28 +170,50 @@
}
public void packageReplacement() {
- action = "packageReplacement";
- List<String> results = filter(equalToIgnoringCase(queryString), packageNames);
- if (results.size() < 1)
- notify("Unable to find package: " + queryString);
- else if (results.size() > 1)
- notify("Multiple packages found: " + queryString);
- else {
- try {
- String packageName = results.get(0);
- queryResult = formatPackageAlternatives(packageKnowledgeBase.getAlternativePackages(results.get(0)), packageName);
- } catch (Exception e) {
- handleError(e);
- }
- }
+ action = "packageReplacement";
+ if (queryString.contains(" provides ")) {
+ String[] queryParts = queryString.split(" +");
+ if (queryParts.length==3 && queryParts[1].trim().equalsIgnoreCase("provides")) {
+ String packageName = queryParts[0].trim();
+ String virtualPackageName = queryParts[2].trim();
+ queryResult = formatPackageAlternatives(packageKnowledgeBase.getAlternativePackages(packageName, virtualPackageName));
+// queryResult = packageKnowledgeBase.getAlternativePackages(packageName, virtualPackageName);
+ } else {
+ notify("Invalid query '" + queryString + "'; allowed format: <packageName> provides <virtualPackageName>.");
+ }
+ } else {
+ List<String> results = filter(equalToIgnoringCase(queryString), packageNames);
+ if (results.size() < 1)
+ notify("Unable to find package: " + queryString);
+ else if (results.size() > 1)
+ notify("Multiple packages found: " + queryString);
+ else {
+ try {
+ String packageName = results.get(0);
+ queryResult = formatPackageAlternatives(packageKnowledgeBase.getAlternativePackages(results.get(0)), packageName);
+ } catch (Exception e) {
+ handleError(e);
+ }
+ }
+ }
}
private List<String> formatPackageAlternatives(List<String> alternativePackages, final String replacedPackageName) {
return convert(alternativePackages, new Converter<String, String>() {
@Override
public String convert(String packageName) {
+ return String.format(tplPackageReplacementBoth, removeNamespace(packageName),
+ join(packageKnowledgeBase.getProvidedVirtualPackages(removeNamespace(packageName), replacedPackageName), " | "));
+ }
+ });
+ }
+
+ private List<String> formatPackageAlternatives(List<String> alternativePackages) {
+ return convert(alternativePackages, new Converter<String, String>() {
+ @Override
+ public String convert(String packageName) {
return String.format(tplPackageReplacement, removeNamespace(packageName),
- join(packageKnowledgeBase.getProvidedVirtualPackages(removeNamespace(packageName), replacedPackageName), " | "));
+ join(packageKnowledgeBase.getProvidedVirtualPackages(removeNamespace(packageName)), " | "));
}
});
}