org.broadleafcommerce.common.presentation.AdminPresentationMap Maven / Gradle / Ivy
Show all versions of broadleaf-common Show documentation
/*
* Copyright 2008-2013 the original author or authors.
*
* Licensed 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.broadleafcommerce.common.presentation;
import org.broadleafcommerce.common.presentation.client.OperationType;
import org.broadleafcommerce.common.presentation.client.UnspecifiedBooleanType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.persistence.MapKey;
/**
* This annotation is used to describe a persisted map structure for use in the
* admin tool
*
* @author Jeff Fischer
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface AdminPresentationMap {
/**
* Optional - field name will be used if not specified
*
* The friendly name to present to a user for this field in a GUI. If supporting i18N,
* the friendly name may be a key to retrieve a localized friendly name using
* the GWT support for i18N.
*
* @return the friendly name
*/
String friendlyName() default "";
/**
* Optional - only required if you wish to apply security to this field
*
* If a security level is specified, it is registered with the SecurityManager.
* The SecurityManager checks the permission of the current user to
* determine if this field should be disabled based on the specified level.
*
* @return the security level
*/
String securityLevel() default "";
/**
* Optional - fields are not excluded by default
*
* Specify if this field should be excluded from inclusion in the
* admin presentation layer
*
* @return whether or not the field should be excluded
*/
boolean excluded() default false;
/**
* Optional - only required if you want to make the field immutable
*
* Explicityly specify whether or not this field is mutable.
*
* @return whether or not this field is read only
*/
boolean readOnly() default false;
/**
* Optional - only required if you want to make the field ignore caching
*
* Explicitly specify whether or not this field will use server-side
* caching during inspection
*
* @return whether or not this field uses caching
*/
boolean useServerSideInspectionCache() default true;
/**
* Optional - only required if you want to specify ordering for this field
*
* The order in which this field will appear in a GUI relative to other collections from the same class
*
* @return the display order
*/
int order() default 99999;
/**
* Optional - only required if you want the field to appear under a different tab
*
* Specify a GUI tab for this field
*
* @return the tab for this field
*/
String tab() default "General";
/**
* Optional - only required if you want to order the appearance of the tabs in the UI
*
* Specify an order for this tab. Tabs will be sorted int he resulting form in
* ascending order based on this parameter.
*
* The default tab will render with an order of 100.
*
* @return the order for this tab
*/
int tabOrder() default 100;
/**
* Optional - only required if the type for the key of this map
* is other than java.lang.String, or if the map is not a generic
* type from which the key type can be derived
*
* The type for the key of this map
*
* @return The type for the key of this map
*/
Class> keyClass() default void.class;
/**
* Optional - only required if you wish to specify a key different from the one on the
* {@link MapKey} annotation for the same field.
*
* @return the property for the key
*/
String mapKeyValueProperty() default "";
/**
*
Optional - only required if the key field title for this
* map should be translated to another lang, or should be
* something other than the constant "Key"
*
* The friendly name to present to a user for this key field title in a GUI. If supporting i18N,
* the friendly name may be a key to retrieve a localized friendly name using
* the GWT support for i18N.
*
* @return the friendly name
*/
String keyPropertyFriendlyName() default "Key";
/**
* Optional - only required if the type for the value of this map
* is other than java.lang.String, or if the map is not a generic
* type from which the value type can be derived, or if there is
* not a @ManyToMany annotation used from which a targetEntity
* can be inferred.
*
* The type for the value of this map
*
* @return The type for the value of this map
*/
Class> valueClass() default void.class;
/**
* Optional - only required if the value class is a
* JPA managed type and the persisted entity should
* be deleted upon removal from this map
*
* Whether or not a complex (JPA managed) value should
* be deleted upon removal from this map
*
* @return Whether or not a complex value is deleted upon map removal
*/
boolean deleteEntityUponRemove() default false;
/**
* Optional - only required if the value property for this map
* is simple (Not JPA managed - e.g. java.lang.String) and if the
* value field title for this map should be translated to another lang, or
* should be something other than the constant "Value"
*
* The friendly name to present to a user for this value field title in a GUI. If supporting i18N,
* the friendly name may be a key to retrieve a localized friendly name using
* the GWT support for i18N.
*
* @return the friendly name
*/
String valuePropertyFriendlyName() default "Value";
/**
* Optional - only required if the value type cannot be derived from the map
* declaration in the JPA managed entity and the value type is complex (JPA managed entity)
*
* Whether or not the value type for the map is complex (JPA managed entity), rather than an simple
* type (e.g. java.lang.String). This can usually be inferred from the parameterized type of the map
* (if available), or from the targetEntity property of a @ManyToMany annotation for the map (if available).
*
* @return Whether or not the value type for the map is complex
*/
UnspecifiedBooleanType isSimpleValue() default UnspecifiedBooleanType.UNSPECIFIED;
/**
* Optional - only required if the value type for the map is complex (JPA managed) and one of the fields
* of the complex value provides a URL value that points to a resolvable image url.
*
* The field name of complex value that provides an image url
*
* @return The field name of complex value that provides an image url
*/
String mediaField() default "";
/**
* Optional - only required when the user should select from a list of pre-defined
* keys when adding/editing this map. Either this value, or the mapKeyOptionEntityClass
* should be user - not both.
*
* Specify the keys available for the user to select from
*
* @return the array of keys from which the user can select
*/
AdminPresentationMapKey[] keys() default {};
/**
* Optional - only required when you want to allow the user to create his/her own
* key value, rather than select from a pre-defined list. The default is to
* force selection from a pre-defined list.
*
* @return whether or not the user will create their own key values.
*/
boolean forceFreeFormKeys() default false;
/**
* Optional - only required with a complex value class that has a bi-directional
* association back to the parent class containing the map. This can generally
* be inferred by the system from a "mappedBy" attribute for maps of a OneToMany
* type. For map configurations without a mappedBy value, or if you wish to
* explicitly set a bi-directional association field on the complex value, use
* this property.
*
* @return the bi-directional association field on the complex value, if any
*/
String manyToField() default "";
/**
* Optional - only required when the user should select from a list of database
* persisted values for keys when adding/editing this map. Either this value, or the
* keys parameter should be user - not both
*
* Specify the entity class that represents the table in the database that contains
* the key values for this map
*
* @return the entity class for the map keys
*/
Class> mapKeyOptionEntityClass() default void.class;
/**
* Optional - only required when the user should select from a list of database
* persisted values for keys when adding/editing this map.
*
* Specify the field in the option entity class that contains the value that will
* be shown to the user. This can be the same field as the value field. This option
* does not support i18n out-of-the-box.
*
* @return the display field in the entity class
*/
String mapKeyOptionEntityDisplayField() default "";
/**
* Optional - only required when the user should select from a list of database
* persisted values for keys when adding/editing this map.
*
* Specify the field in the option entity class that contains the value that will
* actually be saved for the selected key. This can be the same field as the display
* field.
*
* @return the value field in the entity class
*/
String mapKeyOptionEntityValueField() default "";
/**
* Optional - only required if you need to specially handle crud operations for this
* specific collection on the server
*
* Custom string values that will be passed to the server during CRUD operations on this
* collection. These criteria values can be detected in a custom persistence handler
* (@CustomPersistenceHandler) in order to engage special handling through custom server
* side code for this collection.
*
* @return the custom string array to pass to the server during CRUD operations
*/
String[] customCriteria() default {};
/**
* Optional - only required if a special operation type is required for a CRUD operation. This
* setting is not normally changed and is an advanced setting
*
* The operation type for a CRUD operation
*
* @return the operation type
*/
AdminPresentationOperationTypes operationTypes() default @AdminPresentationOperationTypes(addType = OperationType.MAP, fetchType = OperationType.MAP, inspectType = OperationType.MAP, removeType = OperationType.MAP, updateType = OperationType.MAP);
/**
* Optional - propertyName , only required if you want hide the field based on this property's value
*
* If the property is defined and found to be set to false, in the AppConfiguraionService, then this field will be excluded in the
* admin presentation layer
*
* @return name of the property
*/
String showIfProperty() default "";
/**
* Optional - If you have FieldType set to SupportedFieldType.MONEY, *
* then you can specify a money currency property field.
*
* @return the currency property field
*/
String currencyCodeField() default "";
}