Uploaded image for project: 'Causeway'
  1. Causeway
  2. CAUSEWAY-1199

[WON'T FIX] [DOC] Screencast for how facet factories work

    XMLWordPrintableJSON

Details

    • Documentation
    • Status: Closed
    • Minor
    • Resolution: Won't Fix
    • 1.9.0
    • 2.0.0-M5
    • Docs & Website
    • None

    Description

      [ObjectSpecification]->*[ObjectMember]
      [ObjectMember]^-[ObjectProperty]
      [ObjectMember]^-[ObjectCollection]
      [ObjectMember]^-[ObjectAction]
      [ObjectAction]->*[ObjectActionParameter]

      ObjectSpecification someSpec = ...

      NamedFacet f = someSpec.getFacet(NamedFacet.class);
      String name = f.getName();

      DescriptionFacet df = someSpec.getFacet(DescriptionFacet.class);
      String df.getDescription();

      hide / disable / validate

      "see it" "use it" "do it"

      HidingInteractionAdvisor

      @Hidden
      @Property(hidden=true)
      hideXxx()
      security

      DisablingInteractionAdvisor

      ValidatingInteractionAdvisor

      List<ObjectSpec> specs = IsisContext.getSpecificationLoader().allSpecifications();

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      package domainapp.app.facets.forbidden;

      import java.util.Arrays;
      import java.util.List;

      import com.google.common.collect.Lists;

      import org.apache.isis.applib.events.ValidityEvent;
      import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
      import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
      import org.apache.isis.core.metamodel.facetapi.FacetHolder;
      import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
      import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
      import org.apache.isis.core.metamodel.interactions.ValidityContext;
      import org.apache.isis.core.metamodel.spec.ObjectSpecification;

      public class ForbiddenWordsFacet extends FacetAbstract implements ValidatingInteractionAdvisor {

      private List<String> forbiddenStrings = Lists.newArrayList(Arrays.asList("Fred", "Jones"));

      public ForbiddenWordsFacet(
      final FacetHolder holder)

      { super(ForbiddenWordsFacet.class, holder, Derivation.NOT_DERIVED); }

      @Override
      public String invalidates(final ValidityContext<? extends ValidityEvent> ic) {
      if (!(ic instanceof ActionArgumentContext))

      { return null; }

      final ActionArgumentContext actionArgumentContext = (ActionArgumentContext) ic;
      ObjectAdapter proposed = actionArgumentContext.getProposed();
      ObjectSpecification specification = proposed.getSpecification();
      Class<?> correspondingClass = specification.getCorrespondingClass();
      if(java.lang.String.class.isAssignableFrom(correspondingClass)) {
      String proposedStr = (String) proposed.getObject();
      for (String s : forbiddenStrings) {
      if(proposedStr.contains(s))

      { return String.format("Cannot contain '%s'", s); }

      }
      }
      return null;
      }
      }

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      package domainapp.app.facets.forbidden;

      import org.apache.isis.core.metamodel.facetapi.FacetUtil;
      import org.apache.isis.core.metamodel.facetapi.FeatureType;
      import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
      import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;

      public class ForbiddenWordsFacetFactory extends FacetFactoryAbstract {

      public ForbiddenWordsFacetFactory()

      { super(FeatureType.PARAMETERS_ONLY); }

      @Override
      public void processParams(final ProcessParameterContext processParameterContext)

      { FacetedMethodParameter facetHolder = processParameterContext.getFacetHolder(); ForbiddenWordsFacet facet = new ForbiddenWordsFacet(facetHolder); FacetUtil.addFacet(facet); }

      }

      isis.reflector.facets.include=domainapp.app.facets.forbidden.ForbiddenWordsFacetFactory

      Attachments

        Activity

          People

            Unassigned Unassigned
            danhaywood Daniel Keir Haywood
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: