class ProfileDefinitionAware extends InitializableObject {

    private ProfileDefinition profileDefinition;

    /**
     * <p>Getter for the field <code>profileDefinition</code>.</p>
     *
     * @return a {@link ProfileDefinition} object
     */
    public ProfileDefinition getProfileDefinition() {
        return profileDefinition;
    }

    /**
     * <p>Setter for the field <code>profileDefinition</code>.</p>
     *
     * @param profileDefinition a {@link ProfileDefinition} object
     */
    public void setProfileDefinition(final ProfileDefinition profileDefinition) {
        CommonHelper.assertNotNull("profileDefinition", profileDefinition);
        this.profileDefinition = profileDefinition;
    }

    /**
     * <p>setProfileDefinitionIfUndefined.</p>
     *
     * @param profileDefinition a {@link ProfileDefinition} object
     */
    protected void setProfileDefinitionIfUndefined(final ProfileDefinition profileDefinition) {<FILL_FUNCTION_BODY>}
}

        CommonHelper.assertNotNull("profileDefinition", profileDefinition);
        if (this.profileDefinition == null) {
            this.profileDefinition = profileDefinition;
        }
    
<methods>public non-sealed void <init>() ,public int getNbAttempts() ,public void init() ,public void init(boolean) ,public final boolean isInitialized() ,public void reinit() <variables>private java.util.concurrent.atomic.AtomicBoolean initialized,private volatile java.lang.Long lastAttempt,private int maxAttempts,private long minTimeIntervalBetweenAttemptsInMilliseconds,private java.util.concurrent.atomic.AtomicInteger nbAttempts