mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 08:25:44 +01:00
Introduce own manager for reduced model object
Move autocomplete functionality to own managers and add functions to load reduced model objects by id
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package sonia.scm;
|
||||
|
||||
import sonia.scm.search.SearchRequest;
|
||||
import sonia.scm.search.SearchUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static java.util.Optional.ofNullable;
|
||||
import static sonia.scm.group.DisplayGroup.from;
|
||||
|
||||
public abstract class GenericDisplayManager<D, T extends ReducedModelObject> implements DisplayManager<T> {
|
||||
|
||||
private final GenericDAO<D> dao;
|
||||
private final Function<D, T> transform;
|
||||
|
||||
protected GenericDisplayManager(GenericDAO<D> dao, Function<D, T> transform) {
|
||||
this.dao = dao;
|
||||
this.transform = transform;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<T> autocomplete(String filter) {
|
||||
checkPermission();
|
||||
SearchRequest searchRequest = new SearchRequest(filter, true, DEFAULT_LIMIT);
|
||||
return SearchUtil.search(
|
||||
searchRequest,
|
||||
dao.getAll(),
|
||||
object -> matches(searchRequest, object)? transform.apply(object): null
|
||||
);
|
||||
}
|
||||
|
||||
protected abstract void checkPermission();
|
||||
|
||||
protected abstract boolean matches(SearchRequest searchRequest, D object);
|
||||
|
||||
@Override
|
||||
public Optional<T> get(String id) {
|
||||
return ofNullable(dao.get(id)).map(transform);
|
||||
}
|
||||
}
|
||||
@@ -46,8 +46,10 @@ import sonia.scm.cache.CacheManager;
|
||||
import sonia.scm.cache.GuavaCacheManager;
|
||||
import sonia.scm.config.ScmConfiguration;
|
||||
import sonia.scm.event.ScmEventBus;
|
||||
import sonia.scm.group.DefaultGroupDisplayManager;
|
||||
import sonia.scm.group.DefaultGroupManager;
|
||||
import sonia.scm.group.GroupDAO;
|
||||
import sonia.scm.group.GroupDisplayManager;
|
||||
import sonia.scm.group.GroupManager;
|
||||
import sonia.scm.group.GroupManagerProvider;
|
||||
import sonia.scm.group.xml.XmlGroupDAO;
|
||||
@@ -102,8 +104,10 @@ import sonia.scm.template.MustacheTemplateEngine;
|
||||
import sonia.scm.template.TemplateEngine;
|
||||
import sonia.scm.template.TemplateEngineFactory;
|
||||
import sonia.scm.template.TemplateServlet;
|
||||
import sonia.scm.user.DefaultUserDisplayManager;
|
||||
import sonia.scm.user.DefaultUserManager;
|
||||
import sonia.scm.user.UserDAO;
|
||||
import sonia.scm.user.UserDisplayManager;
|
||||
import sonia.scm.user.UserManager;
|
||||
import sonia.scm.user.UserManagerProvider;
|
||||
import sonia.scm.user.xml.XmlUserDAO;
|
||||
@@ -268,8 +272,11 @@ public class ScmServletModule extends ServletModule
|
||||
RepositoryManagerProvider.class);
|
||||
bindDecorated(UserManager.class, DefaultUserManager.class,
|
||||
UserManagerProvider.class);
|
||||
bind(UserDisplayManager.class, DefaultUserDisplayManager.class);
|
||||
bindDecorated(GroupManager.class, DefaultGroupManager.class,
|
||||
GroupManagerProvider.class);
|
||||
bind(GroupDisplayManager.class, DefaultGroupDisplayManager.class);
|
||||
|
||||
bind(CGIExecutorFactory.class, DefaultCGIExecutorFactory.class);
|
||||
|
||||
// bind sslcontext provider
|
||||
|
||||
@@ -4,8 +4,8 @@ import com.webcohesion.enunciate.metadata.rs.ResponseCode;
|
||||
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
|
||||
import org.hibernate.validator.constraints.NotEmpty;
|
||||
import sonia.scm.ReducedModelObject;
|
||||
import sonia.scm.group.GroupManager;
|
||||
import sonia.scm.user.UserManager;
|
||||
import sonia.scm.group.GroupDisplayManager;
|
||||
import sonia.scm.user.UserDisplayManager;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -30,14 +30,14 @@ public class AutoCompleteResource {
|
||||
|
||||
private ReducedObjectModelToDtoMapper mapper;
|
||||
|
||||
private UserManager userManager;
|
||||
private GroupManager groupManager;
|
||||
private UserDisplayManager userDisplayManager;
|
||||
private GroupDisplayManager groupDisplayManager;
|
||||
|
||||
@Inject
|
||||
public AutoCompleteResource(ReducedObjectModelToDtoMapper mapper, UserManager userManager, GroupManager groupManager) {
|
||||
public AutoCompleteResource(ReducedObjectModelToDtoMapper mapper, UserDisplayManager userDisplayManager, GroupDisplayManager groupDisplayManager) {
|
||||
this.mapper = mapper;
|
||||
this.userManager = userManager;
|
||||
this.groupManager = groupManager;
|
||||
this.userDisplayManager = userDisplayManager;
|
||||
this.groupDisplayManager = groupDisplayManager;
|
||||
}
|
||||
|
||||
@GET
|
||||
@@ -51,7 +51,7 @@ public class AutoCompleteResource {
|
||||
@ResponseCode(code = 500, condition = "internal server error")
|
||||
})
|
||||
public List<ReducedObjectModelDto> searchUser(@NotEmpty(message = PARAMETER_IS_REQUIRED) @Size(min = MIN_SEARCHED_CHARS, message = INVALID_PARAMETER_LENGTH) @QueryParam("q") String filter) {
|
||||
return map(userManager.autocomplete(filter));
|
||||
return map(userDisplayManager.autocomplete(filter));
|
||||
}
|
||||
|
||||
@GET
|
||||
@@ -65,7 +65,7 @@ public class AutoCompleteResource {
|
||||
@ResponseCode(code = 500, condition = "internal server error")
|
||||
})
|
||||
public List<ReducedObjectModelDto> searchGroup(@NotEmpty(message = PARAMETER_IS_REQUIRED) @Size(min = MIN_SEARCHED_CHARS, message = INVALID_PARAMETER_LENGTH) @QueryParam("q") String filter) {
|
||||
return map(groupManager.autocomplete(filter));
|
||||
return map(groupDisplayManager.autocomplete(filter));
|
||||
}
|
||||
|
||||
private <T extends ReducedModelObject> List<ReducedObjectModelDto> map(Collection<T> autocomplete) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.webcohesion.enunciate.metadata.rs.TypeHint;
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import sonia.scm.user.User;
|
||||
import sonia.scm.user.UserManager;
|
||||
import sonia.scm.user.UserPermissions;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package sonia.scm.group;
|
||||
|
||||
import sonia.scm.GenericDisplayManager;
|
||||
import sonia.scm.search.SearchRequest;
|
||||
import sonia.scm.search.SearchUtil;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class DefaultGroupDisplayManager extends GenericDisplayManager<Group, DisplayGroup> implements GroupDisplayManager {
|
||||
|
||||
@Inject
|
||||
public DefaultGroupDisplayManager(GroupDAO groupDAO) {
|
||||
super(groupDAO, DisplayGroup::from);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkPermission() {
|
||||
GroupPermissions.autocomplete().check();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean matches(SearchRequest searchRequest, Group group) {
|
||||
return SearchUtil.matchesOne(searchRequest, group.getName(), group.getDescription());
|
||||
}
|
||||
}
|
||||
@@ -195,7 +195,7 @@ public class DefaultGroupManager extends AbstractGroupManager
|
||||
|
||||
final PermissionActionCheck<Group> check = GroupPermissions.read();
|
||||
return SearchUtil.search(searchRequest, groupDAO.getAll(),
|
||||
new TransformFilter<Group>()
|
||||
new TransformFilter<Group, Group>()
|
||||
{
|
||||
@Override
|
||||
public Group accept(Group group)
|
||||
@@ -241,13 +241,6 @@ public class DefaultGroupManager extends AbstractGroupManager
|
||||
return group;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Group> autocomplete(String filter) {
|
||||
GroupPermissions.autocomplete().check();
|
||||
SearchRequest searchRequest = new SearchRequest(filter, true, DEFAULT_LIMIT);
|
||||
return SearchUtil.search(searchRequest, groupDAO.getAll(), group -> matches(searchRequest,group)?group:null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package sonia.scm.user;
|
||||
|
||||
import sonia.scm.GenericDisplayManager;
|
||||
import sonia.scm.search.SearchRequest;
|
||||
import sonia.scm.search.SearchUtil;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class DefaultUserDisplayManager extends GenericDisplayManager<User, DisplayUser> implements UserDisplayManager {
|
||||
|
||||
@Inject
|
||||
public DefaultUserDisplayManager(UserDAO userDAO) {
|
||||
super(userDAO, DisplayUser::from);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkPermission() {
|
||||
UserPermissions.autocomplete().check();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean matches(SearchRequest searchRequest, User user) {
|
||||
return SearchUtil.matchesOne(searchRequest, user.getName(), user.getDisplayName(), user.getMail());
|
||||
}
|
||||
}
|
||||
@@ -212,13 +212,6 @@ public class DefaultUserManager extends AbstractUserManager
|
||||
fresh.copyProperties(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<User> autocomplete(String filter) {
|
||||
UserPermissions.autocomplete().check();
|
||||
SearchRequest searchRequest = new SearchRequest(filter, true, DEFAULT_LIMIT);
|
||||
return SearchUtil.search(searchRequest, userDAO.getAll(), user -> matches(searchRequest,user)?user:null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
@@ -236,7 +229,7 @@ public class DefaultUserManager extends AbstractUserManager
|
||||
}
|
||||
|
||||
final PermissionActionCheck<User> check = UserPermissions.read();
|
||||
return SearchUtil.search(searchRequest, userDAO.getAll(), new TransformFilter<User>() {
|
||||
return SearchUtil.search(searchRequest, userDAO.getAll(), new TransformFilter<User, User>() {
|
||||
@Override
|
||||
public User accept(User user)
|
||||
{
|
||||
@@ -415,35 +408,6 @@ public class DefaultUserManager extends AbstractUserManager
|
||||
this.modify(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param unmarshaller
|
||||
* @param path
|
||||
*/
|
||||
private void createDefaultAccount(Unmarshaller unmarshaller, String path)
|
||||
{
|
||||
InputStream input = DefaultUserManager.class.getResourceAsStream(path);
|
||||
|
||||
try
|
||||
{
|
||||
User user = (User) unmarshaller.unmarshal(input);
|
||||
|
||||
user.setType(userDAO.getType());
|
||||
user.setCreationDate(System.currentTimeMillis());
|
||||
userDAO.add(user);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.error("could not create account", ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
IOUtil.close(input);
|
||||
}
|
||||
}
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
private final UserDAO userDAO;
|
||||
|
||||
Reference in New Issue
Block a user