Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re-register/publish fixes #329

Merged
merged 2 commits into from Jan 20, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -32,7 +32,7 @@ public class ApimanStrLookup extends StrLookup {
public String lookup(String key) {
String replacement = System.getProperty(key);
if (replacement == null) {
System.getenv(key);
replacement = System.getenv(key);
}
return replacement;
}
Expand Down
Expand Up @@ -77,14 +77,19 @@
#kc-login {
float: right;
margin-left: 10px;
}
#kc-login:hover, #kc-login:focus, #kc-login:active {
}

#kc-form-buttons.submit input[type=submit] {
background-color: #0085CF;
background-image: linear-gradient(to bottom, #00A8E1 0%, #0085CF 100%);
background-repeat: repeat-x;
color: #FFF;
border-radius: 1px;
border: 1px solid #006E9C;
}
#kc-login:hover, #kc-login:focus, #kc-login:active {
#kc-form-buttons.submit input[type=submit]:focus, #kc-form-buttons.submit input[type=submit]:active {
background-color: #0085CF;
background-image: none;
border-color: #006E9C;
Expand Down
Expand Up @@ -61,6 +61,7 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -339,6 +340,8 @@ private void registerClient(ActionBean action) throws ActionException {
throw ExceptionFactory.actionException(Messages.i18n.format("ClientNotFound"), e); //$NON-NLS-1$
}

boolean isReregister = false;

// Validate that it's ok to perform this action
if (versionBean.getStatus() == ClientStatus.Registered) {
Date modOn = versionBean.getModifiedOn();
Expand All @@ -347,6 +350,7 @@ private void registerClient(ActionBean action) throws ActionException {
if (c <= 0) {
throw ExceptionFactory.actionException(Messages.i18n.format("ClientReRegisterNotRequired")); //$NON-NLS-1$
}
isReregister = true;
}

Client client = new Client();
Expand Down Expand Up @@ -386,6 +390,25 @@ private void registerClient(ActionBean action) throws ActionException {
}
}
}
if (isReregister) {
// Once we figure out which gateways to register with, make sure we also "unregister"
// the client app from all other gateways. This is necessary because we may have broken
// contracts we previously had on APIs that are published to other gateways. And thus
// it's possible we need to remove a contract from a Gateway that is not otherwise/currently
// referenced.
//
// This is a fix for: https://issues.jboss.org/browse/APIMAN-895

Iterator<GatewayBean> gateways = storage.getAllGateways();
while (gateways.hasNext()) {
GatewayBean gbean = gateways.next();
if (!links.containsKey(gbean.getId())) {
IGatewayLink gatewayLink = createGatewayLink(gbean.getId());
gatewayLink.unregisterClient(client);
gatewayLink.close();
}
}
}
for (IGatewayLink gatewayLink : links.values()) {
gatewayLink.registerClient(client);
gatewayLink.close();
Expand Down
Expand Up @@ -42,7 +42,7 @@
<div class="entity-info-with-icon">
<span apiman-i18n-key="status-label">Status:</span>
<span apiman-entity-status />
<span title="The API has been modified since it was last published!" apiman-i18n-key="api-modified" ng-show="version.status == 'Published' && version.modifiedOn > version.publishedOn" class="apiman-label apiman-label-default">Modified</span>
<span title="The API has been modified since it was last published!" apiman-i18n-key="api-modified" ng-show="version.status == 'Published' && isModified()" class="apiman-label apiman-label-default">Modified</span>
</div>
</div>
<div class="col-md-5" apiman-permission="apiAdmin">
Expand All @@ -58,7 +58,7 @@
<div class="apiman-divider-40"></div>
<div class="">
<button ng-disabled="getEntityStatus() == 'Created'" apiman-action-btn="" apiman-status="Created,Ready" class="btn btn-primary" data-field="publishButton" apiman-i18n-key="publish" placeholder="Publishing..." data-icon="fa-cog" ng-click="publishApi()">Publish</button>
<button ng-show="version.publicAPI" ng-disabled="version.publishedOn > version.modifiedOn" apiman-action-btn="" apiman-status="Published" class="btn btn-primary" data-field="republishButton" apiman-i18n-key="republish" placeholder="Publishing..." data-icon="fa-cog" ng-click="publishApi()">Re-Publish</button>
<button ng-show="version.publicAPI" ng-disabled="!isModified()" apiman-action-btn="" apiman-status="Published" class="btn btn-primary" data-field="republishButton" apiman-i18n-key="republish" placeholder="Publishing..." data-icon="fa-cog" ng-click="publishApi()">Re-Publish</button>
<button apiman-action-btn="" apiman-status="Published" class="btn btn-warning" data-field="retireButton" apiman-i18n-key="retire" placeholder="Retiring..." data-icon="fa-cog" ng-click="retireApi()">Retire</button>
</div>

Expand Down
Expand Up @@ -42,7 +42,7 @@
<div class="entity-info-with-icon">
<span apiman-i18n-key="status-label">Status:</span>
<span apiman-entity-status />
<span title="Client App has been modified since it was last registered!" apiman-i18n-key="client-modified" ng-show="version.status == 'Registered' && version.modifiedOn > version.publishedOn" class="apiman-label apiman-label-default">Modified</span>
<span title="Client App has been modified since it was last registered!" apiman-i18n-key="client-modified" ng-show="version.status == 'Registered' && isModified()" class="apiman-label apiman-label-default">Modified</span>
</div>
</div>
<div class="col-md-5" apiman-permission="clientAdmin">
Expand All @@ -55,7 +55,7 @@
<div class="apiman-divider-40"></div>
<div class="">
<button ng-disabled="getEntityStatus() == 'Created'" apiman-action-btn="" apiman-status="Created,Ready" class="btn btn-primary" data-field="registerButton" apiman-i18n-key="register" placeholder="Registering..." data-icon="fa-cog" ng-click="registerClient()">Register</button>
<button ng-disabled="getEntityStatus() != 'Retired' && version.publishedOn > version.modifiedOn" apiman-action-btn="" apiman-status="Registered,Retired" class="btn btn-primary" data-field="reregisterButton" apiman-i18n-key="reregister" placeholder="Re-Registering..." data-icon="fa-cog" ng-click="registerClient()">Re-Register</button>
<button ng-disabled="isReregisterable() == false" apiman-action-btn="" apiman-status="Registered,Retired" class="btn btn-primary" data-field="reregisterButton" apiman-i18n-key="reregister" placeholder="Re-Registering..." data-icon="fa-cog" ng-click="registerClient()">Re-Register</button>
<button apiman-action-btn="" apiman-status="Registered" class="btn btn-warning" data-field="unregisterButton" apiman-i18n-key="unregister" placeholder="Unregistering..." data-icon="fa-cog" ng-click="unregisterClient()">Unregister</button>
</div>
</div>
Expand Down
12 changes: 10 additions & 2 deletions manager/ui/hawtio/plugins/api-manager/ts/api/api.ts
Expand Up @@ -126,6 +126,15 @@ module Apiman {
PageLifecycle.redirectTo('/orgs/{0}/apis/{1}/{2}', params.org, params.api, api.version);
};

$scope.isModified = function() {
if (!$scope.version.publishedOn) {
return false;
}
var pub = new Date($scope.version.publishedOn);
var mod = new Date($scope.version.modifiedOn);
return mod > pub;
};

$scope.publishApi = function() {
$scope.publishButton.state = 'in-progress';
$scope.republishButton.state = 'in-progress';
Expand All @@ -138,11 +147,10 @@ module Apiman {
};

ActionSvcs.save(publishAction, function(reply) {
$scope.version.status = 'Published';
$scope.version.publishedOn = Date.now();
$scope.publishButton.state = 'complete';
$scope.republishButton.state = 'complete';
$scope.setEntityStatus($scope.version.status);
$scope.setEntityStatus('Published');
}, PageLifecycle.handleError);
};

Expand Down
26 changes: 24 additions & 2 deletions manager/ui/hawtio/plugins/api-manager/ts/client/client.ts
Expand Up @@ -62,6 +62,28 @@ module Apiman {
$scope.setVersion = function(client) {
PageLifecycle.redirectTo('/orgs/{0}/clients/{1}/{2}', params.org, params.client, client.version);
};

$scope.isModified = function() {
if (!$scope.version.publishedOn) {
return false;
}
var pub = new Date($scope.version.publishedOn);
var mod = new Date($scope.version.modifiedOn);
return mod > pub;
};

$scope.isReregisterable = function() {
var rval = false;
if ($scope.getEntityStatus() == 'Retired') {
Logger.info('Entity is retired, so it **CAN** be re-registered.');
rval = true;
}
if ($scope.getEntityStatus() == 'Registered') {
var mod = $scope.isModified();
rval = mod;
}
return rval;
};

$scope.registerClient = function() {
$scope.registerButton.state = 'in-progress';
Expand All @@ -73,11 +95,11 @@ module Apiman {
entityVersion: params.version
};
ActionSvcs.save(registerAction, function(reply) {
$scope.version.status = 'Registered';
$scope.version.publishedOn = Date.now();
$scope.registerButton.state = 'complete';
$scope.reregisterButton.state = 'complete';
$scope.setEntityStatus($scope.version.status);
$scope.setEntityStatus('Registered');
Logger.info('---');
}, PageLifecycle.handleError);
};

Expand Down
21 changes: 16 additions & 5 deletions manager/ui/hawtio/plugins/api-manager/ts/directives.ts
Expand Up @@ -10,7 +10,11 @@ module Apiman {
var actionVar = attrs.field;
var actionText = attrs.placeholder;
var icon = attrs.icon;
Logger.debug("Action button initializing state variable [{0}].", actionVar);
var disabledExpr = attrs.ngDisabled;
Logger.debug('===================================');
Logger.debug("======> Action button initializing state variable [{0}].", actionVar);
Logger.debug('======> Attributes: {0}', attrs);
Logger.debug('======> DisabledExpr: ' + disabledExpr);
scope[actionVar] = {
state: 'ready',
html: $(element).html(),
Expand All @@ -22,7 +26,14 @@ module Apiman {
$(element).prop('disabled', true);
$(element).html(newVal.actionHtml);
} else {
$(element).prop('disabled', false);
var isDisabled = false;
if (disabledExpr) {
Logger.debug('======> Evaluating expr: ' + disabledExpr);
var exprVal = scope.$eval(disabledExpr);
Logger.debug('======> expr value: ' + exprVal);
isDisabled = new Boolean(exprVal).valueOf();
}
$(element).prop('disabled', isDisabled);
$(element).html(newVal.html);
}
});
Expand All @@ -43,7 +54,7 @@ module Apiman {

// Called if copy-to-clipboard functionality was successful
scope.copySuccess = function () {
console.log('Copied!');
//console.log('Copied!');
};

// Called if copy-to-clipboard functionality was unsuccessful
Expand Down Expand Up @@ -146,8 +157,8 @@ module Apiman {
if (entityStatus) {
var validStatuses = attrs.apimanStatus.split(',');
var statusIsValid = false;
Logger.debug('Checking status {0} against valid statuses {1}: {2}', entityStatus, '' + validStatuses,
element[0].outerHTML);
// Logger.debug('Checking status {0} against valid statuses {1}: {2}', entityStatus, '' + validStatuses,
// element[0].outerHTML);
for (var i = 0; i < validStatuses.length; i++) {
if (validStatuses[i] == entityStatus) {
statusIsValid = true;
Expand Down