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     */
020    package org.sonar.api.rules;
021    
022    import org.apache.commons.lang.StringUtils;
023    import org.apache.commons.lang.builder.ToStringBuilder;
024    
025    import javax.persistence.*;
026    
027    @Entity
028    @Table(name = "rules_parameters")
029    public class RuleParam {
030    
031      @Id
032      @Column(name = "id")
033      @GeneratedValue
034      private Integer id;
035    
036      @ManyToOne(fetch = FetchType.EAGER)
037      @JoinColumn(name = "rule_id")
038      private Rule rule;
039    
040      @Column(name = "name", updatable = true, nullable = false, length = 128)
041      private String key;
042    
043      @Column(name = "description", updatable = true, nullable = true, length = 4000)
044      private String description;
045    
046      @Column(name = "param_type", updatable = true, nullable = true, length = 512)
047      private String type = "STRING";
048    
049      @Column(name = "default_value", updatable = true, nullable = true, length = 4000)
050      private String defaultValue;
051    
052      /**
053       * @deprecated since 2.3 use the factory method Rule.setParameter()
054       */
055      @Deprecated
056      public RuleParam() {
057      }
058    
059      /**
060       * @deprecated since 2.3 use the factory method setParameter()
061       */
062      @Deprecated
063      public RuleParam(Rule rule, String key, String description, String type) {
064        this.rule = rule;
065        this.key = key;
066        this.description = description;
067        this.type = type;
068      }
069    
070      public Integer getId() {
071        return id;
072      }
073    
074      public Rule getRule() {
075        return rule;
076      }
077    
078      RuleParam setRule(Rule rule) {
079        this.rule = rule;
080        return this;
081      }
082    
083      public String getKey() {
084        return key;
085      }
086    
087      public RuleParam setKey(String key) {
088        this.key = key;
089        return this;
090      }
091    
092      public String getDescription() {
093        return description;
094      }
095    
096      public RuleParam setDescription(String s) {
097        this.description = StringUtils.defaultString(s, "");
098        return this;
099      }
100    
101      public String getType() {
102        return type;
103      }
104    
105      public RuleParam setType(String type) {
106        this.type = type;
107        return this;
108      }
109    
110      public String getDefaultValue() {
111        return defaultValue;
112      }
113    
114      public Boolean getDefaultValueAsBoolean() {
115        if (defaultValue != null) {
116          return Boolean.parseBoolean(defaultValue);
117        }
118        return null;
119      }
120    
121      public Integer getDefaultValueAsInteger() {
122        if (defaultValue != null) {
123          return Integer.parseInt(defaultValue);
124        }
125        return null;
126      }
127    
128      public RuleParam setDefaultValue(String s) {
129        this.defaultValue = s;
130        return this;
131      }
132    
133      @Override
134      public boolean equals(Object obj) {
135        if (!(obj instanceof RuleParam)) {
136          return false;
137        }
138        if (this == obj) {
139          return true;
140        }
141        RuleParam other = (RuleParam) obj;
142        return other.key.equals(key);
143      }
144    
145      @Override
146      public int hashCode() {
147        return key.hashCode();
148      }
149    
150      @Override
151      public String toString() {
152        return new ToStringBuilder(this)
153            .append("id", id)
154            .append("key", key)
155            .append("desc", description)
156            .append("type", type)
157            .toString();
158      }
159    }