add autocomplete endpoint

This commit is contained in:
Mohamed Karray
2018-10-08 13:39:33 +02:00
parent 0f08f2f7d5
commit ddcc21c1a8
27 changed files with 664 additions and 14 deletions

View File

@@ -114,4 +114,13 @@ public interface GenericDAO<T>
* @return all items
*/
public Collection<T> getAll();
/**
* Returns items containing the searched string
*
* @param searched the search character
* @param limit the max count of the result entities. if limit is <= 0 return all filtered entities
* @return searched items
*/
Collection<T> getFiltered(String searched, int limit);
}

View File

@@ -77,6 +77,15 @@ public interface Manager<T extends ModelObject>
*/
Collection<T> getAll();
/**
* Returns a {@link java.util.Collection} of filtered objects
*
* @param filter the searched string
* @param limit the max count of the result entities. if limit is <= 0 return all filtered entities
* @return all object in the store
*/
Collection<T> getFiltered(String filter, int limit);
/**
* Returns all object of the store sorted by the given {@link java.util.Comparator}
*

View File

@@ -91,6 +91,11 @@ public class ManagerDecorator<T extends ModelObject> implements Manager<T> {
decorated.refresh(object);
}
@Override
public Collection<T> getFiltered(String filter, int limit) {
return decorated.getFiltered(filter, limit);
}
@Override
public T get(String id)
{

View File

@@ -44,7 +44,7 @@ import java.io.Serializable;
*/
public interface ModelObject
extends TypedObject, LastModifiedAware, Cloneable, Validateable,
Serializable
Serializable, ReducedModelObject
{
/**

View File

@@ -0,0 +1,15 @@
package sonia.scm;
/**
* This is a reduced form of a model object.
* It can be used as search result to avoid returning the whole object properties.
*
* @author Mohamed Karray
*/
public interface ReducedModelObject {
String getId();
String getDisplayName();
}

View File

@@ -55,12 +55,12 @@ import java.util.List;
/**
* Organizes users into a group for easier permissions management.
*
*
* TODO for 2.0: Use a set instead of a list for members
*
* @author Sebastian Sdorra
*/
@StaticPermissions(value = "group", globalPermissions = {"create", "list"})
@StaticPermissions(value = "group", globalPermissions = {"create", "list", "autocomplete"})
@XmlRootElement(name = "groups")
@XmlAccessorType(XmlAccessType.FIELD)
public class Group extends BasicPropertiesAware
@@ -309,6 +309,11 @@ public class Group extends BasicPropertiesAware
return name;
}
@Override
public String getDisplayName() {
return description;
}
/**
* Returns a timestamp of the last modified date of this group.
*

View File

@@ -256,6 +256,11 @@ public class Changeset extends BasicPropertiesAware implements ModelObject {
return id;
}
@Override
public String getDisplayName() {
return id;
}
@Override
public void setLastModified(Long timestamp) {
throw new UnsupportedOperationException("changesets are immutable");

View File

@@ -60,11 +60,12 @@ import java.util.List;
*/
@StaticPermissions(
value = "repository",
permissions = {"read", "modify", "delete", "healthCheck", "pull", "push", "permissionRead", "permissionWrite"}
permissions = {"read", "modify", "delete", "healthCheck", "pull", "push", "permissionRead", "permissionWrite"},
globalPermissions = {"create", "autocomplete"}
)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "repositories")
public class Repository extends BasicPropertiesAware implements ModelObject, PermissionObject {
public class Repository extends BasicPropertiesAware implements ModelObject, PermissionObject{
private static final long serialVersionUID = 3486560714961909711L;
@@ -183,6 +184,11 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
return id;
}
@Override
public String getDisplayName() {
return getNamespaceAndName().toString();
}
@Override
public Long getLastModified() {
return lastModified;

View File

@@ -55,7 +55,7 @@ import java.security.Principal;
*
* @author Sebastian Sdorra
*/
@StaticPermissions(value = "user", globalPermissions = {"create", "list"})
@StaticPermissions(value = "user", globalPermissions = {"create", "list", "autocomplete"})
@XmlRootElement(name = "users")
@XmlAccessorType(XmlAccessType.FIELD)
public class User extends BasicPropertiesAware implements Principal, ModelObject, PermissionObject

View File

@@ -18,6 +18,7 @@ public class VndMediaType {
public static final String INDEX = PREFIX + "index" + SUFFIX;
public static final String USER = PREFIX + "user" + SUFFIX;
public static final String GROUP = PREFIX + "group" + SUFFIX;
public static final String AUTOCOMPLETE = PREFIX + "autocomplete" + SUFFIX;
public static final String REPOSITORY = PREFIX + "repository" + SUFFIX;
public static final String PERMISSION = PREFIX + "permission" + SUFFIX;
public static final String CHANGESET = PREFIX + "changeset" + SUFFIX;

View File

@@ -78,6 +78,11 @@ public class ManagerTest {
return IntStream.range(0, givenItemCount).boxed().collect(toList());
}
@Override
public Collection getFiltered(String filter, int limit) {
return null;
}
@Override
public Collection getAll(Comparator comparator) { return getAll(); }