Browse Source

SONAR-5007 refactor restore of built-in profiles

tags/4.4-RC1
Simon Brandhof 10 years ago
parent
commit
9fc136fdb4

+ 2
- 2
sonar-core/src/main/resources/org/sonar/l10n/core.properties View File

@@ -1621,8 +1621,8 @@ quality_profiles.remove_projects_confirm_message=Are you sure that you want to d
quality_profiles.remove_projects_confirm_button=Remove All
quality_profiles.copy_x_title=Copy Profile {0}
quality_profiles.copy_new_name=New name
quality_profiles.recreate_built_in_profiles=Recreate Built-in Profiles
quality_profiles.recreate_built_in_profiles_confirmation=Are you sure you want to recreate '{0}' profile(s) for '{1}' ?
quality_profiles.restore_built_in_profiles=Restore Built-in Profiles
quality_profiles.restore_built_in_profiles_confirmation=Are you sure you want to restore '{0}' profile(s) for '{1}' ?

#------------------------------------------------------------------------------
#

+ 2
- 2
sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java View File

@@ -195,7 +195,7 @@ import org.sonar.server.qualityprofile.index.ActiveRuleIndex;
import org.sonar.server.qualityprofile.index.ActiveRuleNormalizer;
import org.sonar.server.qualityprofile.ws.BulkRuleActivationActions;
import org.sonar.server.qualityprofile.ws.ProfilesWs;
import org.sonar.server.qualityprofile.ws.QProfileRecreateBuiltInAction;
import org.sonar.server.qualityprofile.ws.QProfileRestoreBuiltInAction;
import org.sonar.server.qualityprofile.ws.QProfilesWs;
import org.sonar.server.qualityprofile.ws.RuleActivationActions;
import org.sonar.server.rule.DeprecatedRulesDefinition;
@@ -429,7 +429,7 @@ class ServerComponents {
pico.addSingleton(QProfileProjectLookup.class);
pico.addSingleton(QProfileRepositoryExporter.class);
pico.addSingleton(BuiltInProfiles.class);
pico.addSingleton(QProfileRecreateBuiltInAction.class);
pico.addSingleton(QProfileRestoreBuiltInAction.class);
pico.addSingleton(QProfilesWs.class);
pico.addSingleton(ProfilesWs.class);
pico.addSingleton(RuleActivationActions.class);

+ 4
- 0
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileReset.java View File

@@ -68,6 +68,10 @@ public class QProfileReset implements ServerComponent {
return builtInProfiles.byLanguage(language);
}

/**
* Reset built-in profiles for the given language. Missing profiles are created and
* existing ones are updated
*/
void resetLanguage(String language) {
ListMultimap<String, RulesProfile> profilesByName = loadDefinitionsGroupedByName(language);
for (Map.Entry<String, Collection<RulesProfile>> entry : profilesByName.asMap().entrySet()) {

+ 1
- 1
sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java View File

@@ -145,7 +145,7 @@ public class QProfileService implements ServerComponent {
restore(new StringReader(backup));
}

public void resetBuiltInProfilesForLanguage(String lang) {
public void restoreBuiltInProfilesForLanguage(String lang) {
verifyAdminPermission();
reset.resetLanguage(lang);
}

sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRecreateBuiltInAction.java → sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRestoreBuiltInAction.java View File

@@ -28,30 +28,31 @@ import org.sonar.api.utils.text.JsonWriter;
import org.sonar.server.qualityprofile.QProfileResult;
import org.sonar.server.qualityprofile.QProfileService;

public class QProfileRecreateBuiltInAction implements RequestHandler {
public class QProfileRestoreBuiltInAction implements RequestHandler {

private final QProfileService service;

public QProfileRecreateBuiltInAction(QProfileService service) {
public QProfileRestoreBuiltInAction(QProfileService service) {
this.service = service;
}

void define(WebService.NewController controller) {
WebService.NewAction restoreDefault = controller.createAction("recreate_built_in")
.setDescription("Recreate Built-in Profiles")
WebService.NewAction restoreDefault = controller.createAction("restore_built_in")
.setDescription("Restore built-in profiles from the definitions declared by plugins. " +
"Missing profiles are created, existing ones are updated.")
.setSince("4.4")
.setPost(true)
.setHandler(this);
restoreDefault.createParam("language")
.setDescription("Recreate built-in profiles for this language")
.setDescription("Restore the built-in profiles defined for this language")
.setExampleValue("java")
.setRequired(true);
}

@Override
public void handle(Request request, Response response) {
final String language = request.mandatoryParam("language");
service.resetBuiltInProfilesForLanguage(language);
String language = request.mandatoryParam("language");
service.restoreBuiltInProfilesForLanguage(language);

// TODO
QProfileResult result = new QProfileResult();

+ 4
- 4
sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfilesWs.java View File

@@ -25,14 +25,14 @@ public class QProfilesWs implements WebService {

public static final String API_ENDPOINT = "api/qualityprofiles";

private final QProfileRecreateBuiltInAction recreateBuiltInAction;
private final QProfileRestoreBuiltInAction resetAction;
private final RuleActivationActions ruleActivationActions;
private final BulkRuleActivationActions bulkRuleActivationActions;

public QProfilesWs(QProfileRecreateBuiltInAction recreateBuiltInAction,
public QProfilesWs(QProfileRestoreBuiltInAction resetAction,
RuleActivationActions ruleActivationActions,
BulkRuleActivationActions bulkRuleActivationActions) {
this.recreateBuiltInAction = recreateBuiltInAction;
this.resetAction = resetAction;
this.ruleActivationActions = ruleActivationActions;
this.bulkRuleActivationActions = bulkRuleActivationActions;
}
@@ -43,7 +43,7 @@ public class QProfilesWs implements WebService {
.setDescription("Quality Profiles")
.setSince("4.4");

recreateBuiltInAction.define(controller);
resetAction.define(controller);
ruleActivationActions.define(controller);
bulkRuleActivationActions.define(controller);


+ 7
- 7
sonar-server/src/main/webapp/WEB-INF/app/controllers/profiles_controller.rb View File

@@ -59,24 +59,24 @@ class ProfilesController < ApplicationController
redirect_to :action => 'index'
end

# Modal window to recreate built-in profiles
# GET /profiles/recreate_built_in_form/<profile id>
def recreate_built_in_form
# Modal window to restore built-in profiles
# GET /profiles/restore_built_in_form/<profile id>
def restore_built_in_form
verify_ajax_request
require_parameters 'language'
@language = java_facade.getLanguages().find { |l| l.getKey()==params[:language].to_s }
call_backend do
@builtin_profile_names = Internal.component(Java::OrgSonarServerQualityprofile::QProfileService.java_class).builtInProfileNamesForLanguage(params[:language].to_s)
end
render :partial => 'profiles/recreate_built_in_form'
render :partial => 'profiles/restore_built_in_form'
end

# POST /profiles/recreate_built_in_form?language=<language>
def recreate_built_in
# POST /profiles/restore_built_in?language=<language>
def restore_built_in
verify_post_request
require_parameters 'language'
call_backend do
Internal.component(Java::OrgSonarServerQualityprofile::QProfileService.java_class).resetBuiltInProfilesForLanguage(params[:language].to_s)
Internal.component(Java::OrgSonarServerQualityprofile::QProfileService.java_class).restoreBuiltInProfilesForLanguage(params[:language].to_s)
#flash_result(@result)
end
redirect_to :action => 'index'

+ 0
- 18
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_recreate_built_in_form.html.erb View File

@@ -1,18 +0,0 @@
<form id="recreate-built-in-profiles-form" action="profiles/recreate_built_in" method="POST">
<fieldset>
<input type="hidden" name="language" value="<%= @language.getKey() -%>"/>

<div class="modal-head">
<h2><%= h message('quality_profiles.recreate_built_in_profiles') -%></h2>
</div>

<div class="modal-body">
<%= h message('quality_profiles.recreate_built_in_profiles_confirmation', :params => [@builtin_profile_names.join('\', \''), @language.getName()]) -%>
</div>

<div class="modal-foot">
<input type="submit" value="<%= h message('restore') -%>" id="recreate-built-in-profiles-submit"/>
<a href="#" onclick="return closeModalWindow()" id="recreate-built-in-profiles-cancel"><%= h message('cancel') -%></a>
</div>
</fieldset>
</form>

+ 18
- 0
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/_restore_built_in_form.html.erb View File

@@ -0,0 +1,18 @@
<form id="restore-built-in-profiles-form" action="profiles/restore_built_in" method="POST">
<fieldset>
<input type="hidden" name="language" value="<%= @language.getKey() -%>"/>

<div class="modal-head">
<h2><%= h message('quality_profiles.restore_built_in_profiles') -%></h2>
</div>

<div class="modal-body">
<%= h message('quality_profiles.restore_built_in_profiles_confirmation', :params => [@builtin_profile_names.join('\', \''), @language.getName()]) -%>
</div>

<div class="modal-foot">
<input type="submit" value="<%= h message('restore') -%>" id="restore-built-in-profiles-submit"/>
<a href="#" onclick="return closeModalWindow()" id="restore-built-in-profiles-cancel"><%= h message('cancel') -%></a>
</div>
</fieldset>
</form>

+ 2
- 2
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/index.html.erb View File

@@ -29,8 +29,8 @@
</ul>
<ul style="float: right" class="horizontal">
<li class="marginleft10">
<a id="create-link-<%= language.getKey() -%>" href="<%= ApplicationController.root_context -%>/profiles/recreate_built_in_form?language=<%= u language.getKey() -%>"
class="open-modal link-action"><%= message('quality_profiles.recreate_built_in_profiles') -%></a>
<a id="create-link-<%= language.getKey() -%>" href="<%= ApplicationController.root_context -%>/profiles/restore_built_in_form?language=<%= u language.getKey() -%>"
class="open-modal link-action"><%= message('quality_profiles.restore_built_in_profiles') -%></a>
</li>
</ul>
<% end %>

sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRecreateBuiltInActionTest.java → sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreBuiltInActionTest.java View File

@@ -25,17 +25,14 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.server.qualityprofile.QProfileResult;
import org.sonar.server.qualityprofile.QProfileService;
import org.sonar.server.rule.RuleService;
import org.sonar.server.ws.WsTester;

import static com.google.common.collect.Lists.newArrayList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class QProfileRecreateBuiltInActionTest {
public class QProfileRestoreBuiltInActionTest {

@Mock
QProfileService profileService;
@@ -47,7 +44,7 @@ public class QProfileRecreateBuiltInActionTest {
QProfileService profileService = mock(QProfileService.class);
RuleService ruleService = mock(RuleService.class);
tester = new WsTester(new QProfilesWs(
new QProfileRecreateBuiltInAction(this.profileService),
new QProfileRestoreBuiltInAction(this.profileService),
new RuleActivationActions(profileService),
new BulkRuleActivationActions(profileService, ruleService)));
}
@@ -56,7 +53,7 @@ public class QProfileRecreateBuiltInActionTest {
public void return_empty_result_when_no_infos_or_warnings() throws Exception {
//when(profileService.resetBuiltInProfilesForLanguage("java")).thenReturn(new QProfileResult());

WsTester.TestRequest request = tester.newPostRequest("api/qualityprofiles", "recreate_built_in").setParam("language", "java");
WsTester.TestRequest request = tester.newPostRequest("api/qualityprofiles", "restore_built_in").setParam("language", "java");
request.execute().assertNoContent();
}


+ 1
- 2
sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java View File

@@ -52,11 +52,10 @@ import static org.fest.assertions.Fail.fail;

public class QProfilesWsMediumTest {


@ClassRule
public static ServerTester tester = new ServerTester();

private static final String API_BUILT_IN_METHOD = "recreate_built_in";
private static final String API_BUILT_IN_METHOD = "restore_built_in";

QProfilesWs ws;
DbClient db;

+ 3
- 3
sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java View File

@@ -38,7 +38,7 @@ public class QProfilesWsTest {
public void setUp() {
QProfileService profileService = mock(QProfileService.class);
RuleService ruleService = mock(RuleService.class);
controller = new WsTester(new QProfilesWs(new QProfileRecreateBuiltInAction(
controller = new WsTester(new QProfilesWs(new QProfileRestoreBuiltInAction(
mock(QProfileService.class)),
new RuleActivationActions(profileService),
new BulkRuleActivationActions(profileService, ruleService)
@@ -54,8 +54,8 @@ public class QProfilesWsTest {
}

@Test
public void define_recreate_built_action() throws Exception {
WebService.Action restoreProfiles = controller.action("recreate_built_in");
public void define_restore_built_action() throws Exception {
WebService.Action restoreProfiles = controller.action("restore_built_in");
assertThat(restoreProfiles).isNotNull();
assertThat(restoreProfiles.isPost()).isTrue();
assertThat(restoreProfiles.params()).hasSize(1);

Loading…
Cancel
Save