提交 b0d4a441 编写于 作者: K kohsuke

RetentionStrategy is updated to support automatic discovery

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15659 71c3de6d-444a-0410-be80-ed276b4c234a
上级 4d57c31d
......@@ -613,7 +613,7 @@ public class Functions {
}
public static List<Descriptor<RetentionStrategy<?>>> getRetentionStrategyDescriptors() {
return RetentionStrategy.LIST;
return RetentionStrategy.all();
}
public static List<Descriptor<ParameterDefinition>> getParameterDescriptors() {
......
......@@ -675,7 +675,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
* Gets the retention strategy descriptor by name. Primarily used for making them web-visible.
*/
public Descriptor<RetentionStrategy<?>> getRetentionStrategy(String shortClassName) {
return findDescriptor(shortClassName, RetentionStrategy.LIST);
return findDescriptor(shortClassName, RetentionStrategy.all());
}
/**
......
......@@ -25,9 +25,13 @@ package hudson.slaves;
import hudson.ExtensionPoint;
import hudson.Util;
import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.model.Computer;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.model.ParameterDefinition;
import hudson.util.DescriptorList;
import org.kohsuke.stapler.DataBoundConstructor;
......@@ -79,11 +83,23 @@ public abstract class RetentionStrategy<T extends Computer> implements Describab
check(c);
}
public Descriptor<RetentionStrategy<?>> getDescriptor() {
return Hudson.getInstance().getDescriptor(getClass());
}
/**
* Returns all the registered {@link RetentionStrategy} descriptors.
*/
public static DescriptorExtensionList<RetentionStrategy<?>> all() {
return (DescriptorExtensionList)Hudson.getInstance().getDescriptorList(RetentionStrategy.class);
}
/**
* All registered {@link RetentionStrategy} implementations.
* @deprecated as of 1.286
* Use {@link #all()} for read access, and {@link Extension} for registration.
*/
public static final DescriptorList<RetentionStrategy<?>> LIST = new DescriptorList<RetentionStrategy<?>>();
public static final DescriptorList<RetentionStrategy<?>> LIST = new DescriptorList<RetentionStrategy<?>>((Class)RetentionStrategy.class);
/**
* Dummy instance that doesn't do any attempt to retention.
......@@ -133,21 +149,12 @@ public abstract class RetentionStrategy<T extends Computer> implements Describab
return 1;
}
public DescriptorImpl getDescriptor() {
return DESCRIPTOR;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
private static class DescriptorImpl extends Descriptor<RetentionStrategy<?>> {
@Extension
public static class DescriptorImpl extends Descriptor<RetentionStrategy<?>> {
public String getDisplayName() {
return Messages.RetentionStrategy_Always_displayName();
}
}
static {
LIST.add(DESCRIPTOR);
}
}
/**
......@@ -191,8 +198,6 @@ public abstract class RetentionStrategy<T extends Computer> implements Describab
return idleDelay;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public synchronized long check(SlaveComputer c) {
if (c.isOffline()) {
final long demandMilliseconds = System.currentTimeMillis() - c.getDemandStartMilliseconds();
......@@ -215,25 +220,11 @@ public abstract class RetentionStrategy<T extends Computer> implements Describab
return 1;
}
public Descriptor<RetentionStrategy<?>> getDescriptor() {
return DESCRIPTOR;
}
private static class DescriptorImpl extends Descriptor<RetentionStrategy<?>> {
@Extension
public static class DescriptorImpl extends Descriptor<RetentionStrategy<?>> {
public String getDisplayName() {
return Messages.RetentionStrategy_Demand_displayName();
}
}
static {
LIST.add(DESCRIPTOR);
}
}
static {
LIST.load(Always.class);
LIST.load(Demand.class);
if (Boolean.getBoolean("hudson.scheduledRetention"))
LIST.load(SimpleScheduledRetentionStrategy.class);
}
}
......@@ -39,6 +39,7 @@ import hudson.model.Computer;
import hudson.scheduler.CronTabList;
import hudson.util.FormFieldValidator;
import static hudson.Util.fixNull;
import hudson.Extension;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
......@@ -223,10 +224,15 @@ public class SimpleScheduledRetentionStrategy extends RetentionStrategy<SlaveCom
return (lastStart < now && lastStop > now) || (nextStart < now && nextStop > now);
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public Descriptor<RetentionStrategy<?>> getDescriptor() {
return DESCRIPTOR;
/**
* This feature is activated only when a property is set, while we test this feature.
*/
@Extension
public static DescriptorImpl init() {
if (Boolean.getBoolean("hudson.scheduledRetention"))
return new DescriptorImpl();
else
return null;
}
public static class DescriptorImpl extends Descriptor<RetentionStrategy<?>> {
......@@ -256,9 +262,4 @@ public class SimpleScheduledRetentionStrategy extends RetentionStrategy<SlaveCom
}.process();
}
}
static {
LIST.add(DESCRIPTOR);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册