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

org.nakedobjects.metamodel.facets.propparam.specification.MustSatisfySpecificationFacet Maven / Gradle / Ivy

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

import java.util.List;

import org.nakedobjects.applib.events.ValidityEvent;
import org.nakedobjects.applib.spec.Specification;
import org.nakedobjects.applib.util.ReasonBuffer;
import org.nakedobjects.metamodel.adapter.NakedObject;
import org.nakedobjects.metamodel.facets.Facet;
import org.nakedobjects.metamodel.facets.FacetAbstract;
import org.nakedobjects.metamodel.facets.FacetHolder;
import org.nakedobjects.metamodel.interactions.ProposedHolder;
import org.nakedobjects.metamodel.interactions.ValidatingInteractionAdvisor;
import org.nakedobjects.metamodel.interactions.ValidityContext;

public class MustSatisfySpecificationFacet extends FacetAbstract implements ValidatingInteractionAdvisor {

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

    private final List specifications;

    public MustSatisfySpecificationFacet(final List specifications, final FacetHolder holder) {
        super(type(), holder, false);
        this.specifications = specifications;
    }

    public String invalidates(final ValidityContext validityContext) {
        if (!(validityContext instanceof ProposedHolder)) {
            return null;
        }
        ProposedHolder proposedHolder = (ProposedHolder) validityContext;
        final NakedObject targetNO = proposedHolder.getProposed();
        final Object targetObject = targetNO.getObject();
        ReasonBuffer buf = new ReasonBuffer();
        for(Specification specification: specifications) {
            buf.append(specification.satisfies(targetObject));
        }
        return buf.getReason();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy