/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.incubator.configuration.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Indicates that a certain property of a java bean shall appear as a
* {@link de.rcenvironment.core.utils.incubator.configuration.ConfigurationProperty} in the
* {@link de.rcenvironment.core.utils.incubator.configuration.ConfigurationInfo} of the holder class.
*
* @author Christian Weiss
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Configurable {
/**
* The interface to be implemented by value providers of a custom choice set.
*/
public interface ValueProvider {
/**
* Injects the object holding the associated
* {@link de.rcenvironment.core.utils.incubator.configuration.ConfigurationProperty}.
*
* @param object the holding object
*/
void setObject(Object object);
/**
* Returns the values which are valid for the configuration property.
*
* @return the valid values
*/
Object[] getValues();
}
/**
* The interface to be implemented by label providers of a custom choice set.
*/
public interface LabelProvider {
/**
* Injects the object holding the associated
* {@link de.rcenvironment.core.utils.incubator.configuration.ConfigurationProperty}.
*
* @param object the holding object
*/
void setObject(Object object);
/**
* Returns the label for the given value object.
*
* @param object the value object
* @return the label
*/
String getLabel(Object object);
}
/**
* The information whether the annotated property represents a
* {@link de.rcenvironment.core.utils.incubator.configuration.ConfigurationProperty}.
*
* @return true, if the annotated property represents a
* {@link de.rcenvironment.core.utils.incubator.configuration.ConfigurationProperty}.
*/
boolean value() default true;
/**
* Returns the configured choice provider.
*
* @return the class<? extends choice provider>
*/
Class<? extends ValueProvider> valueProvider() default NoValueProvider.class;
/**
* Returns the configured choice provider.
*
* @return the class<? extends choice provider>
*/
Class<? extends LabelProvider> labelProvider() default NoLabelProvider.class;
/**
* The abstract {@link ValueProvider} class providing a value for an empty selection.
*/
abstract class NoValueProvider implements ValueProvider {
//
}
/**
* The abstract {@link LabelProvider} class providing a value for an empty selection.
*/
abstract class NoLabelProvider implements LabelProvider {
//
}
}