Skip to content
This repository has been archived by the owner on Oct 20, 2021. It is now read-only.

Commit

Permalink
feat(api): export API definition for a specific Gravitee.io APIM version
Browse files Browse the repository at this point in the history
  • Loading branch information
tcompiegne committed Sep 20, 2018
1 parent c6df44f commit af079c2
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 7 deletions.
8 changes: 6 additions & 2 deletions src/management/api/portal/general/apiPortal.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class ApiPortalController {
private qualityMetrics: QualityMetrics;
private qualityMetricsDescription: Map<string, string>;
private isQualityEnabled: boolean;
private isExportApiAsEnabled: boolean;

constructor(
private ApiService,
Expand Down Expand Up @@ -139,6 +140,8 @@ class ApiPortalController {
this.qualityMetricsDescription.set("api.quality.metrics.logo.weight", "Put your own logo");
this.qualityMetricsDescription.set("api.quality.metrics.views.weight", "Link your API to views");
this.qualityMetricsDescription.set("api.quality.metrics.labels.weight", "Add labels to your API");

this.isExportApiAsEnabled = Constants.portal.exportApiAs && Constants.portal.exportApiAs.enabled;
}

$onInit() {
Expand Down Expand Up @@ -304,14 +307,15 @@ class ApiPortalController {
});
}

showExportDialog() {
showExportDialog(showExportVersion) {
this.$mdDialog.show({
controller: 'DialogApiExportController',
controllerAs: 'dialogApiExportCtrl',
template: require('./dialog/apiExport.dialog.html'),
clickOutsideToClose: true,
locals: {
apiId: this.$scope.$parent.apiCtrl.api.id
apiId: this.$scope.$parent.apiCtrl.api.id,
showExportVersion: showExportVersion
}
});
}
Expand Down
8 changes: 7 additions & 1 deletion src/management/api/portal/general/apiPortal.html
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,16 @@ <h5>Quality Metrics:</h5>
Reset
</md-button>

<md-button aria-label="Export definition" ng-click="portalCtrl.showExportDialog()">
<md-button aria-label="Export definition" ng-click="portalCtrl.showExportDialog(false)">
<ng-md-icon icon="file_upload"></ng-md-icon>
Export
</md-button>

<md-button ng-if="portalCtrl.isExportApiAsEnabled" aria-label="Export definition as" ng-click="portalCtrl.showExportDialog(true)">
<ng-md-icon icon="keyboard_capslock"></ng-md-icon>
Export As
</md-button>

<md-button permission permission-only="'api-definition-u'" aria-label="Import definition" ng-click="portalCtrl.showImportDialog()">
<ng-md-icon icon="file_download"></ng-md-icon>
Import
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@
<md-dialog>
<form name="formApiDefinition" ng-submit="export()" novalidate>
<md-dialog-content layout-padding>
<div ng-if="showExportVersion">
<h4>Export API definition as :</h4>
<div layout="column" layout-align="space-between center">
<md-select ng-model="data.exportVersion" placeholder="Export as">
<md-option value="1.15" selected>1.15.x to 1.16.x version</md-option>
</md-select>
</div>
</div>
<h4>What do you want to export ?</h4>
<div layout="column">
<md-checkbox ng-repeat="fl in filteredFields" aria-label="fl.id" ng-model="fl.checked">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
import * as _ from 'lodash';

function DialogApiExportController($scope, $mdDialog, ApiService, apiId, base64) {
function DialogApiExportController($scope, $mdDialog, ApiService, apiId, showExportVersion, base64) {
'ngInject';

$scope.filteredFields = [
Expand All @@ -25,13 +25,18 @@ function DialogApiExportController($scope, $mdDialog, ApiService, apiId, base64)
{ id: "plans", description: "Plans", checked: true }
];

$scope.showExportVersion = showExportVersion;
$scope.data = {
exportVersion: null
};

$scope.hide = function() {
$mdDialog.hide();
};

$scope.export = function() {
var excludes = _.map(_.filter($scope.filteredFields, (fl: any) => { return !fl.checked; }), "id");
ApiService.export(apiId, excludes)
ApiService.export(apiId, excludes, $scope.data.exportVersion)
.then( (response) => {
let link = document.createElement('a');
document.body.appendChild(link);
Expand Down
5 changes: 5 additions & 0 deletions src/management/configuration/portal/portal.html
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ <h6>Security plans type available</h6>
Allow User Creation
</md-checkbox>
</md-input-container>
<md-input-container class="md-block" flex-gt-xs>
<md-checkbox ng-model="$ctrl.Constants.portal.exportApiAs.enabled" aria-label="Export API as">
Activate "Export API as"
</md-checkbox>
</md-input-container>
<md-input-container class="md-block" flex-gt-xs>
<md-checkbox ng-model="$ctrl.Constants.portal.analytics.enabled" aria-label="Add Google Analytics">
Add Google Analytics
Expand Down
4 changes: 2 additions & 2 deletions src/services/api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ class ApiService {
return this.$http.post(this.apisURL + 'import/swagger', swaggerDescriptor);
}

export(apiId, exclude) {
return this.$http.get(this.apisURL + apiId + '/export?exclude=' + exclude.join(","));
export(apiId, exclude, exportVersion) {
return this.$http.get(this.apisURL + apiId + '/export?exclude=' + exclude.join(",") + (exportVersion ? '&version=' + exportVersion : ''));
}

verify(criteria) {
Expand Down

0 comments on commit af079c2

Please sign in to comment.