/*******************************************************************************
*
* 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);
}