]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4887 Restore backup controller as it is used by ITs
authorJulien HENRY <julien.henry@sonarsource.com>
Wed, 27 Nov 2013 08:15:03 +0000 (09:15 +0100)
committerJulien HENRY <julien.henry@sonarsource.com>
Wed, 27 Nov 2013 08:15:56 +0000 (09:15 +0100)
sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/backup_controller.rb [new file with mode: 0644]

index e2ceb4f4a9821d073aaa8211b520fe9f68ff70b8..e23333868452e5cceb8a549816059a3455501280 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.server.ui;
 
+import org.sonar.core.preview.PreviewCache;
+
 import org.slf4j.LoggerFactory;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.License;
@@ -50,11 +52,11 @@ import org.sonar.core.i18n.RuleI18nManager;
 import org.sonar.core.measure.MeasureFilterEngine;
 import org.sonar.core.measure.MeasureFilterResult;
 import org.sonar.core.persistence.Database;
-import org.sonar.core.preview.PreviewCache;
 import org.sonar.core.purge.PurgeDao;
 import org.sonar.core.resource.ResourceIndexerDao;
 import org.sonar.core.resource.ResourceKeyUpdaterDao;
 import org.sonar.core.timemachine.Periods;
+import org.sonar.server.configuration.Backup;
 import org.sonar.server.configuration.ProfilesManager;
 import org.sonar.server.db.migrations.DatabaseMigrator;
 import org.sonar.server.platform.Platform;
@@ -333,6 +335,10 @@ public final class JRubyFacade {
     return getContainer().getComponentsByType(Footer.class);
   }
 
+  public Backup getBackup() {
+    return get(Backup.class);
+  }
+
   private ProfilesManager getProfilesManager() {
     return get(ProfilesManager.class);
   }
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/backup_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/backup_controller.rb
new file mode 100644 (file)
index 0000000..7d71472
--- /dev/null
@@ -0,0 +1,60 @@
+#
+# Sonar, entreprise quality control tool.
+# Copyright (C) 2008-2013 SonarSource
+# mailto:contact AT sonarsource DOT com
+#
+# SonarQube 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.
+#
+# SonarQube 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 this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+class BackupController < ApplicationController
+
+  SECTION=Navigation::SECTION_CONFIGURATION
+
+  before_filter :admin_required
+
+  def index
+  end
+
+  def export
+    filename="sonar_backup_#{Date.today}.xml"
+    xml=java_facade.getBackup().exportXml()
+    send_data xml, :type => "application/xml", :filename => filename, :disposition => 'attachment'
+  end
+
+  def import
+    verify_post_request
+    file=params[:file]
+    xml=read_file(file)
+    if xml && !xml.empty?
+      java_facade.getBackup().importXml(xml)
+      Metric.clear_cache
+      flash[:notice] = "Backup restore succeed"
+    else
+      flash[:error] = "File is empty or invalid"
+    end
+    redirect_to :action => 'index'
+  end
+
+  private
+
+  def read_file(file)
+    # file is a StringIO
+    if file.respond_to?(:read)
+      return file.read
+    end
+    # file is not a readable object
+    nil
+  end
+
+end