001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020package org.apache.isis.core.metamodel.facets.mandatory; 021 022import org.apache.isis.core.metamodel.adapter.ObjectAdapter; 023import org.apache.isis.core.metamodel.facetapi.Facet; 024import org.apache.isis.core.metamodel.facetapi.FacetHolder; 025import org.apache.isis.core.metamodel.facets.MarkerFacet; 026import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor; 027 028/** 029 * Whether a property or a parameter is mandatory (not optional). 030 * 031 * <p> 032 * For a mandatory property, the object cannot be saved/updated without the 033 * value being provided. For a mandatory parameter, the action cannot be invoked 034 * without the value being provided. 035 * 036 * <p> 037 * In the standard Apache Isis Programming Model, specify mandatory by 038 * <i>omitting</i> the <tt>@Optional</tt> annotation. 039 */ 040public interface MandatoryFacet extends MarkerFacet, ValidatingInteractionAdvisor { 041 042 /** 043 * Whether this value is required but has not been provided (and is 044 * therefore invalid). 045 * 046 * <p> 047 * If the value has been provided, <i>or</i> if the property or parameter is 048 * not required, then will return <tt>false</tt>. 049 */ 050 boolean isRequiredButNull(ObjectAdapter adapter); 051 052 /** 053 * Indicates that the implementation is overridding the usual semantics, in 054 * other words that the {@link FacetHolder} to which this {@link Facet} is 055 * attached is <i>not</i> mandatory. 056 */ 057 public boolean isInvertedSemantics(); 058}