Class Job<JobT extends Job<JobT,RunT>,RunT extends Run<JobT,RunT>>
- All Implemented Interfaces:
ExtensionPoint,DescriptorByNameOwner,Item,ModelObject,PersistenceRoot,Saveable,SearchableModelObject,SearchItem,AccessControlled,FullyNamed,FullyNamedModelObject,Loadable,ModelObjectWithChildren,ModelObjectWithContextMenu,Named,OnMaster,HasWidgets,org.kohsuke.stapler.HttpDeletable,org.kohsuke.stapler.StaplerOverridable,org.kohsuke.stapler.StaplerProxy
- Direct Known Subclasses:
AbstractProject,ViewJob
Every time it "runs", it will be recorded as a Run object.
To create a custom job type, extend TopLevelItemDescriptor and put Extension on it.
- Author:
- Kohsuke Kawaguchi
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceAlternate strategy for assigning build numbers.static final classstatic classstatic classNested classes/interfaces inherited from interface hudson.ExtensionPoint
ExtensionPoint.LegacyInstancesAreScopedToHudsonNested classes/interfaces inherited from interface org.kohsuke.stapler.HttpDeletable
org.kohsuke.stapler.HttpDeletable.HttpDeletableDispatcherNested classes/interfaces inherited from interface jenkins.model.ModelObjectWithContextMenu
ModelObjectWithContextMenu.ContextMenu, ModelObjectWithContextMenu.ContextMenuVisibility, ModelObjectWithContextMenu.MenuItem, ModelObjectWithContextMenu.MenuItemType -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final HistoryWidget.Adapter<HistoricalBuild> protected intNext build number.protected CopyOnWriteList<JobProperty<? super JobT>> List of properties configured for this project.Fields inherited from class hudson.model.AbstractItem
description, displayName, name, PRONOUN, SKIP_PERMISSION_CHECK, TASK_NOUN -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription_getRuns()Gets all the runs.voidaddProperty(JobProperty<? super JobT> jobProp) AddsJobProperty.intAllocates a new build number.protected voidcheckRename(String newName) Allows subclasses to block renames for domain-specific reasons.protected HistoryWidgetDeprecated, for removal: This API element is subject to removal in a future version.voiddelete()Deletes this item.voiddoBuildStatus(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) Returns the image that shows the current buildCommand status.doChildrenContextMenu(org.kohsuke.stapler.StaplerRequest2 request, org.kohsuke.stapler.StaplerResponse2 response) Generates the context menu to list up all the children.doChildrenContextMenu(org.kohsuke.stapler.StaplerRequest request, org.kohsuke.stapler.StaplerResponse response) Deprecated.voiddoConfigSubmit(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) Accepts submission from the configuration page.voiddoDescription(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) Accepts and serves the job descriptionvoiddoDoRename(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp) Deprecated.Exists for backwards compatibility, useAbstractItem.doConfirmRename(java.lang.String)instead.voiddoRssAll(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) voiddoRssChangelog(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) RSS feed for changes in this project.voiddoRssFailed(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) voidfastUpdateNextBuildNumber(int nextBuildNumber) Unconditionally sets the value ofgetNextBuildNumber().getACL()Returns theACLfor this object.Collection<? extends Job> Gets all the jobs that thisItemcontains as descendants.List<JobProperty<? super JobT>> List of allJobPropertyexposed primarily for the remoting API.Looks up a build by its ID.getBuildByNumber(int n) Directory for storingRunrecords.Returns the configured build discarder for this job, viaBuildDiscarderProperty, or null if none.getBuildForCLI(String id) Get the current health report for a job.Gets the read-only view of all the builds.Obtains all theRuns whose build numbers matches the givenFingerprint.RangeSet.Gets all the builds in a map.getBuildsByTimestamp(long start, long end) Deprecated.as of 1.372.Builds up the environment variable map that's sufficient to identify a process as ours.getDynamic(String token, org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) getEnvironment(Node node, TaskListener listener) Creates an environment variable override for launching processes for this project.longReturns candidate build for calculating the estimated duration of the current run.Returns the oldest build in the record.Used as the color of the status ball for the project.Returns the newest build.getLastBuildsOverThreshold(int numberOfBuilds, Result threshold) Returns the lastnumberOfBuildsbuilds with a build result ≥thresholdReturns the last completed build, if any.Returns the last failed build, if any.Returns the last stable build, if any.Returns the last successful build, if any.Returns the last unstable build, if any.Returns the last build that was anything but stable, if any.Deprecated.as of 1.503 UsegetBuildDiscarder().getNearestBuild(int n) Gets the oldest build #m that satisfiesm ≥ n.getNearestOldBuild(int n) Gets the newest build #m that satisfiesm ≤ n.Gets the read-only view of the recent builds.intPeeks the next build number.Collection<?> Overrides from job properties.Gets all thePermalinkProjectAction.Permalinks defined for this job.Get the term used in the UI to represent this kind ofItem.Map<JobPropertyDescriptor, JobProperty<? super JobT>> Gets all the job properties configured for this job.<T extends JobProperty>
TgetProperty(Class<T> clazz) Gets the specific property, or null if the property is not configured for this job.getProperty(String className) BindJobPropertys to URL spaces.If this job is in the build queue, return its item.Deprecated.abstract booleanReturns true if we should display "build now" iconbooleanReturns true if a build of this project is in progress.booleanbooleanbooleanIf true, it will keep all the build logs of dependency components.booleanReturns true if the log file is still being updated.booleanReturns whether the name of this job can be changed by user.voidPerform log rotation.protected SearchIndexBuilderDefault implementation that returns empty index.voidmovedTo(DirectlyModifiableTopLevelItemGroup destination, AbstractItem newItem, File destDir) Notify this item it's been moved to another location, replaced by newItem (might be the same object, but not guaranteed).voidonCopiedFrom(Item src) When aItemis copied from existing one, the files are first copied on the file system, then it will be loaded, then this method will be invoked to perform any implementation-specific work.voidCalled right after when aItemis loaded from disk.voidremoveProperty(JobProperty<? super JobT> jobProp) RemovesJobProperty<T extends JobProperty>
TremoveProperty(Class<T> clazz) Removes the property of the given type.protected abstract voidCalled fromRunto remove it from this job.voidRenames a job.voidsave()Save the settings to a file.protected voidvoidvoidsetLogRotator(LogRotator logRotator) Deprecated.as of 1.503 UsesetBuildDiscarder(BuildDiscarder)protected voidsubmit(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) Derived class can override this to perform additional config submission work.protected voidsubmit(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp) Deprecated.booleanTrue if this instance supports log rotation configuration.voidupdateNextBuildNumber(int next) Programmatically updates the next build number.Methods inherited from class hudson.model.AbstractItem
delete, delete, doCheckNewName, doConfigDotXml, doConfigDotXml, doConfirmRename, doDoDelete, doDoDelete, doReload, doSetName, doSubmitDescription, doSubmitDescription, getAbsoluteUrl, getApi, getConfigFile, getDescription, getDisplayName, getDisplayNameOrNull, getFullDisplayName, getFullName, getName, getParent, getRelativeDisplayNameFrom, getRelativeNameFromGroup, getRootDir, getSearchName, getSearchUrl, getShortUrl, getTarget, getTaskNoun, getUrl, load, performDelete, resolveForCLI, setDescription, setDisplayName, setDisplayNameOrNull, toString, updateByXml, updateByXml, writeConfigDotXml, writeReplaceMethods inherited from class hudson.model.Actionable
addAction, addOrReplaceAction, doContextMenu, doContextMenu, getAction, getAction, getActions, getActions, getAllActions, getDynamic, removeAction, removeActions, replaceAction, replaceActionsMethods inherited from class hudson.model.AbstractModelObject
getSearch, getSearchIndex, requirePOST, sendError, sendError, sendError, sendError, sendError, sendError, sendError, sendErrorMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface hudson.security.AccessControlled
checkAnyPermission, checkPermission, hasAnyPermission, hasPermission, hasPermission, hasPermission2Methods inherited from interface hudson.model.DescriptorByNameOwner
getDescriptorByNameMethods inherited from interface jenkins.widgets.HasWidgets
getWidget, getWidgetsMethods inherited from interface hudson.model.Item
getRelativeNameFrom, getRelativeNameFrom, getSearchGroup, onCreatedFromScratchMethods inherited from interface hudson.search.SearchableModelObject
getSearchMethods inherited from interface hudson.search.SearchItem
getSearchIndex
-
Field Details
-
nextBuildNumber
protected transient volatile int nextBuildNumberNext build number. Kept in a separate file because this is the only information that gets updated often. This allows the rest of the configuration to be in the VCS.In 1.28 and earlier, this field was stored in the project configuration file, so even though this is marked as transient, don't move it around.
-
properties
List of properties configured for this project. -
HISTORY_ADAPTER
-
-
Constructor Details
-
Job
-
-
Method Details
-
save
Description copied from class:AbstractItemSave the settings to a file.- Specified by:
savein interfaceItem- Specified by:
savein interfaceSaveable- Overrides:
savein classAbstractItem- Throws:
IOException- if the persistence failed.
-
onLoad
Description copied from class:AbstractItemCalled right after when aItemis loaded from disk. This is an opportunity to do a post load processing.- Specified by:
onLoadin interfaceItem- Overrides:
onLoadin classAbstractItem- Parameters:
name- Name of the directory (not a path --- just the name portion) from which the configuration was loaded. This usually becomes thenameof this item.- Throws:
IOException
-
onCopiedFrom
Description copied from class:AbstractItemWhen aItemis copied from existing one, the files are first copied on the file system, then it will be loaded, then this method will be invoked to perform any implementation-specific work.- Specified by:
onCopiedFromin interfaceItem- Overrides:
onCopiedFromin classAbstractItem- Parameters:
src- Item from which it's copied from. The same type asthis. Never null.
-
isHoldOffBuildUntilSave
public boolean isHoldOffBuildUntilSave() -
saveNextBuildNumber
- Throws:
IOException
-
isInQueue
@Exported public boolean isInQueue() -
getQueueItem
If this job is in the build queue, return its item. -
isBuilding
public boolean isBuilding()Returns true if a build of this project is in progress. -
isLogUpdated
public boolean isLogUpdated()Returns true if the log file is still being updated. -
getPronoun
Description copied from class:AbstractItemGet the term used in the UI to represent this kind ofItem. Must start with a capital letter.- Overrides:
getPronounin classAbstractItem
-
isNameEditable
public boolean isNameEditable()Returns whether the name of this job can be changed by user.- Overrides:
isNameEditablein classAbstractItem- Returns:
- whether
AbstractItem.namecan be modified by a user - See Also:
-
isKeepDependencies
@Exported public boolean isKeepDependencies()If true, it will keep all the build logs of dependency components. (This really only makes sense inAbstractProjectbut historically it was defined here.) -
assignBuildNumber
Allocates a new build number.- Throws:
IOException- See Also:
-
getNextBuildNumber
@Exported public int getNextBuildNumber()Peeks the next build number. -
getCharacteristicEnvVars
Builds up the environment variable map that's sufficient to identify a process as ours. This is used to kill run-away processes viaProcessTree.killAll(Map). -
getEnvironment
@NonNull public EnvVars getEnvironment(@CheckForNull Node node, @NonNull TaskListener listener) throws IOException, InterruptedException Creates an environment variable override for launching processes for this project.This is for process launching outside the build execution (such as polling, tagging, deployment, etc.) that happens in a context of a specific job.
- Parameters:
node- Node to eventually run a process on. The implementation must cope with this parameter being null (in which case none of the node specific properties would be reflected in the resulting override.)- Throws:
IOExceptionInterruptedException
-
updateNextBuildNumber
Programmatically updates the next build number.Much of Hudson assumes that the build number is unique and monotonic, so this method can only accept a new value that's bigger than
getLastBuild()returns. Otherwise it'll be no-op.- Throws:
IOException- Since:
- 1.199 (before that, this method was package private.)
-
fastUpdateNextBuildNumber
@Restricted(org.kohsuke.accmod.restrictions.Beta.class) public void fastUpdateNextBuildNumber(int nextBuildNumber) Unconditionally sets the value ofgetNextBuildNumber(). UnlikeupdateNextBuildNumber(int)this does not save the number on disk, and does not checkgetLastBuild(). -
getBuildDiscarder
Returns the configured build discarder for this job, viaBuildDiscarderProperty, or null if none. -
setBuildDiscarder
- Throws:
IOException
-
getLogRotator
Deprecated.as of 1.503 UsegetBuildDiscarder().Left for backward compatibility. Returns non-null if and only ifLogRotatoris configured asBuildDiscarder. -
setLogRotator
Deprecated.as of 1.503 UsesetBuildDiscarder(BuildDiscarder)- Throws:
IOException
-
logRotate
Perform log rotation.- Throws:
IOExceptionInterruptedException
-
supportsLogRotator
public boolean supportsLogRotator()True if this instance supports log rotation configuration. -
getSearchIcon
- Specified by:
getSearchIconin interfaceSearchItem
-
makeSearchIndex
Description copied from class:AbstractModelObjectDefault implementation that returns empty index.- Overrides:
makeSearchIndexin classAbstractModelObject
-
getAllJobs
Description copied from class:AbstractItemGets all the jobs that thisItemcontains as descendants.- Specified by:
getAllJobsin interfaceItem- Specified by:
getAllJobsin classAbstractItem
-
addProperty
AddsJobProperty.- Throws:
IOException- Since:
- 1.188
-
removeProperty
RemovesJobProperty- Throws:
IOException- Since:
- 1.279
-
removeProperty
Removes the property of the given type.- Returns:
- The property that was just removed.
- Throws:
IOException- Since:
- 1.279
-
getProperties
Gets all the job properties configured for this job. -
getAllProperties
List of allJobPropertyexposed primarily for the remoting API.- Since:
- 1.282
-
getProperty
Gets the specific property, or null if the property is not configured for this job. -
getProperty
BindJobPropertys to URL spaces.- Since:
- 1.403
-
getOverrides
Overrides from job properties.- Specified by:
getOverridesin interfaceorg.kohsuke.stapler.StaplerOverridable- See Also:
-
createHistoryWidget
Deprecated, for removal: This API element is subject to removal in a future version.Remove any override, history widget is now created viaWidgetFactoryimplementation. -
renameTo
Renames a job.- Overrides:
renameToin classAbstractItem- Throws:
IOException
-
movedTo
public void movedTo(DirectlyModifiableTopLevelItemGroup destination, AbstractItem newItem, File destDir) throws IOException Description copied from class:AbstractItemNotify this item it's been moved to another location, replaced by newItem (might be the same object, but not guaranteed). This method is executed after the item root directory has been moved to it's new location.Derived classes can override this method to add some specific behavior on move, but have to call parent method so the item is actually setup within it's new parent.
- Overrides:
movedToin classAbstractItem- Throws:
IOException- See Also:
-
delete
Description copied from class:AbstractItemDeletes this item.Any exception indicates the deletion has failed, but
AbortExceptionwould prevent the caller from showing the stack trace.- Specified by:
deletein interfaceItem- Overrides:
deletein classAbstractItem- Throws:
IOExceptionInterruptedException- See Also:
-
isBuildable
@Exported public abstract boolean isBuildable()Returns true if we should display "build now" icon -
getBuilds
@Exported(name="allBuilds", visibility=-2) @WithBridgeMethods(java.util.List.class) public RunList<RunT> getBuilds()Gets the read-only view of all the builds.- Returns:
- never null. The first entry is the latest build.
-
getNewBuilds
Gets the read-only view of the recent builds.- Since:
- 1.485
-
getBuilds
Obtains all theRuns whose build numbers matches the givenFingerprint.RangeSet. -
getBuildsAsMap
Gets all the builds in a map. -
getBuild
Looks up a build by its ID.- See Also:
-
getBuildByNumber
- Parameters:
n- The build number.- Returns:
- null if no such build exists.
- See Also:
-
getBuildsByTimestamp
@WithBridgeMethods(java.util.List.class) @Deprecated public RunList<RunT> getBuildsByTimestamp(long start, long end) Deprecated.as of 1.372. Should just dogetBuilds().byTimestamp(s,e)to avoid code bloat inJob.Obtains a list of builds, in the descending order, that are within the specified time range [start,end).- Returns:
- can be empty but never null.
-
getBuildForCLI
- Throws:
org.kohsuke.args4j.CmdLineException
-
getNearestBuild
Gets the oldest build #m that satisfiesm ≥ n. This is useful when you'd like to fetch a build but the exact build might be already gone (deleted, rotated, etc.)- See Also:
-
getNearestOldBuild
Gets the newest build #m that satisfiesm ≤ n. This is useful when you'd like to fetch a build but the exact build might be already gone (deleted, rotated, etc.)- See Also:
-
getDynamic
public Object getDynamic(String token, org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) - Overrides:
getDynamicin classActionable- Since:
- 2.475
-
getBuildDir
Directory for storingRunrecords.Some
Jobs may not have backing data store forRuns, but thoseJobs that use file system for storing data should use this directory for consistency.- See Also:
-
_getRuns
Gets all the runs. The resulting map must be treated immutable (by employing copy-on-write semantics.) The map is descending order, with newest builds at the top.- See Also:
-
removeRun
Called fromRunto remove it from this job. The files are deleted already. So all the callee needs to do is to remove a reference from thisJob.- See Also:
-
getLastBuild
Returns the newest build.- See Also:
-
getFirstBuild
Returns the oldest build in the record.- See Also:
-
getLastSuccessfulBuild
Returns the last successful build, if any. Otherwise null. A successful build would include eitherResult.SUCCESSorResult.UNSTABLE.- See Also:
-
getLastUnsuccessfulBuild
Returns the last build that was anything but stable, if any. Otherwise null.- See Also:
-
getLastUnstableBuild
Returns the last unstable build, if any. Otherwise null.- See Also:
-
getLastStableBuild
Returns the last stable build, if any. Otherwise null.- See Also:
-
getLastFailedBuild
Returns the last failed build, if any. Otherwise null. -
getLastCompletedBuild
Returns the last completed build, if any. Otherwise null. -
getLastBuildsOverThreshold
Returns the lastnumberOfBuildsbuilds with a build result ≥threshold- Returns:
- a list with the builds. May be smaller than 'numberOfBuilds' or even empty if not enough builds satisfying the threshold have been found. Never null.
-
getEstimatedDurationCandidates
Returns candidate build for calculating the estimated duration of the current run. Returns the 3 last successful (stable or unstable) builds, if there are any. Failing to find 3 of those, it will return up to 3 last unsuccessful builds. In any case it will not go more than 6 builds into the past to avoid costly build loading.- See Also:
-
getEstimatedDuration
public long getEstimatedDuration() -
getPermalinks
Gets all thePermalinkProjectAction.Permalinks defined for this job.- Returns:
- never null
-
doRssChangelog
public void doRssChangelog(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException, jakarta.servlet.ServletException RSS feed for changes in this project.- Throws:
IOExceptionjakarta.servlet.ServletException- Since:
- 2.60
-
doChildrenContextMenu
public ModelObjectWithContextMenu.ContextMenu doChildrenContextMenu(org.kohsuke.stapler.StaplerRequest2 request, org.kohsuke.stapler.StaplerResponse2 response) throws Exception Description copied from interface:ModelObjectWithChildrenGenerates the context menu to list up all the children.- Specified by:
doChildrenContextMenuin interfaceModelObjectWithChildren- Throws:
Exception- Since:
- 2.475
-
doChildrenContextMenu
@Deprecated @StaplerNotDispatchable public ModelObjectWithContextMenu.ContextMenu doChildrenContextMenu(org.kohsuke.stapler.StaplerRequest request, org.kohsuke.stapler.StaplerResponse response) throws Exception Deprecated.- Specified by:
doChildrenContextMenuin interfaceModelObjectWithChildren- Throws:
Exception
-
getIconColor
Used as the color of the status ball for the project. -
getBuildHealth
Get the current health report for a job.- Returns:
- the health report. Never returns null
-
getBuildHealthReports
-
doConfigSubmit
@POST public void doConfigSubmit(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException, jakarta.servlet.ServletException, Descriptor.FormException Accepts submission from the configuration page.- Throws:
IOExceptionjakarta.servlet.ServletExceptionDescriptor.FormException
-
submit
protected void submit(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException, jakarta.servlet.ServletException, Descriptor.FormException Derived class can override this to perform additional config submission work.- Throws:
IOExceptionjakarta.servlet.ServletExceptionDescriptor.FormException- Since:
- 2.475
-
submit
@Deprecated protected void submit(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp) throws IOException, javax.servlet.ServletException, Descriptor.FormException Deprecated.- Throws:
IOExceptionjavax.servlet.ServletExceptionDescriptor.FormException
-
doDescription
public void doDescription(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException Accepts and serves the job description- Throws:
IOException
-
doBuildStatus
public void doBuildStatus(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException Returns the image that shows the current buildCommand status.- Throws:
IOException
-
getBuildStatusUrl
-
getBuildStatusIconClassName
-
getBuildTimeGraph
-
doDoRename
@Deprecated public void doDoRename(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp) throws IOException, javax.servlet.ServletException Deprecated.Exists for backwards compatibility, useAbstractItem.doConfirmRename(java.lang.String)instead.Renames this job.- Throws:
IOExceptionjavax.servlet.ServletException
-
checkRename
Description copied from class:AbstractItemAllows subclasses to block renames for domain-specific reasons. Generic validation of the new name (e.g., null checking, checking for illegal characters, and checking that the name is not in use) always happens prior to calling this method.- Overrides:
checkRenamein classAbstractItem- Parameters:
newName- the new name for the item- Throws:
Failure- if the rename should be blocked- See Also:
-
doRssAll
public void doRssAll(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException, jakarta.servlet.ServletException - Throws:
IOExceptionjakarta.servlet.ServletException
-
doRssFailed
public void doRssFailed(org.kohsuke.stapler.StaplerRequest2 req, org.kohsuke.stapler.StaplerResponse2 rsp) throws IOException, jakarta.servlet.ServletException - Throws:
IOExceptionjakarta.servlet.ServletException
-
getACL
Returns theACLfor this object. We need to override the identical method in AbstractItem because we won't call getACL(Job) otherwise (single dispatch)- Specified by:
getACLin interfaceAccessControlled- Overrides:
getACLin classAbstractItem- Returns:
- never null.
-
getTimeline
@Deprecated @Restricted(org.kohsuke.accmod.restrictions.DoNotUse.class) public BuildTimelineWidget getTimeline()Deprecated.
-
WidgetFactoryimplementation.