/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* 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 org.keycloak.testsuite.domainextension.spi.impl;
import org.keycloak.connections.jpa.JpaConnectionProvider;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.testsuite.domainextension.CompanyRepresentation;
import org.keycloak.testsuite.domainextension.jpa.Company;
import org.keycloak.testsuite.domainextension.spi.ExampleService;
import javax.persistence.EntityManager;
import java.util.LinkedList;
import java.util.List;
public class ExampleServiceImpl implements ExampleService {
private final KeycloakSession session;
public ExampleServiceImpl(KeycloakSession session) {
this.session = session;
if (getRealm() == null) {
throw new IllegalStateException("The service cannot accept a session without a realm in it's context.");
}
}
private EntityManager getEntityManager() {
return session.getProvider(JpaConnectionProvider.class).getEntityManager();
}
protected RealmModel getRealm() {
return session.getContext().getRealm();
}
@Override
public List<CompanyRepresentation> listCompanies() {
List<Company> companyEntities = getEntityManager().createNamedQuery("findByRealm", Company.class)
.setParameter("realmId", getRealm().getId())
.getResultList();
List<CompanyRepresentation> result = new LinkedList<>();
for (Company entity : companyEntities) {
result.add(new CompanyRepresentation(entity));
}
return result;
}
@Override
public CompanyRepresentation findCompany(String id) {
Company entity = getEntityManager().find(Company.class, id);
return entity==null ? null : new CompanyRepresentation(entity);
}
@Override
public CompanyRepresentation addCompany(CompanyRepresentation company) {
Company entity = new Company();
String id = company.getId()==null ? KeycloakModelUtils.generateId() : company.getId();
entity.setId(id);
entity.setName(company.getName());
entity.setRealmId(getRealm().getId());
getEntityManager().persist(entity);
company.setId(id);
return company;
}
@Override
public void deleteAllCompanies() {
EntityManager em = getEntityManager();
List<Company> companyEntities = em.createNamedQuery("findByRealm", Company.class)
.setParameter("realmId", getRealm().getId())
.getResultList();
for (Company entity : companyEntities) {
em.remove(entity);
}
}
public void close() {
// Nothing to do.
}
}