AccountingRepositoryImpl.java

package com.tradecloud.repository.impl;

import com.tradecloud.authentication.MultiTenantUtil;
import com.tradecloud.authentication.User;
import com.tradecloud.domain.model.accounting.Snapshot;
import com.tradecloud.repository.AccountingRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;

import java.util.Arrays;
import java.util.List;

/**
 * Accounting Repository.
 */
@Repository(value = "accountingRepository")
public class AccountingRepositoryImpl extends RepositoryBaseImpl<Snapshot, Object> implements AccountingRepository {

    Logger logger = Logger.getLogger(AccountingRepositoryImpl.class);
    private static final long serialVersionUID = 1L;

    @Override
    public void storeSnapshot(Snapshot snapshot) {
        saveOrUpdate(snapshot);
    }

    @Override
    public Snapshot getSnapshot(String reference, Snapshot.SnapshotType snapshotType) {
        User user = MultiTenantUtil.getActiveUser();

        @SuppressWarnings("unchecked")
        List<Snapshot> results =
                (List<Snapshot>) getNamedQueryAndNamedParam("findSnapshots",
                        new String[]{"reference", "consumerTag", "snapshotType"},
                        Arrays.asList(reference, user.getUsername(), snapshotType).toArray());

        return results.isEmpty() ? null : results.iterator().next();
    }

    @Override
    public void removeSnapshot(String reference, Snapshot.SnapshotType snapshotType) {
        Snapshot snapshot = getSnapshot(reference, snapshotType);
        if (snapshot != null) {
            delete(snapshot);
        } else {
            logger.info("No Snapshot (" + snapshotType.name() + ") found to delete: " + reference);
        }
    }
}