package com.plumdo.flow.identity; import java.util.ArrayList; import java.util.List; import org.flowable.idm.api.Group; import org.flowable.idm.engine.IdmEngineConfiguration; import org.flowable.idm.engine.impl.GroupQueryImpl; import org.flowable.idm.engine.impl.persistence.entity.GroupEntity; import org.flowable.idm.engine.impl.persistence.entity.GroupEntityImpl; import org.flowable.idm.engine.impl.persistence.entity.GroupEntityManagerImpl; import org.flowable.idm.engine.impl.persistence.entity.data.GroupDataManager; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import com.plumdo.common.client.rest.RestClient; import com.plumdo.common.model.ObjectMap; /** * TODO * * @author wengwenhui * @date 2018年4月19日 */ public class AiaGroupEntityManager extends GroupEntityManagerImpl { private RestClient restClient; public AiaGroupEntityManager(RestClient restClient, IdmEngineConfiguration idmEngineConfiguration, GroupDataManager groupDataManager) { super(idmEngineConfiguration, groupDataManager); this.restClient = restClient; } @Override public GroupEntity findById(String entityId) { return restClient.getForIdentityService("/groups/" + entityId, GroupEntity.class); } @Override public List<Group> findGroupByQueryCriteria(GroupQueryImpl query) { List<Group> groups = new ArrayList<>(); ObjectMap response = restClient.getForIdentityService("/groups", queryToParams(query), ObjectMap.class); List<ObjectMap> dataMap = response.getAsList("data"); for (ObjectMap groupMap : dataMap) { Group group = new GroupEntityImpl(); group.setId(groupMap.getAsString("id")); group.setName(groupMap.getAsString("name")); group.setType(groupMap.getAsString("type")); groups.add(group); } return groups; } @Override public long findGroupCountByQueryCriteria(GroupQueryImpl query) { ObjectMap response = restClient.getForIdentityService("/groups", queryToParams(query), ObjectMap.class); return response.getAsLong("total"); } private MultiValueMap<String, String> queryToParams(GroupQueryImpl query) { MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>(); if (query.getName() != null) { queryParams.add("name", query.getName()); } if (query.getNameLike() != null) { queryParams.add("name", query.getNameLike()); } if (query.getType() != null) { queryParams.add("type", query.getType()); } if (query.getId() != null) { queryParams.add("id", query.getId()); } return queryParams; } }