/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* 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
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.account.api;
import org.eclipse.che.account.event.BeforeAccountRemovedEvent;
import org.eclipse.che.account.shared.model.Account;
import org.eclipse.che.account.spi.AccountDao;
import org.eclipse.che.account.spi.AccountImpl;
import org.eclipse.che.api.core.ConflictException;
import org.eclipse.che.api.core.NotFoundException;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.core.notification.EventService;
import javax.inject.Inject;
import javax.inject.Singleton;
import static java.util.Objects.requireNonNull;
/**
* Facade for Account related operations.
*
* @author Sergii Leschenko
*/
@Singleton
public class AccountManager {
private final AccountDao accountDao;
private final EventService eventService;
@Inject
public AccountManager(AccountDao accountDao, EventService eventService) {
this.accountDao = accountDao;
this.eventService = eventService;
}
/**
* Creates account.
*
* @param account
* account to create
* @throws NullPointerException
* when {@code account} is null
* @throws ConflictException
* when account with such name or id already exists
* @throws ServerException
* when any other error occurs during account creating
*/
public void create(Account account) throws ConflictException, ServerException {
requireNonNull(account, "Required non-null account");
accountDao.create(new AccountImpl(account));
}
/**
* Updates account by replacing an existing account entity with a new one.
*
* @param account
* account to update
* @throws NullPointerException
* when {@code account} is null
* @throws NotFoundException
* when account with id {@code account.getId()} is not found
* @throws ConflictException
* when account's new name is not unique
* @throws ServerException
* when any other error occurs
*/
public void update(Account account) throws NotFoundException, ConflictException, ServerException {
requireNonNull(account, "Required non-null account");
accountDao.update(new AccountImpl(account));
}
/**
* Gets account by identifier.
*
* @param id
* id of account to fetch
* @return account instance with given id
* @throws NullPointerException
* when {@code id} is null
* @throws NotFoundException
* when account with given {@code id} was not found
* @throws ServerException
* when any other error occurs during account fetching
*/
public Account getById(String id) throws NotFoundException, ServerException {
requireNonNull(id, "Required non-null account id");
return accountDao.getById(id);
}
/**
* Gets account by name.
*
* @param name
* name of account to fetch
* @return account instance with given name
* @throws NullPointerException
* when {@code name} is null
* @throws NotFoundException
* when account with given {@code name} was not found
* @throws ServerException
* when any other error occurs during account fetching
*/
public Account getByName(String name) throws NotFoundException, ServerException {
requireNonNull(name, "Required non-null account name");
return accountDao.getByName(name);
}
/**
* Removes account by specified {@code id}
*
* @param id
* account identifier
* @throws NullPointerException
* when {@code id} is null
* @throws ServerException
* when any other error occurs
*/
public void remove(String id) throws ServerException {
requireNonNull(id, "Required non-null account id");
try {
AccountImpl toRemove = accountDao.getById(id);
eventService.publish(new BeforeAccountRemovedEvent(toRemove)).propagateException();
accountDao.remove(id);
} catch (NotFoundException ignored) {
//account is already removed
}
}
}