/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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 org.jbpm.services.task.identity; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import org.kie.api.task.model.Group; import org.kie.api.task.model.OrganizationalEntity; import org.kie.api.task.model.User; import org.kie.internal.task.api.TaskModelProvider; import org.kie.internal.task.api.UserInfo; import org.kie.internal.task.api.model.InternalOrganizationalEntity; public class PropertyUserInfoImpl extends AbstractUserGroupInfo implements UserInfo { protected Map<String, Map<String, Object>> registry = new HashMap<String, Map<String,Object>>(); //no no-arg constructor to prevent cdi from auto deploy public PropertyUserInfoImpl(boolean activate) { try { String propertiesLocation = System.getProperty("jbpm.user.info.properties"); Properties registryProps = readProperties(propertiesLocation, "classpath:/userinfo.properties"); buildRegistry(registryProps); } catch (Exception e) { throw new IllegalStateException("Problem loading userinfo properties", e); } } /** * Constructs default UserInfo implementation to provide required information to the escalation handler. * following is the string for every organizational entity * entityId=email:locale:displayname:[member,member] * members are optional and should be given for group entities * @param registryProps */ public PropertyUserInfoImpl(Properties registryProps) { buildRegistry(registryProps); } public String getDisplayName(OrganizationalEntity entity) { Map<String, Object> entityInfo = registry.get(entity.getId()); if (entityInfo != null) { return (String) entityInfo.get("name"); } return null; } @SuppressWarnings("unchecked") public Iterator<OrganizationalEntity> getMembersForGroup(Group group) { Map<String, Object> entityInfo = registry.get(group.getId()); if (entityInfo != null) { return ((List<OrganizationalEntity>) entityInfo.get("members")).iterator(); } return null; } public boolean hasEmail(Group group) { Map<String, Object> entityInfo = registry.get(group.getId()); if (entityInfo != null) { return entityInfo.containsKey("email"); } return false; } public String getEmailForEntity(OrganizationalEntity entity) { Map<String, Object> entityInfo = registry.get(entity.getId()); if (entityInfo != null) { return (String) entityInfo.get("email"); } throw new IllegalStateException("No EMail address found for " + entity.getId()); } public String getLanguageForEntity(OrganizationalEntity entity) { Map<String, Object> entityInfo = registry.get(entity.getId()); if (entityInfo != null) { return (String) entityInfo.get("locale"); } return null; } protected void buildRegistry(Properties registryProps) { if (registryProps != null) { Iterator<Object> propertyKeys = registryProps.keySet().iterator(); while (propertyKeys.hasNext()) { String propertyKey = (String) propertyKeys.next(); // following is the string for every organizational entity // email:locale:displayname:[member,member] // members are optional and should be given for group entities String propertyValue = registryProps.getProperty(propertyKey); String[] elems = propertyValue.split(":"); Map<String, Object> entityInfo = new HashMap<String, Object>(); entityInfo.put("email", elems[0]); entityInfo.put("locale", elems[1]); entityInfo.put("name", elems[2]); if (elems.length == 4 && elems[3] != null) { String memberList = elems[3]; if (memberList.startsWith("[")) { memberList = memberList.substring(1); } if (memberList.endsWith("]")) { memberList = memberList.substring(0, memberList.length()-1); } String[] members = memberList.split(","); List<OrganizationalEntity> membersList = new ArrayList<OrganizationalEntity>(); for (String member : members) { User user = TaskModelProvider.getFactory().newUser(); ((InternalOrganizationalEntity) user).setId(member); membersList.add(user); } entityInfo.put("members", membersList); } registry.put(propertyKey, entityInfo); } } } }