001/** 002 * Copyright (C) 2006-2024 Talend Inc. - www.talend.com 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.talend.sdk.component.api.configuration.action; 017 018import static java.lang.annotation.ElementType.FIELD; 019import static java.lang.annotation.ElementType.PARAMETER; 020import static java.lang.annotation.RetentionPolicy.RUNTIME; 021 022import java.lang.annotation.Retention; 023import java.lang.annotation.Target; 024 025import org.talend.sdk.component.api.configuration.action.meta.ActionRef; 026import org.talend.sdk.component.api.meta.Documentation; 027import org.talend.sdk.component.api.service.update.Update; 028 029@ActionRef(Update.class) 030@Documentation("Mark the decorated instance as replacable with an action returning a new instance. It is " 031 + "typically useful to implement \"guess my configuration\" kind of interaction.") 032@Target({ PARAMETER, FIELD }) 033@Retention(RUNTIME) 034public @interface Updatable { 035 036 /** 037 * @return value of @{@link Update} method form this component family update actions. 038 */ 039 String value(); 040 041 /** 042 * @return property reference in the decorated object to append the button after. 043 */ 044 String after() default ""; 045 046 /** 047 * This "list" will represent the parameter the caller will send to the action. 048 * 049 * Syntax is the following: 050 * 051 * <ul> 052 * <li>.: represents the decorated option (aka "this")</li> 053 * <li>../foo: represents the 054 * 055 * <pre> 056 * foo 057 * </pre> 058 * 059 * option of the parent (if exists) of "."</li> 060 * <li>bar: represents the 061 * 062 * <pre> 063 * bar 064 * </pre> 065 * 066 * sibling option of the decorated field</li> 067 * <li>bar/dummy: represents the 068 * 069 * <pre> 070 * dummy 071 * </pre> 072 * 073 * option of the child bar of the decorated field</li> 074 * </ul> 075 * 076 * This syntax is close to path syntax but the important point is all the parameters are related to the decorated 077 * option. 078 * 079 * By default no data are sent since you generally need other parts of the form than the decorated model to be able 080 * to populate it. 081 * 082 * @return parameters for the action. 083 */ 084 String[] parameters() default {}; 085 086 /** 087 * @return If the evaluation of the element at the location matches value, then the button append 'after' is 088 * considered active 089 * 090 * Example: "target = setRawUrl, value = { true }" 091 * otherwise, the button should not be shown. 092 */ 093 String activeIf() default ""; 094}