1
package com.eucalyptus.auth.policy.key;
4
import org.apache.log4j.Logger;
5
import net.sf.json.JSONException;
6
import com.eucalyptus.auth.Contract;
7
import com.eucalyptus.auth.policy.PolicySpec;
8
import com.eucalyptus.auth.policy.condition.ConditionOp;
9
import com.eucalyptus.auth.policy.condition.NumericEquals;
11
@PolicyKey( Keys.EC2_KEEPALIVE )
12
public class KeepAlive extends ContractKey<Date> {
14
private static final Logger LOG = Logger.getLogger( KeepAlive.class );
16
private static final String KEY = Keys.EC2_KEEPALIVE;
18
private static final String ACTION_RUNINSTANCES = PolicySpec.VENDOR_EC2 + ":" + PolicySpec.EC2_RUNINSTANCES;
20
private static final long YEAR = 1000 * 60 * 60 * 24 * 365; // one year by default
21
private static final long MINUTE = 1000 * 60; // minute
24
public void validateConditionType( Class<? extends ConditionOp> conditionClass ) throws JSONException {
25
if ( NumericEquals.class != conditionClass ) {
26
throw new JSONException( KEY + " is not allowed in condition " + conditionClass.getName( ) + ". NumericEquals is required." );
31
public void validateValueType( String value ) throws JSONException {
32
KeyUtils.validateIntegerValue( value, KEY );
36
public Contract<Date> getContract( final String[] values ) {
37
return new Contract<Date>( ) {
39
public Contract.Type getType( ) {
40
return Contract.Type.EXPIRATION;
43
public Date getValue( ) {
44
return getExpiration( values[0] );
50
public boolean canApply( String action, String resourceType ) {
51
return ACTION_RUNINSTANCES.equals( action );
55
public boolean isBetter( Contract<Date> current, Contract<Date> update ) {
56
return update.getValue( ).after( current.getValue( ) );
60
* @param keepAlive In minute.
63
private static Date getExpiration( String keepAlive ) {
65
return new Date( System.currentTimeMillis( ) + Long.valueOf( keepAlive ) * MINUTE );
66
} catch ( Exception e ) {
68
return new Date( System.currentTimeMillis( ) + YEAR );