Skip to content
Snippets Groups Projects
Commit 0f958aef authored by fedoreno's avatar fedoreno
Browse files

SSDM-3519: only listabe samples search criteria

SVN: 36248
parent 4be841e9
No related branches found
No related tags found
No related merge requests found
......@@ -73,6 +73,9 @@ public abstract class AbstractCompositeSearchCriteriaTranslator extends Abstract
continue;
} else
{
for (DetailedSearchCriteria additionalCriteria: translationResult.getCriteriaList()) {
detailedCriterionList.addAll(additionalCriteria.getCriteria());
}
detailedCriterionList.addAll(translationResult.getCriterionList());
detailedSubCriteriaList.addAll(translationResult.getSubCriteriaList());
}
......
......@@ -16,17 +16,25 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.translator.search;
import java.util.Collections;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.ISearchCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.NoSampleContainerSearchCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.NoSampleSearchCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.OnlyListableSeachCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleChildrenSearchCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleContainerSearchCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleParentsSearchCriteria;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria;
import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AssociatedEntityKind;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriterion;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchField;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchSubCriteria;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SimpleAttributeSearchFieldKind;
import ch.systemsx.cisd.openbis.generic.shared.dto.hibernate.SearchFieldConstants;
/**
* @author pkupczyk
......@@ -42,7 +50,9 @@ public class SampleSearchCriteriaTranslator extends AbstractCompositeSearchCrite
@Override
protected boolean doAccepts(ISearchCriteria criteria)
{
return criteria instanceof SampleSearchCriteria || criteria instanceof NoSampleSearchCriteria;
return criteria instanceof SampleSearchCriteria
|| criteria instanceof NoSampleSearchCriteria
|| criteria instanceof OnlyListableSeachCriteria;
}
@Override
......@@ -61,6 +71,13 @@ public class SampleSearchCriteriaTranslator extends AbstractCompositeSearchCrite
}
return new SearchCriteriaTranslationResult(new DetailedSearchSubCriteria(entityKind, null));
} else if (criteria instanceof OnlyListableSeachCriteria)
{
SimpleAttributeSearchFieldKind attributeFieldKind = new SimpleAttributeSearchFieldKind(SearchFieldConstants.PREFIX_ENTITY_TYPE + SearchFieldConstants.IS_LISTABLE, "listable");
DetailedSearchField createAttributeField = DetailedSearchField.createAttributeField(attributeFieldKind);
DetailedSearchCriterion criterion = new DetailedSearchCriterion(createAttributeField, "true");
return new SearchCriteriaTranslationResult(criterion);
} else
{
context.pushEntityKind(EntityKind.SAMPLE);
......@@ -85,8 +102,7 @@ public class SampleSearchCriteriaTranslator extends AbstractCompositeSearchCrite
} else if (criteria instanceof SampleSearchCriteria)
{
entityKind = AssociatedEntityKind.SAMPLE;
} else
{
} else {
throw new IllegalArgumentException("Unknown criteria: " + criteria);
}
DetailedSearchSubCriteria subCriteria = new DetailedSearchSubCriteria(entityKind, translationResult.getCriteria());
......
......@@ -35,9 +35,14 @@ import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;
import org.hibernate.validator.constraints.Length;
import ch.systemsx.cisd.openbis.generic.shared.IServer;
import ch.systemsx.cisd.openbis.generic.shared.dto.hibernate.SearchFieldConstants;
import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
/**
......@@ -50,6 +55,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
@Table(name = TableNames.SAMPLE_TYPES_TABLE, uniqueConstraints =
{ @UniqueConstraint(columnNames =
{ ColumnNames.CODE_COLUMN }) })
@Indexed(index = "SampleTypePE")
public final class SampleTypePE extends EntityTypePE
{
private static final long serialVersionUID = IServer.VERSION;
......@@ -117,6 +123,7 @@ public final class SampleTypePE extends EntityTypePE
}
@Column(name = ColumnNames.IS_LISTABLE)
@Field(index = Index.YES, store = Store.YES, name = SearchFieldConstants.IS_LISTABLE)
public Boolean isListable()
{
return listable;
......
......@@ -102,4 +102,6 @@ public final class SearchFieldConstants
public static final String MODIFICATION_DATE = "modification_date";
public static final String ACCESS_DATE = "access_date";
public static final String IS_LISTABLE = "is_listable";
}
/**
* @author pkupczyk
*/
define([ "stjs", "as/dto/sample/search/AbstractCompositeSearchCriteria" ], function(stjs, AbstractCompositeSearchCriteria) {
var OnlyListableSeachCriteria = function() {
};
stjs.extend(AbstractCompositeSearchCriteria, OnlyListableSeachCriteria, [ OnlyListableSeachCriteria ], function(constructor, prototype) {
prototype['@type'] = 'as.dto.sample.search.OnlyListableSeachCriteria';
constructor.serialVersionUID = 1;
}, {});
return OnlyListableSeachCriteria;
})
......@@ -3,7 +3,7 @@
*/
define([ "require", "stjs", "as/dto/common/search/AbstractEntitySearchCriteria", "as/dto/common/search/SearchOperator", "as/dto/sample/search/SampleSearchRelation", "as/dto/space/search/SpaceSearchCriteria",
"as/dto/experiment/search/ExperimentSearchCriteria", "as/dto/experiment/search/NoExperimentSearchCriteria",
"as/dto/sample/search/NoSampleContainerSearchCriteria" ], function(require, stjs, AbstractEntitySearchCriteria, SearchOperator, SampleSearchRelation) {
"as/dto/sample/search/NoSampleContainerSearchCriteria", "as/dto/sample/search/OnlyListableSeachCriteria" ], function(require, stjs, AbstractEntitySearchCriteria, SearchOperator, SampleSearchRelation) {
var SampleSearchCriteria = function(relation) {
AbstractEntitySearchCriteria.call(this);
......@@ -38,6 +38,10 @@ define([ "require", "stjs", "as/dto/common/search/AbstractEntitySearchCriteria",
var NoSampleContainerSearchCriteria = require("as/dto/sample/search/NoSampleContainerSearchCriteria");
return this.addCriteria(new NoSampleContainerSearchCriteria());
};
prototype.withListableOnly = function() {
var OnlyListableSeachCriteria = require("as/dto/sample/search/OnlyListableSeachCriteria");
return this.addCriteria(new OnlyListableSeachCriteria());
};
prototype.withOrOperator = function() {
return this.withOperator(SearchOperator.OR);
};
......
......@@ -967,6 +967,56 @@ public class SearchSampleTest extends AbstractSampleTest
v3api.logout(sessionToken);
}
final String LISTED_ID = "/CISD/C1";
final String UNLISTED_ID = "/CISD/CL1:A01";
@Test
public void testSearchListableOnlyShouldNotFindUnlisted()
{
String sessionToken = v3api.login(TEST_USER, PASSWORD);
SampleFetchOptions fo = new SampleFetchOptions();
SampleSearchCriteria criteria = new SampleSearchCriteria();
criteria.withId().thatEquals(new SampleIdentifier(UNLISTED_ID));
List<Sample> samples = search(sessionToken, criteria, fo);
assertEquals(samples.size(), 1);
assertSampleIdentifiersInOrder(samples, UNLISTED_ID);
criteria.withListableOnly();
samples = search(sessionToken, criteria, fo);
assertEquals(samples.size(), 0);
}
@Test
public void testSearchListableOnlyShouldFindListed()
{
String sessionToken = v3api.login(TEST_USER, PASSWORD);
SampleFetchOptions fo = new SampleFetchOptions();
fo.withType();
fo.withProperties();
SampleSearchCriteria criteria = new SampleSearchCriteria();
criteria.withId().thatEquals(new SampleIdentifier(LISTED_ID));
List<Sample> samples = search(sessionToken, criteria, fo);
assertEquals(samples.size(), 1);
assertEquals(samples.get(0).getIdentifier().getIdentifier(), LISTED_ID);
criteria.withListableOnly();
samples = search(sessionToken, criteria, fo);
assertEquals(samples.size(), 1);
assertEquals(samples.get(0).getIdentifier().getIdentifier(), LISTED_ID);
}
private void testSearch(String user, SampleSearchCriteria criteria, String... expectedIdentifiers)
{
String sessionToken = v3api.login(user, PASSWORD);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment