package jenkins.model;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.ExtensionPoint;
import hudson.model.ModelObject;
import hudson.security.*;
import hudson.security.Messages;
import org.jenkinsci.Symbol;
/**
* Grouping of related {@link GlobalConfiguration}s.
*
* <p>
* To facilitate the separation of the global configuration into multiple pages, tabs, and so on,
* {@link GlobalConfiguration}s are classified into categories (such as "security", "tools", as well
* as the catch all "unclassified".) Categories themselves are extensible — plugins may introduce
* its own category as well, although that should only happen if you are creating a big enough subsystem.
*
* <p>
* The primary purpose of this is to enable future UIs to split the global configurations to
* smaller pieces that can be individually looked at and updated.
*
* @author Kohsuke Kawaguchi
* @since 1.494
* @see GlobalConfiguration
*/
public abstract class GlobalConfigurationCategory implements ExtensionPoint, ModelObject {
/**
* One-line plain text message that explains what this category is about.
* This can be used in the UI to help the user pick the right category.
*
* The text should be longer than {@link #getDisplayName()}
*/
public abstract String getShortDescription();
/**
* Returns all the registered {@link GlobalConfiguration} descriptors.
*/
public static ExtensionList<GlobalConfigurationCategory> all() {
return ExtensionList.lookup(GlobalConfigurationCategory.class);
}
public static <T extends GlobalConfigurationCategory> T get(Class<T> type) {
return all().get(type);
}
/**
* This category represents the catch-all I-dont-know-what-category-it-is instance,
* used for those {@link GlobalConfiguration}s that don't really deserve/need a separate
* category.
*
* Also used for backward compatibility. All {@link GlobalConfiguration}s without
* explicit category gets this as the category.
*
* In the current UI, this corresponds to the /configure link.
*/
@Extension @Symbol("unclassified")
public static class Unclassified extends GlobalConfigurationCategory {
@Override
public String getShortDescription() {
return jenkins.management.Messages.ConfigureLink_Description();
}
public String getDisplayName() {
return jenkins.management.Messages.ConfigureLink_DisplayName();
}
}
/**
* Security related configurations.
*/
@Extension @Symbol("security")
public static class Security extends GlobalConfigurationCategory {
@Override
public String getShortDescription() {
return hudson.security.Messages.GlobalSecurityConfiguration_Description();
}
public String getDisplayName() {
return hudson.security.Messages.GlobalSecurityConfiguration_DisplayName();
}
}
}