diff options
author | Fabrice Bellingard <fabrice.bellingard@sonarsource.com> | 2012-09-27 09:58:53 +0200 |
---|---|---|
committer | Fabrice Bellingard <fabrice.bellingard@sonarsource.com> | 2012-09-27 09:58:53 +0200 |
commit | b723f9f83d33a962e9b949cfa05a8fb7d9e5f657 (patch) | |
tree | 6bceb6dedb5c091dcc7f89f31232e6ab3cbc83df | |
parent | d999cece595da7c843de473fae9cc0631169a7fc (diff) | |
download | sonarqube-b723f9f83d33a962e9b949cfa05a8fb7d9e5f657.tar.gz sonarqube-b723f9f83d33a962e9b949cfa05a8fb7d9e5f657.zip |
SONAR-3636 Add and feed a new column projects.created_at
=> The goal of this column is only to provide an additional piece
of information when something wrong happens.
5 files changed, 78 insertions, 24 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index 494807f1988..8aa94e8d2a5 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -35,7 +35,7 @@ import java.util.List; */ public class DatabaseVersion implements BatchComponent, ServerComponent { - public static final int LAST_VERSION = 321; + public static final int LAST_VERSION = 330; public static enum Status { UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql index 1dc3d34d0e2..9b7211d2862 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql @@ -171,6 +171,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('305'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('306'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('320'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('321'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('330'); INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl index df9d24c9993..a66ee4b5f0f 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl @@ -297,7 +297,8 @@ CREATE TABLE "PROJECTS" ( "LANGUAGE" VARCHAR(5), "COPY_RESOURCE_ID" INTEGER, "LONG_NAME" VARCHAR(256), - "PERSON_ID" INTEGER + "PERSON_ID" INTEGER, + "CREATED_AT" TIMESTAMP ); CREATE TABLE "REVIEWS" ( diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/database/model/ResourceModel.java b/sonar-plugin-api/src/main/java/org/sonar/api/database/model/ResourceModel.java index d4ff46a2f1a..ae8813822ac 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/database/model/ResourceModel.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/database/model/ResourceModel.java @@ -29,8 +29,19 @@ import org.sonar.api.profiles.RulesProfile; import org.sonar.api.resources.ProjectLink; import org.sonar.api.resources.Resource; -import javax.persistence.*; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -80,6 +91,10 @@ public class ResourceModel extends BaseIdentifiable implements Cloneable { @Column(name = "person_id", updatable = true, nullable = true) private Integer personId; + @Temporal(TemporalType.TIMESTAMP) + @Column(name = "created_at", updatable = true, nullable = true) + private Date createdAt; + @OneToMany(mappedBy = "resource", fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}) @BatchSize(size = 8) private List<ProjectLink> projectLinks = new ArrayList<ProjectLink>(); @@ -92,6 +107,7 @@ public class ResourceModel extends BaseIdentifiable implements Cloneable { * Default constructor */ public ResourceModel() { + this.createdAt = new Date(); } /** @@ -104,6 +120,8 @@ public class ResourceModel extends BaseIdentifiable implements Cloneable { * @param name the short name of the resource */ public ResourceModel(String scope, String key, String qualifier, Integer rootId, String name) { + // call this to have the "createdAt" field initialized + this(); this.scope = scope; this.key = key; this.rootId = rootId; @@ -262,6 +280,10 @@ public class ResourceModel extends BaseIdentifiable implements Cloneable { this.qualifier = qualifier; } + public Date getCreatedAt() { + return createdAt; + } + @Override public boolean equals(Object obj) { if (!(obj instanceof ResourceModel)) { @@ -272,36 +294,36 @@ public class ResourceModel extends BaseIdentifiable implements Cloneable { } ResourceModel other = (ResourceModel) obj; return new EqualsBuilder() - .append(key, other.key) - .append(enabled, other.enabled) - .append(rootId, other.rootId) - .isEquals(); + .append(key, other.key) + .append(enabled, other.enabled) + .append(rootId, other.rootId) + .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder(17, 37) - .append(key) - .append(enabled) - .append(rootId) - .toHashCode(); + .append(key) + .append(enabled) + .append(rootId) + .toHashCode(); } @Override public String toString() { return new ToStringBuilder(this) - .append("id", getId()) - .append("key", key) - .append("scope", scope) - .append("qualifier", qualifier) - .append("name", name) - .append("longName", longName) - .append("lang", languageKey) - .append("enabled", enabled) - .append("rootId", rootId) - .append("copyResourceId", copyResourceId) - .append("personId", personId) - .toString(); + .append("id", getId()) + .append("key", key) + .append("scope", scope) + .append("qualifier", qualifier) + .append("name", name) + .append("longName", longName) + .append("lang", languageKey) + .append("enabled", enabled) + .append("rootId", rootId) + .append("copyResourceId", copyResourceId) + .append("personId", personId) + .toString(); } @Override @@ -340,4 +362,4 @@ public class ResourceModel extends BaseIdentifiable implements Cloneable { return model; } -}
\ No newline at end of file +} diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/330_add_created_at_on_projects.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/330_add_created_at_on_projects.rb new file mode 100644 index 00000000000..473941b29c8 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/330_add_created_at_on_projects.rb @@ -0,0 +1,30 @@ +# +# Sonar, open source software quality management tool. +# Copyright (C) 2008-2012 SonarSource +# mailto:contact AT sonarsource DOT com +# +# Sonar is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3 of the License, or (at your option) any later version. +# +# Sonar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with Sonar; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 +# + +# +# Sonar 3.3 +# +class AddCreatedAtOnProjects < ActiveRecord::Migration + + def self.up + add_column 'projects', 'created_at', :datetime, :null => true + end + +end |