Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Design internal filter API #31
Package Drone needs an internal filter API. Internal at least for now. The core use cases for this filter API is to filter for artifacts based on a single channel or a set of artifacts.
There are many use cases. First of old the long standing request for filling features based on a sub-set of the channel (see ctron/package-drone#66), a global search function (see ctron/package-drone#114) could also benefit from such an API and the cleanup aspect could also benefit from having a filter.
Now the requirements to such a filter API are:
So I would like to see something in the source code that looks like this:
MetaKey MY_KEY = new MetaKey ( "ns", "key" ); ArtifactLocator al = …; al.search ( Filters.equals ( MY_KEY, "foo-bar" ) ); al.search ( Filters.or ( Filters.equals ( MY_KEY, "foo-bar" ), Filters.equals ( MY_KEY, "bar-foo") ); // using import static al.search ( equals ( MY_KEY, "foo-bar" ) ); al.search ( or ( equals ( MY_KEY, "foo-bar" ), equals ( MY_KEY, "bar-foo") ); // with a query string al.search ( Filters.parse ( "foo:bar = foo-bar or foo:bar = bar-foo" ) ); al.search ( Filters.parse ( "foo:bar = 'foo-bar' or foo:bar = 'bar-foo'" ) );
With a search method like:
List<ArtifactInformation> result = al.search ( predicate); List<ArtifactInformation> result = al.search ( predicate, options );
Of course it would be possible to use Java 8 stream on the interface, and I guess it might be a good idea to use them for implementing the ArtifactLocator for some channel types. But considering the possibility that there might be a database or some sort of index being involved some time in the future, I would like to use a filter model which is a real model which can then be transformed in e.g. a stream setup, but also to some sort of JPA query.