/*
* Copyright 2014-2015. Adaptive.me.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.adaptive.core.data.api;
import me.adaptive.core.data.domain.UserEntity;
import me.adaptive.core.data.domain.WorkspaceEntity;
import me.adaptive.core.data.domain.WorkspaceMemberEntity;
import me.adaptive.core.data.repo.WorkspaceMemberRepository;
import org.apache.commons.collections4.CollectionUtils;
import org.eclipse.che.api.workspace.server.dao.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Created by panthro on 08/06/15.
*/
@Service
public class WorkspaceMemberService {
@Autowired
private WorkspaceMemberRepository workspaceMemberRepository;
@Autowired
private WorkspaceEntityService workspaceEntityService;
@Autowired
private UserEntityService userService;
public Set<WorkspaceMemberEntity> findByUserId(String id) {
return workspaceMemberRepository.findByUserUserId(id);
}
public void delete(Iterable<WorkspaceMemberEntity> entities) {
workspaceMemberRepository.delete(entities);
}
public void delete(WorkspaceMemberEntity entity) {
workspaceMemberRepository.delete(entity);
}
public Member toMember(WorkspaceMemberEntity workspaceMemberEntity){
List<String> roles = new ArrayList<>(workspaceMemberEntity.getRoles().size());
CollectionUtils.addAll(roles, workspaceMemberEntity.getRoles().iterator());
return new Member().withWorkspaceId(workspaceMemberEntity.getWorkspace().getWorkspaceId()).withUserId(workspaceMemberEntity.getUser().getUserId()).withRoles(roles);
}
public List<Member> toMemberList(Set<WorkspaceMemberEntity> workspaceMemberEntities) {
List<Member> members = new ArrayList<>(workspaceMemberEntities.size());
members.addAll(workspaceMemberEntities.stream().map(this::toMember).collect(Collectors.toList()));
return members;
}
public Set<WorkspaceMemberEntity> findByWorkspace(WorkspaceEntity workspaceEntity) {
return workspaceMemberRepository.findByWorkspace(workspaceEntity);
}
public Optional<WorkspaceMemberEntity> findByUserIdAndWorkspaceId(String userId, String workspaceId) {
return workspaceMemberRepository.findByUserUserIdAndWorkspaceWorkspaceId(userId, workspaceId);
}
public WorkspaceMemberEntity save(WorkspaceMemberEntity workspaceMemberEntity){
return workspaceMemberRepository.save(workspaceMemberEntity);
}
public WorkspaceMemberEntity toWorkspaceMemberEntity(Member member, Optional<WorkspaceMemberEntity> workspaceMemberEntity) {
WorkspaceMemberEntity entity = workspaceMemberEntity.isPresent() ? workspaceMemberEntity.get() : new WorkspaceMemberEntity();
CollectionUtils.addAll(entity.getRoles(), member.getRoles().iterator());
entity.setUser(member.getUserId() == null ? null : userService.findByUserId(member.getUserId()).get());
entity.setWorkspace(member.getWorkspaceId() == null ? null : workspaceEntityService.findByWorkspaceId(member.getWorkspaceId()).get());
return entity;
}
public Set<WorkspaceMemberEntity> findByWorkspaceId(String workspaceId) {
return workspaceMemberRepository.findByWorkspaceWorkspaceId(workspaceId);
}
public WorkspaceMemberEntity create(Member member) {
Optional<UserEntity> userEntity = userService.findByUserId(member.getUserId());
WorkspaceMemberEntity workspaceMemberEntity = new WorkspaceMemberEntity();
CollectionUtils.addAll(workspaceMemberEntity.getRoles(), member.getRoles().iterator());
Optional<WorkspaceEntity> workspace = workspaceEntityService.findByWorkspaceId(member.getWorkspaceId());
workspaceMemberEntity.setUser(userEntity.get());
workspaceMemberEntity.setWorkspace(workspace.get());
return workspaceMemberRepository.save(workspaceMemberEntity);
}
}