From 2515f43a1294ebb0f23683183cd1ab23b6d42e31 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 28 Apr 2014 16:01:18 +0200 Subject: [PATCH] SONAR-5111 Create a handler to create java stub ws controllers for rails ws --- .../org/sonar/api/server/ws/RailsHandler.java | 41 +++++++++++++++++++ .../sonar/api/server/ws/RailsHandlerTest.java | 31 ++++++++++++++ .../webapp/WEB-INF/lib/java_ws_routing.rb | 6 ++- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 sonar-plugin-api/src/main/java/org/sonar/api/server/ws/RailsHandler.java create mode 100644 sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RailsHandlerTest.java diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/RailsHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/RailsHandler.java new file mode 100644 index 00000000000..53c9ad12a4d --- /dev/null +++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/RailsHandler.java @@ -0,0 +1,41 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 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. + */ + +package org.sonar.api.server.ws; + +/** + * Used to declare web services that are still implemented in rails. + * + * @since 4.4 + */ +public class RailsHandler implements RequestHandler { + + public static final RequestHandler INSTANCE = new RailsHandler(){}; + + private RailsHandler() { + // Nothing + } + + @Override + public void handle(Request request, Response response) { + throw new UnsupportedOperationException("This web service is implemented in rails"); + } + +} diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RailsHandlerTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RailsHandlerTest.java new file mode 100644 index 00000000000..1652a661596 --- /dev/null +++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RailsHandlerTest.java @@ -0,0 +1,31 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 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. + */ + +package org.sonar.api.server.ws; + +import org.junit.Test; + +public class RailsHandlerTest { + + @Test(expected = UnsupportedOperationException.class) + public void throw_unsupported_operation_exception() throws Exception { + RailsHandler.INSTANCE.handle(null, null); + } +} diff --git a/sonar-server/src/main/webapp/WEB-INF/lib/java_ws_routing.rb b/sonar-server/src/main/webapp/WEB-INF/lib/java_ws_routing.rb index a7e8f61999e..ac54ba5ce65 100644 --- a/sonar-server/src/main/webapp/WEB-INF/lib/java_ws_routing.rb +++ b/sonar-server/src/main/webapp/WEB-INF/lib/java_ws_routing.rb @@ -26,14 +26,16 @@ module ActionController deprecated_web_services = Java::OrgSonarServerUi::JRubyFacade.new.getRubyRailsWebservices() deprecated_web_services.each do |ws| eval(ws.getTemplate()) - prepend_route("api/plugins/#{ws.getId()}/:action/:id", {:controller => "api/#{ws.getId()}", :requirements => { :id => /.*/ }}) + prepend_route("api/plugins/#{ws.getId()}/:action/:id", {:controller => "api/#{ws.getId()}", :requirements => {:id => /.*/}}) end # Full Java web services ws_engine = Java::OrgSonarServerPlatform::Platform.component(Java::OrgSonarServerWs::WebServiceEngine.java_class) ws_engine.controllers().each do |controller| controller.actions.each do |action| - prepend_route("#{controller.path()}/#{action.key()}/:id", {:controller => 'api/java_ws', :action => 'index', :wsaction => action.key(), :wspath => controller.path()}) + if (!action.handler().java_kind_of?(Java::OrgSonarApiServerWs::RailsHandler)) + prepend_route("#{controller.path()}/#{action.key()}/:id", {:controller => 'api/java_ws', :action => 'index', :wsaction => action.key(), :wspath => controller.path()}) + end end end end -- 2.39.5