/* * 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; import java.util.Comparator; /** * Layout hints for collections. */ @Inherited @Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface CollectionLayout { /** * Indicates the css class that a collection should have. */ String cssClass() default ""; // ////////////////////////////////////// /** * Description of this collection, eg to be rendered in a tooltip. */ String describedAs() default ""; // ////////////////////////////////////// /** * Indicates which view is used by default to render the collection. * * <p> * The only view available within the core framework is "table". However, other views can be added * as extensions. Examples are those provided by the (non-ASF) <a href="isisaddons.org">Isis addons</a>, eg * "<a href="https://github.com/isisaddons/isis-wicket-excel">excel</a>", * "<a href="https://github.com/isisaddons/isis-wicket-fullcalendar2">calendar</a>" and * "<a href="https://github.com/isisaddons/isis-wicket-gmap3">map</a>". * </p> */ String defaultView() default ""; // ////////////////////////////////////// /** * Indicates where in the UI the collection should <i>not</i>not be visible. * * <p> * Only {@link Where#NOWHERE NOWHERE} or {@link Where#EVERYWHERE EVERYWHERE}/{@link Where#ANYWHERE ANYWHERE} * apply for collections. * </p> */ Where hidden() default Where.NOT_SPECIFIED; // ////////////////////////////////////// /** * Name of this collection (overriding the name derived from its name in code). */ String named() default ""; // ////////////////////////////////////// /** * A flag indicating whether the value of {@linkplain #named()} should be HTML escaped or not. */ boolean namedEscaped() default true; /** * The page size for instances of this class when rendered within * a table. * * <p> * If annotated on a collection, then the page size refers to * parented collections (eg <tt>Order#lineItems</tt>). * * <p> * If annotated on a type, then the page size refers to standalone * collections (eg as returned from a repository query). */ int paged() default -1; // ////////////////////////////////////// /** * Indicates that the rendering of a collection should be performed lazily or eagerly. * * <p> * By default, collections are rendered lazily, meaning its contents is not shown automatically. * * <p> * Using this attribute, an <tt>Order#lineItems</tt> collection might be rendered eagerly. A viewer might use this * hint to "open" the collection automatically so that the user could see a list of line items * immediately when the order is rendered. * </p> * * <p> * There is some similarity between this concept and that of eager-loading as supported by some object stores. * </p> * * @deprecated - use {@link #defaultView()} set to "table" instead. */ @Deprecated RenderType render() default RenderType.LAZILY; // ////////////////////////////////////// /** * Indicates that the elements in a ({@link java.util.SortedSet}) collection should be sorted according to a different order than the * natural sort order, as defined by the specified{@link java.util.Comparator}. * * <p> * Whenever there is a collection of type {@link java.util.SortedSet}, the domain entity referenced * is expected to implement {@link Comparable}, ie to have a natural ordering. In effect tis * means that all domain entities should provide a natural ordering. * * <p> * However, in some circumstances the ordering of collection may be different to the entity's * natural ordering. For example, the entity may represent an interval of time sorted by its * <i>startDate</i> ascending, but the collection may wish to sort by <i>startDate</i>. * * <p> * The purpose of this annotation is to provide a {@link java.util.Comparator} such that the collection * may be sorted in an order more suitable to the context. */ @SuppressWarnings("rawtypes") Class sortedBy() default Comparator.class; }