diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-11-27 09:15:03 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-11-27 09:15:56 +0100 |
commit | ac5db8387bfabeb9a78ce172fedc6fa86eb9b1e2 (patch) | |
tree | 059fe1e529cd7dcfccdc929628710c0f8407b70f /sonar-server | |
parent | 42f4938bcb2178d6d6b247041364361e0dfcce35 (diff) | |
download | sonarqube-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.java | 8 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/controllers/backup_controller.rb | 60 |
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 |