/** * Licensed to the Austrian Association for Software Tool Integration (AASTI) * under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright * ownership. The AASTI licenses this file to you 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 org.openengsb.connector.userprojects.ldap.internal; import java.util.List; import org.apache.directory.shared.ldap.model.entry.Entry; import org.apache.directory.shared.ldap.model.name.Dn; import org.openengsb.connector.userprojects.ldap.internal.ldap.DnFactory; import org.openengsb.connector.userprojects.ldap.internal.ldap.EntryFactory; import org.openengsb.core.api.AliveState; import org.openengsb.core.common.AbstractOpenEngSBConnectorService; import org.openengsb.domain.userprojects.UserProjectsDomain; import org.openengsb.domain.userprojects.model.Assignment; import org.openengsb.domain.userprojects.model.Permission; import org.openengsb.domain.userprojects.model.Project; import org.openengsb.domain.userprojects.model.Role; import org.openengsb.domain.userprojects.model.User; import org.openengsb.infrastructure.ldap.LdapDao; import org.openengsb.infrastructure.ldap.MissingParentException; import org.openengsb.infrastructure.ldap.NoSuchNodeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UserProjectsLdapServiceImpl extends AbstractOpenEngSBConnectorService implements UserProjectsDomain { private static final Logger LOGGER = LoggerFactory.getLogger(UserProjectsLdapServiceImpl.class); private LdapDao ldapDao; public UserProjectsLdapServiceImpl() { } public UserProjectsLdapServiceImpl(LdapDao ldapDao) { this.ldapDao = ldapDao; } @Override public AliveState getAliveState() { if (ldapDao == null) { return AliveState.OFFLINE; } return AliveState.ONLINE; } public void setLdapDao(LdapDao dao) { ldapDao = dao; } @Override public void updateAssignments(List<Assignment> assignments) { for (Assignment assignment : assignments) { storeOverwriteExisting(EntryFactory.assignmentStructure(assignment)); } } private void storeOverwriteExisting(List<Entry> entryList) { try { ldapDao.storeOverwriteExisting(entryList); } catch (NoSuchNodeException | MissingParentException e) { LOGGER.error("LDAP exception", e); throw new LdapRuntimeException(e); } } @Override public void updatePermissions(List<Permission> permissions) { for (Permission permission : permissions) { storeOverwriteExisting(EntryFactory.permissionStructure(permission)); } } @Override public void updateProjects(List<Project> projects) { for (Project project : projects) { storeOverwriteExisting(EntryFactory.projectStructure(project)); } } @Override public void updateRoles(List<Role> roles) { for (Role role : roles) { storeOverwriteExisting(EntryFactory.roleStructure(role)); } } @Override public void updateUsers(List<User> users) { for (User user : users) { storeOverwriteExisting(EntryFactory.userStructure(user)); } } @Override public void deleteAssignments(List<Assignment> assignments) { for (Assignment assignment : assignments) { deleteSubtreeIncludingRoot(DnFactory.assignment(assignment)); } } private void deleteSubtreeIncludingRoot(Dn dn) { try { ldapDao.deleteSubtreeIncludingRoot(dn); } catch (NoSuchNodeException | MissingParentException e) { LOGGER.error("LDAP exception", e); throw new LdapRuntimeException(e); } } @Override public void deletePermissions(List<Permission> permissions) { for (Permission permission : permissions) { deleteSubtreeIncludingRoot(DnFactory.permission(permission)); } } @Override public void deleteProjects(List<Project> projects) { for (Project project : projects) { deleteSubtreeIncludingRoot(DnFactory.project(project)); } } @Override public void deleteRoles(List<Role> roles) { for (Role role : roles) { deleteSubtreeIncludingRoot(DnFactory.role(role)); } } @Override public void deleteUsers(List<User> users) { for (User user : users) { deleteSubtreeIncludingRoot(DnFactory.user(user)); } } }