/* * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.aaa.datastore.h2; import static com.google.common.base.Verify.verifyNotNull; import com.google.common.annotations.Beta; import org.opendaylight.aaa.api.IDMStoreException; import org.opendaylight.aaa.api.IIDMStore; import org.opendaylight.aaa.api.model.Domain; import org.opendaylight.aaa.api.model.Domains; import org.opendaylight.aaa.api.model.Grant; import org.opendaylight.aaa.api.model.Grants; import org.opendaylight.aaa.api.model.Role; import org.opendaylight.aaa.api.model.Roles; import org.opendaylight.aaa.api.model.User; import org.opendaylight.aaa.api.model.Users; import org.opendaylight.aaa.api.password.service.PasswordHashService; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; import org.osgi.service.metatype.annotations.AttributeDefinition; import org.osgi.service.metatype.annotations.Designate; import org.osgi.service.metatype.annotations.ObjectClassDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Beta @Component(immediate = true, configurationPid = "org.opendaylight.aaa.h2", property = "type=default") @Designate(ocd = OSGiH2Store.Configuration.class) // FIXME: merge this with H2Store when we have constructor injection public final class OSGiH2Store implements IIDMStore { @ObjectClassDefinition public @interface Configuration { @AttributeDefinition(name = "dbUserName") String username() default "foo"; @AttributeDefinition(name = "dbPassword") String password() default "bar"; } private static final Logger LOG = LoggerFactory.getLogger(OSGiH2Store.class); @Reference PasswordHashService passwordService; private H2Store delegate; @Override public Domain writeDomain(final Domain domain) throws IDMStoreException { return delegate().writeDomain(domain); } @Override public Domain readDomain(final String domainid) throws IDMStoreException { return delegate().readDomain(domainid); } @Override public Domain deleteDomain(final String domainid) throws IDMStoreException { return delegate().deleteDomain(domainid); } @Override public Domain updateDomain(final Domain domain) throws IDMStoreException { return delegate().updateDomain(domain); } @Override public Domains getDomains() throws IDMStoreException { return delegate().getDomains(); } @Override public Role writeRole(final Role role) throws IDMStoreException { return delegate().writeRole(role); } @Override public Role readRole(final String roleid) throws IDMStoreException { return delegate().readRole(roleid); } @Override public Role deleteRole(final String roleid) throws IDMStoreException { return delegate().deleteRole(roleid); } @Override public Role updateRole(final Role role) throws IDMStoreException { return delegate().updateRole(role); } @Override public Roles getRoles() throws IDMStoreException { return delegate().getRoles(); } @Override public User writeUser(final User user) throws IDMStoreException { return delegate().writeUser(user); } @Override public User readUser(final String userid) throws IDMStoreException { return delegate().readUser(userid); } @Override public User deleteUser(final String userid) throws IDMStoreException { return delegate().deleteUser(userid); } @Override public User updateUser(final User user) throws IDMStoreException { return delegate().updateUser(user); } @Override public Users getUsers() throws IDMStoreException { return delegate().getUsers(); } @Override public Users getUsers(final String username, final String domain) throws IDMStoreException { return delegate().getUsers(username, domain); } @Override public Grant writeGrant(final Grant grant) throws IDMStoreException { return delegate().writeGrant(grant); } @Override public Grant readGrant(final String grantid) throws IDMStoreException { return delegate().readGrant(grantid); } @Override public Grant readGrant(final String domainid, final String userid, final String roleid) throws IDMStoreException { return delegate().readGrant(domainid, userid, roleid); } @Override public Grant deleteGrant(final String grantid) throws IDMStoreException { return delegate().deleteGrant(grantid); } @Override public Grants getGrants(final String domainid, final String userid) throws IDMStoreException { return delegate().getGrants(domainid, userid); } @Override public Grants getGrants(final String userid) throws IDMStoreException { return delegate().getGrants(userid); } @Activate void activate(final Configuration config) { delegate = new H2Store(config.username(), config.password(), passwordService); LOG.info("H2 IDMStore activated"); } @Deactivate void deactivate() { delegate = null; LOG.info("H2 IDMStore deactivated"); } private H2Store delegate() { return verifyNotNull(delegate); } }