class Color extends AbstractCssProperty<Color> implements StateChangeInformer<Bean> {

    public void setRgbCssValue(final RgbCssValue rgbCssValue) {
        if (rgbCssValue == null) {
            throw new NullValueException("rgbCssValue can not be null");
        }
        if (this.rgbCssValue != null) {
            if (rgbCssValue.isAlreadyInUse()
                    && this.rgbCssValue.getStateChangeInformer() != rgbCssValue
                            .getStateChangeInformer()) {
                try {
                    final RgbCssValue rgbCssValueClone = CloneUtil
                            .deepClone(rgbCssValue);
                    this.rgbCssValue.setAlreadyInUse(false);
                    this.rgbCssValue = rgbCssValueClone;
                    if (LOGGER.isLoggable(Level.WARNING)) {
                        LOGGER.warning("cloned rgbCssValue " + rgbCssValue
                                + "(hashcode: " + rgbCssValue.hashCode()
                                + ") as it is already used by another object");
                    }
                } catch (final CloneNotSupportedException e) {
                    throw new InvalidValueException(e.toString());
                }
            } else {
                this.rgbCssValue.setAlreadyInUse(false);
                this.rgbCssValue = rgbCssValue;
            }
        } else {
            if (rgbCssValue.isAlreadyInUse()) {
                try {
                    this.rgbCssValue = CloneUtil.deepClone(rgbCssValue);
                    if (LOGGER.isLoggable(Level.WARNING)) {
                        LOGGER.warning("cloned rgbCssValue " + rgbCssValue
                                + "(hashcode: " + rgbCssValue.hashCode()
                                + ") as it is already used by another object");
                    }
                } catch (final CloneNotSupportedException e) {
                    throw new InvalidValueException(e.toString());
                }
            } else {
                this.rgbCssValue = rgbCssValue;
            }
        }
        cssValue = this.rgbCssValue.getValue();
        this.rgbCssValue.setStateChangeInformer(this);
        this.rgbCssValue.setAlreadyInUse(true);
        makeRgbaCssValueNull();
        makeHslCssValueNull();
        makeHslaCssValueNull();
    }

    public  Color();
    public  Color(final String cssValue);
    public  Color(final Color color);
    public  Color(final CssColorName cssColorName);
    public  Color(final RgbCssValue rgbCssValue);

}