001/*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2014 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * SonarQube is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019 */
020package org.sonar.wsclient.services;
021
022/**
023 * The web service "dependency" is since Sonar 2.0
024 */
025public class DependencyQuery extends Query<Dependency> {
026  public static final String BASE_URL = "/api/dependencies";
027
028  private String resourceIdOrKey = null;
029  private String direction = null;
030  private String parentId = null;
031  private String id = null;
032  public static final String INCOMING_DIRECTION = "in";
033  public static final String OUTGOING_DIRECTION = "out";
034
035  public String getResourceIdOrKey() {
036    return resourceIdOrKey;
037  }
038
039  public DependencyQuery setResourceIdOrKey(String resourceIdOrKey) {
040    this.resourceIdOrKey = resourceIdOrKey;
041    return this;
042  }
043
044  public DependencyQuery setResourceId(long resourceId) {
045    this.resourceIdOrKey = String.valueOf(resourceId);
046    return this;
047  }
048
049  public String getDirection() {
050    return direction;
051  }
052
053  public DependencyQuery setDirection(String direction) {
054    this.direction = direction;
055    return this;
056  }
057
058  @Override
059  public String getUrl() {
060    StringBuilder url = new StringBuilder(BASE_URL);
061    url.append('?');
062    appendUrlParameter(url, "resource", resourceIdOrKey);
063    appendUrlParameter(url, "dir", direction);
064    appendUrlParameter(url, "parent", parentId);
065    appendUrlParameter(url, "id", id);
066    return url.toString();
067  }
068
069  public String getParentId() {
070    return parentId;
071  }
072
073  public String getId() {
074    return id;
075  }
076
077  public DependencyQuery setId(String id) {
078    this.id = id;
079    return this;
080  }
081
082  public DependencyQuery setParentId(String parentId) {
083    this.parentId = parentId;
084    return this;
085  }
086
087  @Override
088  public Class<Dependency> getModelClass() {
089    return Dependency.class;
090  }
091
092  /**
093   * Resources that depend upon a resource
094   * 
095   * @param resourceIdOrKey the target resource. Can be the primary key (a number) or the logical key (String)
096   */
097  public static DependencyQuery createForIncomingDependencies(String resourceIdOrKey) {
098    DependencyQuery query = new DependencyQuery();
099    query.setResourceIdOrKey(resourceIdOrKey);
100    query.setDirection(INCOMING_DIRECTION);
101    return query;
102  }
103
104  /**
105   * Resources that are depended upon a resource = all the resources that a resource depends upon
106   * 
107   * @param resourceIdOrKey the target resource. Can be the primary key (an integer) or the logical key (String)
108   */
109  public static DependencyQuery createForOutgoingDependencies(String resourceIdOrKey) {
110    DependencyQuery query = new DependencyQuery();
111    query.setResourceIdOrKey(resourceIdOrKey);
112    query.setDirection(OUTGOING_DIRECTION);
113    return query;
114  }
115
116  /**
117   * Resources that depend upon or are depended upon a resource. It equals the merge of createForIncomingDependencies(resourceIdOrKey)
118   * and createForOutgoingDependencies(resourceIdOrKey)
119   * 
120   * @param resourceIdOrKey the target resource. Can be the primary key (an integer) or the logical key (String)
121   */
122  public static DependencyQuery createForResource(String resourceIdOrKey) {
123    DependencyQuery query = new DependencyQuery();
124    query.setResourceIdOrKey(resourceIdOrKey);
125    return query;
126  }
127
128  public static DependencyQuery createForResource(long resourceId) {
129    DependencyQuery query = new DependencyQuery();
130    query.setResourceId(resourceId);
131    return query;
132  }
133
134  public static DependencyQuery createForSubDependencies(String dependencyId) {
135    DependencyQuery query = new DependencyQuery();
136    query.setParentId(dependencyId);
137    return query;
138  }
139
140  public static DependencyQuery createForId(String id) {
141    DependencyQuery query = new DependencyQuery();
142    query.setId(id);
143    return query;
144  }
145}