]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3636 Add and feed a new column projects.created_at
authorFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Thu, 27 Sep 2012 07:58:53 +0000 (09:58 +0200)
committerFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Thu, 27 Sep 2012 07:58:53 +0000 (09:58 +0200)
=> The goal of this column is only to provide an additional piece
   of information when something wrong happens.

sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java
sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql
sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl
sonar-plugin-api/src/main/java/org/sonar/api/database/model/ResourceModel.java
sonar-server/src/main/webapp/WEB-INF/db/migrate/330_add_created_at_on_projects.rb [new file with mode: 0644]

index 494807f1988f82af43c18d5438bef00c943a99fa..8aa94e8d2a549e71e78532b54b9da528f8057f41 100644 (file)
@@ -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
index 1dc3d34d0e2a00144ae7a7bcf757109b983f7953..9b7211d2862b3b008e084ae3e24eab31dfd84cf1 100644 (file)
@@ -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;
index df9d24c9993ff6787a8d85149b8142119dffe610..a66ee4b5f0f3abcfd0785c5278c1ae7660b351e5 100644 (file)
@@ -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" (
index d4ff46a2f1ab56719ab45df685964d5d6e39268a..ae8813822ac65b094a201cc13d2c6779be771870 100644 (file)
@@ -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 (file)
index 0000000..473941b
--- /dev/null
@@ -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