/************************************************************************* * (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/. ************************************************************************/ package com.eucalyptus.portal.persist; import java.util.function.Function; import javax.annotation.Nullable; import com.eucalyptus.auth.principal.OwnerFullName; import com.eucalyptus.component.annotation.ComponentNamed; import com.eucalyptus.entities.AbstractPersistentSupport; import com.eucalyptus.portal.BillingAccount; import com.eucalyptus.portal.BillingAccounts; import com.eucalyptus.portal.PortalMetadataException; import com.eucalyptus.portal.PortalMetadataNotFoundException; import com.eucalyptus.portal.common.PortalMetadata; import com.eucalyptus.util.CompatFunction; import com.eucalyptus.util.Exceptions; /** * */ @ComponentNamed public class PersistenceBillingAccounts extends AbstractPersistentSupport<PortalMetadata.BillingAccountMetadata,BillingAccount,PortalMetadataException> implements BillingAccounts { protected PersistenceBillingAccounts( ) { super( "account" ); } @SuppressWarnings( "ThrowableResultOfMethodCallIgnored" ) @Override protected PortalMetadataException notFoundException( final String message, final Throwable cause ) { final PortalMetadataNotFoundException exception = Exceptions.findCause( cause, PortalMetadataNotFoundException.class ); if ( exception != null ) { return exception; } return new PortalMetadataNotFoundException( message, cause ); } @Override protected PortalMetadataException metadataException( final String message, final Throwable cause ) { final PortalMetadataException exception = Exceptions.findCause( cause, PortalMetadataException.class ); if ( exception != null ) { return exception; } return new PortalMetadataException( message, cause ); } @Override protected BillingAccount exampleWithOwner( final OwnerFullName ownerFullName ) { final BillingAccount billingAccount = new BillingAccount( ); billingAccount.setOwner( ownerFullName ); return billingAccount; } @Override protected BillingAccount exampleWithName( final OwnerFullName ownerFullName, final String name ) { final BillingAccount billingAccount = new BillingAccount( ); billingAccount.setOwner( ownerFullName ); billingAccount.setDisplayName( name ); return billingAccount; } @Override public <T> T lookupByAccount( final String accountNumber, @Nullable final OwnerFullName ownerFullName, final Function<? super BillingAccount, T> transform ) throws PortalMetadataException { return lookupByName( ownerFullName, accountNumber, CompatFunction.of( transform ) ); } @Override public <T> T updateByAccount( final String accountNumber, @Nullable final OwnerFullName ownerFullName, final Function<? super BillingAccount, T> updateTransform ) throws PortalMetadataException { return withRetries( ).updateByExample( exampleWithName( ownerFullName, accountNumber ), ownerFullName, accountNumber, CompatFunction.of( updateTransform ) ); } @Override public <T> T save( final BillingAccount account, final Function<? super BillingAccount, T> transform ) throws PortalMetadataException { return transform.apply( save( account ) ); } }