package org.dcache.srm.request; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import org.dcache.srm.v2_2.TRetentionPolicy; public enum RetentionPolicy { REPLICA (TRetentionPolicy.REPLICA), OUTPUT (TRetentionPolicy.OUTPUT), CUSTODIAL (TRetentionPolicy.CUSTODIAL); private final TRetentionPolicy _policy; private static final ImmutableMap<TRetentionPolicy,RetentionPolicy> MAP; private static final String ERROR_MESSAGE; RetentionPolicy(TRetentionPolicy policy) { _policy = policy; } public TRetentionPolicy toTRetentionPolicy() { return _policy; } static { StringBuilder sb = new StringBuilder(); sb.append("Unknown RetentionPolicy: \"%s\"."); sb.append(" Supported values :"); Builder<TRetentionPolicy,RetentionPolicy> builder = new Builder<>(); for (RetentionPolicy value : values()) { builder.put(value._policy,value); sb.append(" \"").append(value._policy).append("\""); } MAP = builder.build(); ERROR_MESSAGE = sb.toString(); } public static RetentionPolicy fromTRetentionPolicy(TRetentionPolicy policy) { if ( policy == null ) { return null; } else { return MAP.get(policy); } } /** * this function provides wrapper of TRetentionPolicy.fromString * so that user gets better error handling */ public static RetentionPolicy fromString(String txt) throws IllegalArgumentException { try { TRetentionPolicy policy = TRetentionPolicy.fromString(txt); return fromTRetentionPolicy(policy); } catch (IllegalArgumentException e) { throw new IllegalArgumentException(String.format(ERROR_MESSAGE, txt)); } } }