All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.scijava.module.ModuleItem Maven / Gradle / Ivy

Go to download

SciJava Common is a shared library for SciJava software. It provides a plugin framework, with an extensible mechanism for service discovery, backed by its own annotation processor, so that plugins can be loaded dynamically. It is used by downstream projects in the SciJava ecosystem, such as ImageJ and SCIFIO.

There is a newer version: 2.99.0
Show newest version
/*
 * #%L
 * SciJava Common shared library for SciJava software.
 * %%
 * Copyright (C) 2009 - 2017 Board of Regents of the University of
 * Wisconsin-Madison, Broad Institute of MIT and Harvard, Max Planck
 * Institute of Molecular Cell Biology and Genetics, University of
 * Konstanz, and KNIME GmbH.
 * %%
 * 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 extends BasicDetails {

	/** Gets the {@link ModuleInfo} to which this item belongs. */
	ModuleInfo getInfo();

	/** Gets the type of the item. */
	Class getType();

	/**
	 * Gets the type of the item, including Java generic parameters.
	 * 

* 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} or {@code Iterable}. *

* * @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)}. *

* Note that this is different than obtaining a module instance's current * value for the input; see {@link #getValue(Module)} for that. *

* * @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. *

* 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. *

*/ 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). *

* 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. *

*/ T getSoftMinimum(); /** * Gets the "soft" maximum value (if applicable). *

* 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. *

*/ 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 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); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy