Skip to content

Commit dd02623

Browse files
committed
Merge pull request #160 from maeisabelle/75-SwaggerUIForHubAPIs
75 - Swagger UI to browse the Hub APIs
2 parents 5dade4c + 8959440 commit dd02623

File tree

11 files changed

+112
-5
lines changed

11 files changed

+112
-5
lines changed

quick-start/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ dependencies {
3333
compile('org.springframework.boot:spring-boot-starter')
3434
compile('org.springframework.boot:spring-boot-starter-web')
3535
compile project(':marklogic-data-hub')
36+
compile('io.springfox:springfox-swagger2:2.4.0')
37+
compile('org.webjars.bower:angular-swagger-ui:0.3.1')
3638
providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
3739
testCompile('junit:junit')
3840
}

quick-start/src/main/java/com/marklogic/hub/Application.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
import org.springframework.boot.SpringApplication;
1919
import org.springframework.boot.autoconfigure.SpringBootApplication;
20-
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
2120
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
2221

22+
import springfox.documentation.swagger2.annotations.EnableSwagger2;
23+
24+
@EnableSwagger2
2325
@SpringBootApplication
2426
public class Application extends WebMvcConfigurerAdapter {
2527

quick-start/src/main/resources/static/app/directives/header.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
<div id="header" class="container-fluid">
22
<div class="row">
33
<div class="col-xs-6 col-sm-6 col-md-6 logo">
4-
<img id="img_logo" src="images/logo.svg">
4+
<div class="row">
5+
<div class="col-xs-11 col-sm-11 col-md-11"><img id="img_logo" src="images/logo.svg" align="left"></div>
6+
<div class="col-xs-1 col-sm-1 col-md-1"><i class="fa fa-question-circle" ng-click="showApiDoc()"></i></div>
7+
</div>
58
</div>
69
<div id="sitemenu" class="col-xs-6 col-sm-6 col-md-6 dropdown" ng-if="status != null">
710
<button type="submit" name="installUserModules" class="btn btn-primary" ng-if="status.installed" ng-click="installUserModules()" ng-disabled="action.type != null">Deploy to server</button>

quick-start/src/main/resources/static/app/directives/headerDirective.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@
4848
scope.action.type = null;
4949
});
5050
};
51+
52+
scope.showApiDoc = function() {
53+
DataHub.showApiDoc();
54+
};
55+
5156
}
5257
};
5358
}

quick-start/src/main/resources/static/app/quickStartApp.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
'ngRoute',
77
'dhib.quickstart.controller.login',
88
'dhib.quickstart.controller.top',
9+
'dhib.quickstart.controller.api.doc',
910
'dhib.quickstart.directives.header',
1011
'dhib.quickstart.directives.footer',
1112
'dhib.quickstart.directives.spinner',
@@ -14,8 +15,10 @@
1415
'ngAnimate',
1516
'ui.bootstrap',
1617
'ngMaterial',
17-
'treeControl'
18+
'treeControl',
1819
//'angucomplete-alt'
20+
'ngSanitize',
21+
'swaggerUi'
1922
];
2023
angular.module('quickStartApp', dependencies)
2124
.factory('$exceptionHandler', ExceptionHandler)
@@ -98,6 +101,10 @@
98101
.when('/dismiss', {
99102
//do nothing
100103
})
104+
.when('/api-doc', {
105+
templateUrl: 'doc/apiDoc.html',
106+
controller: 'apiDocController'
107+
})
101108
.otherwise({
102109
redirectTo: '/login'
103110
});

quick-start/src/main/resources/static/app/services/dataHubService.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
.service('DataHub', DataHubService)
77
.service('TaskManager', TaskManagerService);
88

9-
function DataHubService($http, $q, $route, $rootScope) {
9+
function DataHubService($http, $q, $route, $rootScope, $window) {
1010
var self = this;
1111

1212
angular.extend(self, {
@@ -29,7 +29,8 @@
2929
testFlow: testFlow,
3030
saveFlow: saveFlow,
3131
displayMessage: displayMessage,
32-
searchPath: searchPath
32+
searchPath: searchPath,
33+
showApiDoc: showApiDoc
3334
});
3435

3536
function login(loginForm) {
@@ -193,6 +194,11 @@
193194
$rootScope.notificationBar.message = message;
194195
$rootScope.notificationBar.show = true;
195196
}
197+
198+
function showApiDoc() {
199+
$window.open('#/api-doc', '_blank');
200+
}
201+
196202
}
197203

198204
function TaskManagerService($http, $q, $route) {

quick-start/src/main/resources/static/css/quick-start.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,13 @@ ul {
2323
div#header {
2424
background-color: #fff;
2525
padding: 15px 15px;
26+
color: #2a2d2b;
27+
}
28+
29+
button, div#header button {
2630
color: #ffffff;
2731
}
32+
2833
.btn, div#header .btn, div#content div#sidebar .btn, ul.dropdown-menu {
2934
font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
3035
font-size: 24px;
@@ -264,3 +269,15 @@ ul.nav.abn-tree i {
264269
.fade.ng-leave.ng-leave-active {
265270
opacity:0;
266271
}
272+
273+
/* This is specifically for Swagger UI */
274+
275+
.swagger-validator {
276+
display: none;
277+
}
278+
279+
div.api-doc > div {
280+
padding: 15px;
281+
}
282+
283+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<div id="header" class="container-fluid">
2+
<div class="row">
3+
<div class="col-xs-6 col-sm-6 col-md-6 logo">
4+
<div class="row">
5+
<div class="col-xs-11 col-sm-11 col-md-11"><img id="img_logo" src="images/logo.svg" align="left"></div>
6+
</div>
7+
</div>
8+
<div class="col-xs-6 col-sm-6 col-md-6"></div>
9+
</div>
10+
<notification></notification>
11+
</div>
12+
<div class="divider"></div>
13+
<spinner></spinner>
14+
<div id="content" class="container-fluid api-doc">
15+
<div class="row">
16+
<div class="col-xs-12">
17+
<div swagger-ui url="swaggerUrl" loading="loading" parser="json" api-explorer="true" error-handler="myErrorHandler"></div>
18+
</div>
19+
</div>
20+
</div>
21+
<footer></footer>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
(function () {
2+
3+
'use strict';
4+
5+
var dependencies = [];
6+
7+
angular.module('dhib.quickstart.controller.api.doc', dependencies)
8+
.controller('apiDocController', ApiDocController);
9+
10+
function ApiDocController($scope) {
11+
12+
$scope.loading = false;
13+
$scope.url = $scope.swaggerUrl = 'v2/api-docs';
14+
$scope.myErrorHandler = function (data, status) {
15+
alert('Failed to load swagger: ' + status + ' ' + data);
16+
};
17+
$scope.infos = false;
18+
}
19+
20+
21+
})();

quick-start/src/main/resources/static/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<script src="lib/angular.js/js/ui-bootstrap-tpls-1.2.4.js"></script>
1818
<script src="lib/angular.js/js/angular-aria.min.js"></script>
1919
<script src="lib/angular.js/js/angular-material.min.js"></script>
20+
<script src="lib/angular.js/js/angular-sanitize.min.js"></script>
2021

2122
<!-- tree control -->
2223
<script type="text/javascript" src="lib/angular-tree-control/angular-tree-control.js"></script>
@@ -31,6 +32,9 @@
3132
<!-- Bootstrap -->
3233
<script src="lib/bootstrap-3.3.6-dist/js/bootstrap.min.js"></script>
3334
<script src="lib/abn_tree/js/abn_tree_directive.js"></script>
35+
36+
<!-- angular-swagger-ui JS -->
37+
<script src="webjars/angular-swagger-ui/0.3.1/dist/scripts/swagger-ui.min.js"></script>
3438

3539
<!-- App-Specific JS -->
3640
<script src="app/quickStartApp.js"></script>
@@ -44,12 +48,16 @@
4448

4549
<script src="login/loginController.js"></script>
4650
<script src="top/topController.js"></script>
51+
<script src="doc/apiDocController.js"></script>
4752

4853
<!-- Bootstrap CSS -->
4954
<link href="lib/bootstrap-3.3.6-dist/css/bootstrap.min.css" rel="stylesheet"></link>
5055
<link href="lib/font-awesome/css/font-awesome.min.css" rel="stylesheet"></link>
5156
<link href="lib/abn_tree/css/abn_tree.css" rel="stylesheet"></link>
5257
<link href="lib/angular.js/css/angular-material.min.css" rel="stylesheet"></link>
58+
59+
<!-- angular-swagger-ui CSS -->
60+
<link href="webjars/angular-swagger-ui/0.3.1/dist/css/swagger-ui.min.css" rel="stylesheet" >
5361

5462
<!-- App-Specific CSS -->
5563
<link href="css/quick-start.css" rel="stylesheet"></link>

0 commit comments

Comments
 (0)