diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index 16b3d99..869d9f1 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 jarsExcludedFromWebInfLib= -lastWarOutDir=/home/francesco-mangiacrapa/wseclipse/speciesdiscovery(trunk)/target/species-discovery-3.0.0-SNAPSHOT +lastWarOutDir=/home/fedy2/workspace/org.gcube.portlets.user.species-discovery/target/species-discovery-3.0.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 4a1dd25..d07fedc 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,4 +1,5 @@ - + + diff --git a/pom.xml b/pom.xml index dcc350f..8554642 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,14 @@ org.gcube.data.spd spd-client-library - [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + [3.0.0-SNAPSHOT, 4.0.0-SNAPSHOT) + provided + + + + org.gcube.data.spd + spd-model + [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) provided @@ -73,14 +80,6 @@ provided - - org.gcube.data.spd - spd-model - 1.0.0-SNAPSHOT - - provided - - org.gcube.resources.discovery discovery-client @@ -197,12 +196,6 @@ 2.2.5 provided - - org.gcube.core - gcf - [1.4.0-SNAPSHOT, 2.0.0-SNAPSHOT) - provided - org.gcube.portlets.user gcube-widgets diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java index 36b8cfe..05bf0e4 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/TaxonomySearchServiceImpl.java @@ -25,9 +25,9 @@ import net.sf.csv4j.CSVWriter; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.data.spd.model.OccurrencePoint; -import org.gcube.data.spd.model.ResultElement; -import org.gcube.data.spd.model.TaxonomyItem; +import org.gcube.data.spd.model.products.OccurrencePoint; +import org.gcube.data.spd.model.products.ResultElement; +import org.gcube.data.spd.model.products.TaxonomyItem; import org.gcube.data.spd.stubs.types.Status; import org.gcube.portlets.user.homelibrary.home.HomeLibrary; import org.gcube.portlets.user.homelibrary.home.workspace.Workspace; diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/IteratorChainBuilder.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/IteratorChainBuilder.java index c1e7f2b..3bb0fc8 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/IteratorChainBuilder.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/IteratorChainBuilder.java @@ -4,10 +4,10 @@ package org.gcube.portlets.user.speciesdiscovery.server.service; import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.data.spd.model.OccurrencePoint; -import org.gcube.data.spd.model.ResultElement; -import org.gcube.data.spd.model.ResultItem; -import org.gcube.data.spd.model.TaxonomyItem; +import org.gcube.data.spd.model.products.OccurrencePoint; +import org.gcube.data.spd.model.products.ResultElement; +import org.gcube.data.spd.model.products.ResultItem; +import org.gcube.data.spd.model.products.TaxonomyItem; import org.gcube.portlets.user.speciesdiscovery.server.stream.CastConverter; import org.gcube.portlets.user.speciesdiscovery.server.stream.CloseableIterator; import org.gcube.portlets.user.speciesdiscovery.server.stream.ConversionIterator; diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/OccurrenceConverter.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/OccurrenceConverter.java index 2a642da..655e917 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/OccurrenceConverter.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/OccurrenceConverter.java @@ -9,7 +9,7 @@ import java.util.List; import org.apache.commons.lang.StringEscapeUtils; import org.gcube.data.spd.model.BasisOfRecord; -import org.gcube.data.spd.model.OccurrencePoint; +import org.gcube.data.spd.model.products.OccurrencePoint; import org.gcube.data.spd.model.util.ElementProperty; import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery; import org.gcube.portlets.user.speciesdiscovery.server.stream.Converter; diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/QueryBuilder.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/QueryBuilder.java index 29c7e71..9f5bc21 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/QueryBuilder.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/QueryBuilder.java @@ -2,12 +2,11 @@ package org.gcube.portlets.user.speciesdiscovery.server.service; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.Iterator; import java.util.List; -import org.gcube.data.spd.model.Properties; -import org.gcube.data.spd.model.Property; +import org.gcube.dataaccess.spql.ParserException; +import org.gcube.dataaccess.spql.SPQLQueryParser; import org.gcube.portlets.user.speciesdiscovery.shared.Coordinate; import org.gcube.portlets.user.speciesdiscovery.shared.DataSourceModel; import org.gcube.portlets.user.speciesdiscovery.shared.SearchFilters; @@ -51,21 +50,19 @@ public class QueryBuilder { } - List properties = createFilterProperties(searchFilters); + List conditions = createFilterProperties(searchFilters); //ADD filters - if(properties.size()>0){ + if(conditions.size()>0){ query.append("WHERE "); - Iterator pIterator = properties.iterator(); - while (pIterator.hasNext()) { - Property property = pIterator.next(); - String statement = getQueryStatementFromProperty(property); - query.append(statement); + Iterator conditionsIterator = conditions.iterator(); + while (conditionsIterator.hasNext()) { + String condition = conditionsIterator.next(); + query.append(condition); - if (pIterator.hasNext()) query.append(" AND "); + if (conditionsIterator.hasNext()) query.append(" AND "); else query.append(" "); - } } @@ -73,67 +70,50 @@ public class QueryBuilder { query.append("RETURN "); if (searchFilters.getResultType()!=null) { switch (searchFilters.getResultType()) { - case RESULTITEM: query.append("PRODUCT HAVING xpath(\"//product[type='OCCURRENCE' and counter>0]\")"); break; - case TAXONOMYITEM: query.append("TAXON"); break; + case RESULTITEM: query.append("Product HAVING xpath(\"//product[type='OCCURRENCE' and counter>0]\")"); break; + case TAXONOMYITEM: query.append("Taxon"); break; } } else { - query.append("PRODUCT HAVING xpath(\"//product[type='OCCURRENCE' and counter>0]\")"); + query.append("Product HAVING xpath(\"//product[type='OCCURRENCE' and counter>0]\")"); } - - return query.toString(); - - } - - protected static String getQueryStatementFromProperty(Property property){ - - String statement = null; - Properties prop = property.getProp(); - switch (prop) { - case CoordinateTo: { - org.gcube.data.spd.model.Coordinate coordinate = (org.gcube.data.spd.model.Coordinate)property.getValue(); - statement= "coordinate <= " + coordinate.getLatitude() + " , "+coordinate.getLongitude(); - } break; - case CoordinateFrom: { - org.gcube.data.spd.model.Coordinate coordinate = (org.gcube.data.spd.model.Coordinate)property.getValue(); - statement= "coordinate >= " + coordinate.getLatitude() + " , "+coordinate.getLongitude(); - } break; - case DateFrom: { - Calendar calendar = (Calendar) property.getValue(); - statement= "eventDate >= '" + DATE_FORMAT.format(calendar.getTime())+"'"; - } break; - case DateTo: { - Calendar calendar = (Calendar) property.getValue(); - statement= "eventDate <= '" + DATE_FORMAT.format(calendar.getTime())+"'"; - } + String builtQuery = query.toString(); + + System.out.println("built query: "+builtQuery); + //FIXME TEST + try { + SPQLQueryParser.parse(builtQuery); + } catch (ParserException e) { + System.out.println("error parsing"); + e.printStackTrace(); } - return statement; + return builtQuery; } - protected static List createFilterProperties(SearchFilters searchFilters) + protected static List createFilterProperties(SearchFilters searchFilters) { - List properties = new ArrayList(); - if (searchFilters.getUpperBound()!=null) properties.add(new Property(Properties.CoordinateTo, convert(searchFilters.getUpperBound()))); - if (searchFilters.getLowerBound()!=null) properties.add(new Property(Properties.CoordinateFrom, convert(searchFilters.getLowerBound()))); + List conditions = new ArrayList(); + + if (searchFilters.getUpperBound()!=null) { + Coordinate coordinate = searchFilters.getUpperBound(); + conditions.add("coordinate <= " + coordinate.getLatitude() + " , "+coordinate.getLongitude()); + } + + if (searchFilters.getLowerBound()!=null) { + Coordinate coordinate = searchFilters.getLowerBound(); + conditions.add("coordinate >= " + coordinate.getLatitude() + " , "+coordinate.getLongitude()); + } if (searchFilters.getFromDate()!=null) { - Calendar fromDate = Calendar.getInstance(); - fromDate.setTime(searchFilters.getFromDate()); - properties.add(new Property(Properties.DateFrom, fromDate)); + conditions.add("eventDate >= '" + DATE_FORMAT.format(searchFilters.getFromDate())+"'"); } + if (searchFilters.getToDate()!=null) { - Calendar toDate = Calendar.getInstance(); - toDate.setTime(searchFilters.getToDate()); - properties.add(new Property(Properties.DateTo, toDate)); + conditions.add("eventDate <= '" + DATE_FORMAT.format(searchFilters.getToDate())+"'"); } - return properties; - } - - protected static org.gcube.data.spd.model.Coordinate convert(Coordinate coordinate) - { - return new org.gcube.data.spd.model.Coordinate(coordinate.getLatitude(), coordinate.getLongitude()); + return conditions; } } diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/ResultItemConverter.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/ResultItemConverter.java index d7d568e..f3884aa 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/ResultItemConverter.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/ResultItemConverter.java @@ -8,10 +8,11 @@ import java.util.List; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.common.core.utils.logging.GCUBEClientLog; -import org.gcube.data.spd.model.DataProvider; -import org.gcube.data.spd.model.DataSet; -import org.gcube.data.spd.model.Product; -import org.gcube.data.spd.model.ResultItem; +import org.gcube.data.spd.model.products.DataProvider; +import org.gcube.data.spd.model.products.DataSet; +import org.gcube.data.spd.model.products.Product; +import org.gcube.data.spd.model.products.ResultItem; +import org.gcube.data.spd.model.products.TaxonomyInterface; import org.gcube.data.spd.model.util.ElementProperty; import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery; import org.gcube.portlets.user.speciesdiscovery.server.TaxonomySearchServiceImpl; @@ -162,7 +163,7 @@ public class ResultItemConverter implements Converter { return row; } - private String getBaseTaxonValue(String rank, org.gcube.data.spd.model.TaxonomyInterface taxon){ + private String getBaseTaxonValue(String rank, TaxonomyInterface taxon){ while(taxon!=null){ @@ -176,7 +177,7 @@ public class ResultItemConverter implements Converter { } - protected List convertTaxon(org.gcube.data.spd.model.TaxonomyInterface taxon) + protected List convertTaxon(TaxonomyInterface taxon) { List listTaxon = new ArrayList(); int count=0; diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java index 3d23271..d7e93da 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/SpeciesService.java @@ -8,10 +8,13 @@ import static org.gcube.data.streams.dsl.Streams.convert; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; @@ -22,17 +25,17 @@ import org.gcube.data.spd.client.proxies.Classification; import org.gcube.data.spd.client.proxies.Executor; import org.gcube.data.spd.client.proxies.Manager; import org.gcube.data.spd.client.proxies.Occurrence; -import org.gcube.data.spd.model.OccurrencePoint; -import org.gcube.data.spd.model.Properties; -import org.gcube.data.spd.model.Property; -import org.gcube.data.spd.model.ResultElement; -import org.gcube.data.spd.model.TaxonomyItem; +import org.gcube.data.spd.model.Condition; +import org.gcube.data.spd.model.Conditions; +import org.gcube.data.spd.model.PluginDescription; +import org.gcube.data.spd.model.RepositoryInfo; +import org.gcube.data.spd.model.products.OccurrencePoint; +import org.gcube.data.spd.model.products.ResultElement; +import org.gcube.data.spd.model.products.TaxonomyItem; import org.gcube.data.spd.model.util.Capabilities; import org.gcube.data.spd.stubs.exceptions.InvalidIdentifierException; import org.gcube.data.spd.stubs.types.CapabilityDescription; -import org.gcube.data.spd.stubs.types.PluginDescription; import org.gcube.data.spd.stubs.types.PluginProperty; -import org.gcube.data.spd.stubs.types.RepositoryInfo; import org.gcube.data.spd.stubs.types.Status; import org.gcube.data.streams.Stream; import org.gcube.portlets.user.speciesdiscovery.server.stream.CloseableIterator; @@ -196,22 +199,23 @@ public class SpeciesService { for (int i = 0; i < plugin.size(); i++) { PluginDescription pluginDescription = plugin.get(i); - List listCapabilityDescription = pluginDescription.getCapabilities(); - ArrayList listCapabilities = new ArrayList(); //new Array List DataSourceCapability + ArrayList datasourceCapabilities = new ArrayList(); + + Map> pluginCapabilities = pluginDescription.getSupportedCapabilities(); + logger.trace("getCapabilities for..." + pluginDescription.getName()); - for (CapabilityDescription capabilityDescription : listCapabilityDescription){ - List properties = capabilityDescription.getProperties(); - ArrayList listProperties = properties!=null?new ArrayList(properties):new ArrayList(); - ArrayList listPropertiesEnum = new ArrayList(); - - for (String property : listProperties) - listPropertiesEnum.add(getFilterCapabilityFromProperties(property)); - - listCapabilities.add(new DataSourceCapability(getGxtCapabilityValueFromCapability(capabilityDescription.getName()), listPropertiesEnum)); + for (Entry> pluginCapability:pluginCapabilities.entrySet()) { + + Capabilities capability = pluginCapability.getKey(); + + ArrayList datasourceProperties = new ArrayList(); + for (Conditions condition:pluginCapability.getValue()) datasourceProperties.addAll(getFilterCapabilityFromProperties(condition)); + + datasourceCapabilities.add(new DataSourceCapability(getGxtCapabilityValueFromCapability(capability), datasourceProperties)); } - RepositoryInfo rep = pluginDescription.getRepositoryInfo(); + RepositoryInfo rep = pluginDescription.getInfo(); //CREATE DataSourceRepositoryInfo DataSourceRepositoryInfo dsInfo = new DataSourceRepositoryInfo(); @@ -219,7 +223,7 @@ public class SpeciesService { if(rep!=null){ // System.out.println("DESCRIPTION REPOSITORY: " + rep.getDescription()); dsInfo.setLogoUrl(rep.getLogoUrl()); - dsInfo.setPageUrl(rep.getReferencePageUrl()); + dsInfo.setPageUrl(rep.getPageReferenceUrl()); dsInfo.setProperties(getPropertiesFromRepositoryInfoType(rep)); dsInfo.setDescription(rep.getDescription()); // dsInfo = new DataSourceRepositoryInfo(rep.getLogoUrl(), rep.getReferencePageUrl(),getPropertiesFromRepositoryInfoType(rep), rep.getDescription()); @@ -227,7 +231,7 @@ public class SpeciesService { // logger.trace("Repository description size: " + rep.getDescription().length()); } - listDsModel.add(new DataSourceModel(pluginDescription.getName(), pluginDescription.getName(), pluginDescription.getDescription(), listCapabilities, dsInfo)); + listDsModel.add(new DataSourceModel(pluginDescription.getName(), pluginDescription.getName(), pluginDescription.getDescription(), datasourceCapabilities, dsInfo)); } } @@ -253,42 +257,34 @@ public class SpeciesService { return mapProperties; } - for (PluginProperty prop : rep.getProperties()) - - mapProperties.put(prop.getKey(), prop.getValue()); + + for (Entry property : rep.getProperties().entrySet()) mapProperties.put(property.getKey(), property.getValue()); return mapProperties; } - private SpeciesCapability getFilterCapabilityFromProperties(String property){ + private List getFilterCapabilityFromProperties(Conditions property){ - if(property.compareTo(Properties.DateFrom.name())==0) - return SpeciesCapability.FROMDATE; - else if(property.compareTo(Properties.DateTo.name())==0) - return SpeciesCapability.TODATE; - else if(property.compareTo(Properties.CoordinateTo.name())==0) - return SpeciesCapability.UPPERBOUND; - else if(property.compareTo(Properties.CoordinateFrom.name())==0) - return SpeciesCapability.LOWERBOUND; + switch (property) { + case DATE: return Arrays.asList(SpeciesCapability.FROMDATE, SpeciesCapability.TODATE); + case COORDINATE: return Arrays.asList(SpeciesCapability.UPPERBOUND, SpeciesCapability.LOWERBOUND); + default: return Collections.singletonList(SpeciesCapability.UNKNOWN); - return SpeciesCapability.UNKNOWN; + } } - private SpeciesCapability getGxtCapabilityValueFromCapability(String capability){ + private SpeciesCapability getGxtCapabilityValueFromCapability(Capabilities capability){ - if(capability.compareTo(Capabilities.Classification.name())==0) - return SpeciesCapability.TAXONOMYITEM; - else if(capability.compareTo(Capabilities.Occurences.name())==0) - return SpeciesCapability.RESULTITEM; - else if(capability.compareTo(Capabilities.NamesMapping.name())==0) - return SpeciesCapability.NAMESMAPPING; - else if(capability.compareTo(Capabilities.Synonims.name())==0) - return SpeciesCapability.SYNONYMS; - - return SpeciesCapability.UNKNOWN; + switch (capability) { + case Classification: return SpeciesCapability.TAXONOMYITEM; + case NamesMapping: return SpeciesCapability.NAMESMAPPING; + case Occurences: return SpeciesCapability.RESULTITEM; + case Synonims: return SpeciesCapability.SYNONYMS; + default: return SpeciesCapability.UNKNOWN; + } } - protected List createFilterProperties(SearchFilters searchFilters) + /*protected List createFilterProperties(SearchFilters searchFilters) { List properties = new ArrayList(); if (searchFilters.getUpperBound()!=null) properties.add(new Property(Properties.CoordinateTo, convertCoordinate(searchFilters.getUpperBound()))); @@ -306,7 +302,7 @@ public class SpeciesService { } return properties; - } + }*/ protected org.gcube.data.spd.model.Coordinate convertCoordinate(Coordinate coordinate) { diff --git a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/TaxonomyItemConverter.java b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/TaxonomyItemConverter.java index 45d48e9..6ab3700 100644 --- a/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/TaxonomyItemConverter.java +++ b/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/service/TaxonomyItemConverter.java @@ -5,7 +5,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.data.spd.model.TaxonomyItem; +import org.gcube.data.spd.model.products.TaxonomyItem; import org.gcube.data.spd.model.util.ElementProperty; import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery; import org.gcube.portlets.user.speciesdiscovery.server.TaxonomySearchServiceImpl;