aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-11-27 09:15:03 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2013-11-27 09:15:56 +0100
commitac5db8387bfabeb9a78ce172fedc6fa86eb9b1e2 (patch)
tree059fe1e529cd7dcfccdc929628710c0f8407b70f /sonar-server
parent42f4938bcb2178d6d6b247041364361e0dfcce35 (diff)
downloadsonarqube-ac5db8387bfabeb9a78ce172fedc6fa86eb9b1e2.tar.gz
sonarqube-ac5db8387bfabeb9a78ce172fedc6fa86eb9b1e2.zip
SONAR-4887 Restore backup controller as it is used by ITs
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java8
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/backup_controller.rb60
2 files changed, 67 insertions, 1 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
index e2ceb4f4a98..e2333386845 100644
--- a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
+++ b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
@@ -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
index 00000000000..7d71472cfa2
--- /dev/null
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/backup_controller.rb
@@ -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