forked from scijava/scijava-common
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModuleItem.java
More file actions
210 lines (175 loc) · 6.26 KB
/
ModuleItem.java
File metadata and controls
210 lines (175 loc) · 6.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/*
* #%L
* SciJava Common shared library for SciJava software.
* %%
* Copyright (C) 2009 - 2020 SciJava developers.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package org.scijava.module;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.List;
import org.scijava.BasicDetails;
import org.scijava.ItemIO;
import org.scijava.ItemVisibility;
/**
* A ModuleItem represents metadata about one input or output of a module.
*
* @author Aivar Grislis
* @author Curtis Rueden
*/
public interface ModuleItem<T> extends BasicDetails {
/** Gets the {@link ModuleInfo} to which this item belongs. */
ModuleInfo getInfo();
/** Gets the type of the item. */
Class<T> getType();
/**
* Gets the type of the item, including Java generic parameters.
* <p>
* For many modules, this may be the same {@link Class} object returned by
* {@link #getType()}, but some module inputs or outputs may be backed by a
* generic type such as {@code List<String>} or {@code Iterable<Integer>}.
* </p>
*
* @see Field#getGenericType()
*/
Type getGenericType();
/** Gets the input/output type of the item. */
ItemIO getIOType();
/** Gets whether the item is a module input. */
boolean isInput();
/** Gets whether the item is a module output. */
boolean isOutput();
/** Gets the visibility of the item. */
ItemVisibility getVisibility();
/** Gets whether the item value is allowed to be auto-filled. */
boolean isAutoFill();
/** Gets whether the item value must be specified (i.e., no default). */
boolean isRequired();
/** Gets whether to remember the most recent value of the parameter. */
boolean isPersisted();
/** Gets the key to use for saving the value persistently. */
String getPersistKey();
/**
* Loads the item's persisted value. This recalls the value last stored using
* {@link #saveValue(Object)}.
* <p>
* Note that this is different than obtaining a module instance's current
* value for the input; see {@link #getValue(Module)} for that.
* </p>
*
* @deprecated
* @see ModuleService#load(ModuleItem)
*/
@Deprecated
T loadValue();
/**
* Saves the given value to persistent storage. This allows later restoration
* of the value via {@link #loadValue()}, even from a different JVM.
*
* @deprecated
* @see ModuleService#save(ModuleItem, Object)
*/
@Deprecated
void saveValue(T value);
/** Gets the function that is called to initialize the item's value. */
String getInitializer();
/**
* Invokes this item's initializer function, if any, on the given module.
*
* @see #getInitializer()
*/
void initialize(Module module) throws MethodCallException;
/** Gets the function that is called to validate the item's value. */
String getValidater();
/**
* Invokes this item's validation function, if any, on the given module.
*
* @see #getValidater()
*/
void validate(Module module) throws MethodCallException;
/**
* Gets the function that is called whenever this item changes.
* <p>
* This mechanism enables interdependent items of various types. For example,
* two int parameters "width" and "height" could update each other when
* another boolean "Preserve aspect ratio" flag is set.
* </p>
*/
String getCallback();
/**
* Invokes this item's callback function, if any, on the given module.
*
* @see #getCallback()
*/
void callback(Module module) throws MethodCallException;
/**
* Gets the preferred widget style to use when rendering the item in a user
* interface.
*/
String getWidgetStyle();
/** Gets the default value. */
T getDefaultValue();
/** Gets the minimum allowed value (if applicable). */
T getMinimumValue();
/** Gets the maximum allowed value (if applicable). */
T getMaximumValue();
/**
* Gets the "soft" minimum value (if applicable).
* <p>
* The soft minimum is a hint for use in bounded scenarios, such as rendering
* in a user interface with a slider or scroll bar widget; the parameter value
* will not actually be clamped to the soft bounds, but they may be used in
* certain circumstances where appropriate.
* </p>
*/
T getSoftMinimum();
/**
* Gets the "soft" maximum value (if applicable).
* <p>
* The soft maximum is a hint for use in bounded scenarios, such as rendering
* in a user interface with a slider or scroll bar widget; the parameter value
* will not actually be clamped to the soft bounds, but they may be used in
* certain circumstances where appropriate.
* </p>
*/
T getSoftMaximum();
/**
* Gets the preferred step size to use when rendering the item in a user
* interface (if applicable).
*/
Number getStepSize();
/**
* Gets the preferred width of the input field in characters (if applicable).
*/
int getColumnCount();
/** Gets the list of possible values. */
List<T> getChoices();
/** Gets the item's current value with respect to the given module. */
T getValue(Module module);
/** Sets the item's current value with respect to the given module. */
void setValue(Module module, T value);
/** Gets the item's format*/
String getFormat();
}