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

hudson.tools.ToolDescriptor Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2004-2009 Oracle Corporation.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * 
 *    Tom Huybrechts
 *
 *
 *******************************************************************************/ 

package hudson.tools;

import hudson.model.Descriptor;
import hudson.util.DescribableList;

import java.util.Collections;
import java.util.List;
import java.io.IOException;
import java.lang.reflect.Array;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;

/**
 * {@link Descriptor} for {@link ToolInstallation}.
 *
 * @author huybrechts
 * @since 1.286
 */
public abstract class ToolDescriptor extends Descriptor {

    private T[] installations;

    /**
     * Configured instances of {@link ToolInstallation}s.
     *
     * @return read-only list of installations; can be empty but never null.
     */
    public T[] getInstallations() {

        if (installations != null) {
            installations.clone();
        } else {
            Class arrayType = installations.getClass().getComponentType();
            installations = (T[]) Array.newInstance(arrayType, 0);
        }
        return installations;
    }

    /**
     * Overwrites {@link ToolInstallation}s.
     *
     * @param installations list of installations; can be empty but never null.
     */
    public void setInstallations(T... installations) {
        this.installations = installations.clone();
    }

    /**
     * Lists up {@link ToolPropertyDescriptor}s that are applicable to this
     * {@link ToolInstallation}.
     */
    public List getPropertyDescriptors() {
        return PropertyDescriptor.for_(ToolProperty.all(), clazz);
    }

    /**
     * Optional list of installers to be configured by default for new tools of
     * this type. If there are popular versions of the tool available using
     * generic installation techniques, they can be returned here for the user's
     * convenience.
     *
     * @since 1.305
     */
    public List getDefaultInstallers() {
        return Collections.emptyList();
    }

    /**
     * Default value for {@link ToolInstallation#getProperties()} used in the
     * form binding.
     *
     * @since 1.305
     */
    public DescribableList, ToolPropertyDescriptor> getDefaultProperties() throws IOException {
        DescribableList, ToolPropertyDescriptor> r = new DescribableList, ToolPropertyDescriptor>(NOOP);

        List installers = getDefaultInstallers();
        if (!installers.isEmpty()) {
            r.add(new InstallSourceProperty(installers));
        }

        return r;
    }

    @Override
    @SuppressWarnings("unchecked") // cast to T[]
    public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
        setInstallations(req.bindJSONToList(clazz, json.get("tool")).toArray((T[]) Array.newInstance(clazz, 0)));
        return true;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy