All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nakedobjects.metamodel.facets.propparam.validate.maxlength.MaxLengthFacetAbstract Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.metamodel.facets.propparam.validate.maxlength;

import org.nakedobjects.applib.events.ValidityEvent;
import org.nakedobjects.metamodel.adapter.NakedObject;
import org.nakedobjects.metamodel.facets.Facet;
import org.nakedobjects.metamodel.facets.FacetHolder;
import org.nakedobjects.metamodel.facets.SingleIntValueFacetAbstract;
import org.nakedobjects.metamodel.interactions.ProposedHolder;
import org.nakedobjects.metamodel.interactions.ValidityContext;


public abstract class MaxLengthFacetAbstract extends SingleIntValueFacetAbstract implements MaxLengthFacet {

    public static Class type() {
        return MaxLengthFacet.class;
    }

    public MaxLengthFacetAbstract(final int value, final FacetHolder holder) {
        super(type(), holder, value);
    }

    /**
     * Whether the provided argument exceeds the {@link #value() maximum length}.
     */
    public boolean exceeds(final NakedObject nakedObject) {
        final String str = unwrapString(nakedObject);
        if (str == null) {
            return false;
        }
        final int maxLength = value();
        return maxLength != 0 && str.length() > maxLength;
    }

    public String invalidates(final ValidityContext context) {
        if (!(context instanceof ProposedHolder)) {
            return null;
        }
        final ProposedHolder proposedHolder = (ProposedHolder) context;
        final NakedObject proposedArgument = proposedHolder.getProposed();
        if (!exceeds(proposedArgument)) {
            return null;
        }
        return "Proposed value '" + proposedArgument.titleString() + "' exceeds the maximum length of " + value();
    }

    @Override
    protected String toStringValues() {
        final int val = value();
        return val == 0 ? "unlimited" : String.valueOf(val);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy