/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.isis.applib.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Layout hints for action parameters.
*
* @see org.apache.isis.applib.annotation.PropertyLayout
*/
@Inherited
@Target({ ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface ParameterLayout {
/**
* Indicates the css class that a parameter should have.
*/
String cssClass() default "";
/**
* Description of this property, eg to be rendered in a tooltip.
*/
String describedAs() default "";
/**
* In forms, positioning of the label (left, top or none) relative to the parameter value.
*
* <p>
* If not specified, the default depends upon the parameter value's datatype.
* </p>
*/
LabelPosition labelPosition() default LabelPosition.DEFAULT;
/**
* Name of this action parameter.
*/
String named() default "";
/**
* A flag indicating whether the value of {@linkplain #named()} should be HTML escaped or not.
*/
boolean namedEscaped() default true;
/**
* For string parameters (and properties), whether to render as a text area over multiple lines.
*/
int multiLine() default -1;
/**
* For date parameters (and properties ) only, instructs the viewer that the date should be rendered as one day
* prior to the actually stored date.
*
* <p>
* This is intended to be used so that an exclusive end date of an interval
* can be rendered as 1 day before the actual value stored.
* </p>
*
* <p>
* For example:
* </p>
* <pre>
* public void updateDates(
* @ParameterLayout(named="From") LocalDate startDate,
* @ParameterLayout(named="To"), renderedAsOneDayBefore=true) LocalDate startDate) { ... }
* </pre>
*
* <p>
* Here, the interval of the [1-may-2013,1-jun-2013) would be rendered as the dates
* 1-may-2013 for the start date but using 31-may-2013 (the day before) for the end date. What is stored
* In the domain object, itself, however, the value stored is 1-jun-2013.
* </p>
*/
boolean renderedAsDayBefore() default false;
/**
* The typical entry length of a field, use to determine the optimum width for display
*/
int typicalLength() default -1;
}