private Response update(final MutableApplicationLink link, final URI rpcUrl, final URI displayUrl) { link.update(ApplicationLinkDetails .builder(link) .rpcUrl(rpcUrl) .displayUrl(displayUrl) .build()); LOG.info("Changed RPC URL from {} to {} and display URL from {} to {} for ApplicationLink {} .", link.getRpcUrl(), rpcUrl, link.getDisplayUrl(), displayUrl, link.getId()); return noContent(); // returning the updated applink might be more restful } }
public void handle(final com.atlassian.sal.api.net.Response response) throws ResponseException { // 201 means we created a new application link. // 200 means there already is an application link and we just updated this one. if (!response.isSuccessful()) { try { final ErrorListEntity listEntity = response.getEntity(ErrorListEntity.class); warnings.addAll(listEntity.getErrors()); } catch (RuntimeException re) { LOG.warn("Could not parse the peer's response to " + "upgrade application link \"" + oldApplicationLink.getName() + "\" to a bi-directional link. Status code: " + response.getStatusCode() + "."); throw re; } } } });
@Override public ApplicationLinkState callWithContext() throws Exception { if (manifestRetriever.getApplicationStatus(applicationLink.getRpcUrl(), applicationLink.getType()) == ApplicationStatus.UNAVAILABLE) { return ApplicationLinkState.OFFLINE; } else { try { final Manifest manifest = manifestRetriever.getManifest(applicationLink.getRpcUrl(), applicationLink.getType()); if (!applicationLink.getId().equals(manifest.getId())) { if (manifest.getAppLinksVersion() != null && manifest.getAppLinksVersion().getMajor() >= 3) { return ApplicationLinkState.UPGRADED_TO_UAL; } else { return ApplicationLinkState.UPGRADED; } } } catch (ManifestNotFoundException e) { // unknown application type LOG.error("The {} application type failed to produce a " + "Manifest for Application Link {}, so we cannot " + "determine the link status.", TypeId.getTypeId( applicationLink.getType()).toString(), applicationLink.getId().toString()); } return ApplicationLinkState.OK; } } });
if (existing.isSystem() && !userManager.isSystemAdmin(userManager.getRemoteUsername())) { return RestUtil.forbidden(i18nResolver.getText("applinks.error.only.sysadmin.operation")); if (!existing.getRpcUrl().equals(linkDetails.getRpcUrl())) { return RestUtil.badRequest(i18nResolver.getText("applinks.error.cannot.update.rpcurl")); existing.update(linkDetails); return RestUtil.updated(createSelfLinkFor(applicationLink.getId()));
@PUT @Path("{applinkId}") public Response update(@PathParam("applinkId") String applinkId, ApplinkEntity entity) { try { MutableApplicationLink link = linkService.getApplicationLink(new ApplicationId(applinkId)); ApplicationLinkDetails.Builder builder = ApplicationLinkDetails.builder(link); if (entity.rpcUrl != null) { builder.rpcUrl(URI.create(entity.rpcUrl)); } if (entity.displayUrl != null) { builder.displayUrl(URI.create(entity.displayUrl)); } if (entity.name != null) { builder.name(entity.name); } // add more fields as necessary link.update(builder.build()); return Response.ok(new ApplinkEntity(link)).build(); } catch (TypeNotInstalledException e) { return Response.serverError() .entity("Failed to set applink system flag for '" + applinkId + "': " + e) .build(); } }
} else { String error; if (manifestRetriever.getApplicationStatus(applicationLink.getRpcUrl(), applicationLink.getType()) == ApplicationStatus.UNAVAILABLE) { error = i18nResolver.getText("applinks.legacy.upgrade.error.offline"); try { final Manifest manifest = manifestRetriever .getManifest(applicationLink.getRpcUrl(), applicationLink.getType()); if (!applicationLink.getId().equals(manifest.getId())) { if (manifest.getAppLinksVersion() != null && manifest.getAppLinksVersion().getMajor() >= 3) { error = i18nResolver.getText("applinks.legacy.upgrade.error.ual"); applicationLink.getName(), applicationId, manifest.getId()); return Response.ok(new UpgradeApplicationLinkResponseEntity(toApplicationLinkEntity( applicationLinkService.getApplicationLink(manifest.getId())), Collections.<String>emptyList())).build(); error = i18nResolver.getText("applinks.legacy.upgrade.error.manifest", TypeId.getTypeId( applicationLink.getType()).toString(), applicationLink.getId().toString());
try { if (!applicationLinkService.isAdminUserInRemoteApplication( oldApplicationLink.getRpcUrl(), upgradeApplicationLinkRequestEntity.getUsername(), upgradeApplicationLinkRequestEntity.getPassword())) { applicationLinkService.changeApplicationId(oldApplicationLink.getId(), manifest.getId()); final ApplicationLink newApplicationLink = applicationLinkService.getApplicationLink(manifest.getId()); newApplicationLink, oldApplicationLink.getId())); newApplicationLink.getName(), oldApplicationLink.getId(), newApplicationLink.getId());
@DELETE @WebSudoNotRequired @Path("{id}") public Response deleteApplicationLink(@PathParam("id") final String idString, @QueryParam("reciprocate") final Boolean reciprocate) throws TypeNotInstalledException { final ApplicationId id = new ApplicationId(idString); final MutableApplicationLink link = applicationLinkService.getApplicationLink(id); if (link == null) { return notFound(i18nResolver.getText("applinks.notfound", id.get())); } // only a sysadmin can delete a system link. if (link.isSystem() && !userManager.isSystemAdmin(userManager.getRemoteUsername())) { return forbidden(i18nResolver.getText("applinks.error.only.sysadmin.operation")); } if (reciprocate != null && reciprocate) { try { applicationLinkService.deleteReciprocatedApplicationLink(link); } catch (final CredentialsRequiredException e) { return credentialsRequired(i18nResolver); } catch (final ReciprocalActionException e) { return serverError(i18nResolver.getText("applinks.remote.delete.failed", e.getMessage())); } } else { applicationLinkService.deleteApplicationLink(link); } return ok(i18nResolver.getText("applinks.deleted", id.get())); }
return notFound(i18nResolver.getText("applinks.notfound", applicationId)); } else { if (manifestRetriever.getApplicationStatus(url, link.getType()) == ApplicationStatus.UNAVAILABLE) { if (nowarning) { return update(link, url, url); try { final Manifest manifest = manifestDownloader.download(url); if (typeAccessor.loadApplicationType(manifest.getTypeId()).equals(link.getType())) { displayUrl = manifest.getUrl(); } else { .entity(i18nResolver.getText("applinks.error.relocate.type", urlString, i18nResolver.getText(typeAccessor.loadApplicationType(manifest.getTypeId()).getI18nKey()), i18nResolver.getText(link.getType().getI18nKey()))) .build();
} else { if (existing.isSystem() && !userManager.isSystemAdmin(userManager.getRemoteUsername())) { return forbidden(i18nResolver.getText("applinks.error.only.sysadmin.operation")); if (!existing.getRpcUrl().equals(linkDetails.getRpcUrl())) { return badRequest(i18nResolver.getText("applinks.error.cannot.update.rpcurl")); existing.update(linkDetails); return updated(createSelfLinkFor(applicationLink.getId()));
@PUT @Path("{applinkid}") public Response update(@PathParam("applinkid") String applinkId, RestApplicationLink restApplink) throws ServiceException { permissionValidationService.validateAdmin(); ApplicationId id = restApplicationIdParser.parse(applinkId); ApplicationLinkDetails details = restApplink.toDetails(); applinkValidationService.validateUpdate(id, details); if (details.isPrimary()) { applinkHelper.makePrimary(id); } MutableApplicationLink applink = applinkHelper.getMutableApplicationLink(id); applink.update(details); return Response.ok(new RestApplicationLink(applink)).build(); }
if (link.isSystem() && !userManager.isSystemAdmin(userManager.getRemoteUsername()))
} else { String error; if (manifestRetriever.getApplicationStatus(applicationLink.getRpcUrl(), applicationLink.getType()) == ApplicationStatus.UNAVAILABLE) { error = i18nResolver.getText("applinks.legacy.upgrade.error.offline"); try { final Manifest manifest = manifestRetriever .getManifest(applicationLink.getRpcUrl(), applicationLink.getType()); if (!applicationLink.getId().equals(manifest.getId())) { if (manifest.getAppLinksVersion() != null && manifest.getAppLinksVersion().getMajor() >= 3) { return performUalUpgrade(applicationLink, upgradeApplicationLinkRequestEntity, manifest); LOG.info("The application id '" + applicationLink.getId() + "' of the application link stored and the remote application are equal, no upgrade required."); return Response.ok().build(); error = i18nResolver.getText("applinks.legacy.upgrade.error.manifest", TypeId.getTypeId( applicationLink.getType()).toString(), applicationLink.getId().toString());
.displayUrl(URI.create(entity.urlOverride)) .build(); ((MutableApplicationLink) link).update(newDetails);