/************************************************************************* * Copyright 2009-2013 Eucalyptus Systems, Inc. * * 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/. * * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need * additional information or have any questions. ************************************************************************/ package com.eucalyptus.autoscaling.common.internal.activities; import static com.eucalyptus.autoscaling.common.AutoScalingMetadata.AutoScalingGroupMetadata; import static com.eucalyptus.autoscaling.common.AutoScalingMetadata.ScalingActivityMetadata; import java.util.Collection; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.eucalyptus.autoscaling.common.msgs.Activity; import com.eucalyptus.autoscaling.common.internal.groups.AutoScalingGroup; import com.eucalyptus.autoscaling.common.internal.metadata.AutoScalingMetadataException; import com.eucalyptus.util.Callback; import com.eucalyptus.auth.principal.OwnerFullName; import com.eucalyptus.util.Strings; import com.eucalyptus.util.TypeMapper; import com.google.common.base.Function; import com.google.common.base.Predicate; /** * */ public abstract class ScalingActivities { public abstract <T> List<T> list( @Nullable OwnerFullName ownerFullName, @Nonnull Predicate<? super ScalingActivity> filter, @Nonnull Function<? super ScalingActivity,T> transform ) throws AutoScalingMetadataException; /** * List scaling activities with optional filters by group and id. * * @param ownerFullName The activity owner * @param group The activity group * @param activityIds The activity ids of interest (empty for any) * @param filter Additional ScalingActivity filter predicate * @return The list of matching ScalingActivities * @throws AutoScalingMetadataException If an error occurs. */ public abstract <T> List<T> list( @Nullable OwnerFullName ownerFullName, @Nullable AutoScalingGroupMetadata group, @Nonnull Collection<String> activityIds, @Nonnull Predicate<? super ScalingActivity> filter, @Nonnull Function<? super ScalingActivity,T> transform ) throws AutoScalingMetadataException; public abstract <T> List<T> listByActivityStatusCode( @Nullable OwnerFullName ownerFullName, @Nonnull Collection<ActivityStatusCode> statusCodes, @Nonnull Function<? super ScalingActivity,T> transform ) throws AutoScalingMetadataException; public abstract void update( OwnerFullName ownerFullName, String activityId, Callback<ScalingActivity> activityUpdateCallback ) throws AutoScalingMetadataException; public abstract boolean delete( ScalingActivityMetadata scalingActivity ) throws AutoScalingMetadataException; public abstract int deleteByCreatedAge( @Nullable OwnerFullName ownerFullName, long createdBefore ) throws AutoScalingMetadataException; public abstract ScalingActivity save( ScalingActivity scalingActivity ) throws AutoScalingMetadataException; public static Function<ScalingActivity,AutoScalingGroup> group() { return ScalingActivityToGroup.INSTANCE; } @TypeMapper public enum ScalingActivityTransform implements Function<ScalingActivity, Activity> { INSTANCE; @Override public Activity apply( final ScalingActivity activity ) { final Activity type = new Activity(); type.setActivityId( activity.getActivityId() ); type.setAutoScalingGroupName( activity.getAutoScalingGroupName() ); type.setCause( activity.getCauseAsString( ) ); type.setDescription( activity.getDescription() ); type.setDetails( activity.getDetails() ); type.setEndTime( activity.getEndTime() ); type.setProgress( activity.getProgress() ); type.setStartTime( activity.getCreationTimestamp() ); type.setStatusCode( Strings.toString( activity.getStatusCode( ) ) ); type.setStatusMessage( activity.getStatusMessage() ); return type; } } private enum ScalingActivityToGroup implements Function<ScalingActivity,AutoScalingGroup> { INSTANCE; @Override public AutoScalingGroup apply( @Nullable final ScalingActivity scalingActivity ) { return scalingActivity == null ? null : scalingActivity.getGroup(); } } }