/******************************************************************************* * * Copyright (c) 2011 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: * * Nikita Levyankov * *******************************************************************************/ package org.eclipse.hudson.api.model; import hudson.FilePath; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.AppointedNode; import hudson.model.Fingerprint; import hudson.model.JDK; import hudson.model.Label; import hudson.model.Node; import hudson.model.ProminentProjectAction; import hudson.scm.SCM; import hudson.triggers.Trigger; import hudson.triggers.TriggerDescriptor; import hudson.util.DescribableList; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedMap; /** * Interface that reflects common methods for AbstractProject model * <p/> * Date: 9/15/11 * * @author Nikita Levyankov */ public interface IAbstractProject extends IJob { /** * Returns configured SCM for project, * * @return {@link SCM} instance */ SCM getScm(); /** * Sets scm value. * * @param scm {@link SCM} * @throws IOException if any. */ void setScm(SCM scm) throws IOException; /** * Returns map of triggers. * * @return {@link Map}. */ Map<TriggerDescriptor, Trigger> getTriggers(); /** * @return list of {@link Trigger} elements. */ List<Trigger<?>> getTriggersList(); /** * @return describable list of trigger elements. */ DescribableList<Trigger<?>, TriggerDescriptor> getTriggerDescribableList(); /** * Gets the specific trigger, should be null if the property is not * configured for this job. * * @param clazz class of trigger * @return T */ <T extends Trigger> T getTrigger(Class<T> clazz); /** * Sets list of triggers. * * @param triggerList list of {@link Trigger} object */ void setTriggers(List<Trigger<?>> triggerList); /** * Adds a new {@link Trigger} to this {@link hudson.model.Project} if not * active yet. * * @param trigger new trigger. * @throws IOException if any. */ void addTrigger(Trigger<?> trigger) throws IOException; /** * Removes {@link Trigger} frin this {@link hudson.model.Project} by * {@link TriggerDescriptor}. * * @param trigger descriptor of trigger. * @throws IOException if any. */ void removeTrigger(TriggerDescriptor trigger) throws IOException; /** * Checks whether workspace should be cleaned before build * * @return boolean value */ boolean isCleanWorkspaceRequired(); /** * Sets cleanWorkspaceRequired flag. * * @param cleanWorkspaceRequired true - to always clean workspace. */ void setCleanWorkspaceRequired(boolean cleanWorkspaceRequired); /** * Indicates whether build should be blocked while downstream project is * building. * * @return true if yes, false - otherwise. */ boolean blockBuildWhenDownstreamBuilding(); /** * Sets blockBuildWhenDownstreamBuilding flag. * * @param b new boolean value. * @throws IOException if any. */ void setBlockBuildWhenDownstreamBuilding(boolean b) throws IOException; /** * Indicates whether build should be blocked while upstream project is * building. * * @return true if yes, false - otherwise. */ boolean blockBuildWhenUpstreamBuilding(); /** * Sets blockBuildWhenUpstreamBuilding flag. * * @param b new boolean value. * @throws IOException if any. */ void setBlockBuildWhenUpstreamBuilding(boolean b) throws IOException; /** * Returns scm checkout retry count. * * @return int value. */ int getScmCheckoutRetryCount(); /** * Returns project quiet period. * * @return int value. */ int getQuietPeriod(); /** * Sets the custom quiet period of this project, or revert to the global * default if null is given. * * @param seconds quiet period * @throws IOException if any. */ void setQuietPeriod(Integer seconds) throws IOException; /** * If this project is configured to be always built on this node, return * that {@link hudson.model.Node}. Otherwise null. * * @return {@link hudson.model.Label} instance. */ Label getAssignedLabel(); /** * Gets the textual representation of the assigned label as it was entered * by the user. * * @return string */ String getAssignedLabelString(); /** * Sets the assigned label. * * @param label node label. * @throws java.io.IOException exception. */ void setAssignedLabel(Label label) throws IOException; /** * Assigns this job to the given node. A convenience method over * {@link #setAssignedLabel(Label)}. * * @param node node. * @throws java.io.IOException exception */ void setAssignedNode(Node node) throws IOException; /** * Gets whether this project is using the advanced affinity chooser UI. * * @return true - advanced chooser, false - simple textfield. */ boolean isAdvancedAffinityChooser(); /** * Sets whether this project is using the advanced affinity chooser UI. * * @param b true - advanced chooser, false - otherwise * @throws java.io.IOException exception. */ void setAdvancedAffinityChooser(boolean b) throws IOException; /** * Sets {@link hudson.model.AppointedNode}. * * @param appointedNode {@link hudson.model.AppointedNode}. */ void setAppointedNode(AppointedNode appointedNode); /** * Returns {@link AppointedNode}. Returned value is not null. * * @return appointedNode {@link AppointedNode}. */ AppointedNode getAppointedNode(); /** * Returns the root project value. * * @return the root project value. */ AbstractProject getRootProject(); /** * Gets a workspace for some build of this project. * <p/> * < * p/> This is useful for obtaining a workspace for the purpose of form * field validation, where exactly which build the workspace belonged is * less important. The implementation makes a cursory effort to find some * workspace. * * @return null if there's no available workspace. * @since 1.319 */ FilePath getSomeWorkspace(); /** * Gets some build that has a live workspace. * * @return null if no such build exists. */ <R extends AbstractBuild> R getSomeBuildWithWorkspace(); /** * Used in <tt>sidepanel.jelly</tt> to decide whether to display the * config/delete/build links. * * @return true - if configurable, false - otherwise. */ boolean isConfigurable(); /** * @return true if project disabled, false - otherwise. */ boolean isDisabled(); /** * Marks the build as disabled. * * @param b true - to disable project, false - enable. * @throws IOException if any. */ void makeDisabled(boolean b) throws IOException; /** * @return list of {@link ProminentProjectAction}s for current project. */ List<ProminentProjectAction> getProminentActions(); /** * @return true if project is parameterized. */ boolean isParameterized(); /** * Cleans project workspace. * * @return true if success, false otherwise. * @throws IOException if any. * @throws InterruptedException if any. */ boolean cleanWorkspace() throws IOException, InterruptedException; /** * @return name of jdk chosen for current project. Could taken from parent */ String getJDKName(); /** * @return JDK that this project is configured with, or null. */ JDK getJDK(); /** * Overwrites the JDK setting. * * @param jdk new jdk name value. */ void setJDK(String jdk); /** * Overwrites the JDK setting. * * @param jdk new {@link JDK} candidate * @throws IOException if any. */ void setJDK(JDK jdk) throws IOException; /** * @return the other {@link AbstractProject}s that should be built when a * build of this project is completed. */ List<AbstractProject> getDownstreamProjects(); /** * @return the other {@link AbstractProject}s that should be built before a * build of this project is started. */ List<AbstractProject> getUpstreamProjects(); /** * Returns only those upstream projects that defines * {@link hudson.tasks.BuildTrigger} to this project. This is a subset of * {@link #getUpstreamProjects()} * * @return A List of upstream projects that has a * {@link hudson.tasks.BuildTrigger} to this project. */ List<AbstractProject> getBuildTriggerUpstreamProjects(); /** * @return all the upstream projects including transitive upstream projects. * @since 1.138 */ Set<AbstractProject> getTransitiveUpstreamProjects(); /** * @return all the downstream projects including transitive downstream * projects. * @since 1.138 */ Set<AbstractProject> getTransitiveDownstreamProjects(); /** * Gets the dependency relationship map between this project (as the source) * and that project (as the sink.) * * @param that {@link AbstractProject} to find relations. * @return can be empty but not null. build number of this project to the * build numbers of that project. */ SortedMap<Integer, Fingerprint.RangeSet> getRelationship(AbstractProject that); }