/** * Write <code>subscription;project;projetKey;projectName;node</code>. * * @param writer * Target output. * @param subscription * Related subscription. */ private void writeCommon(final Writer writer, final Subscription subscription) throws IOException { final Project project = subscription.getProject(); writer.write('\n'); writer.write(String.valueOf(subscription.getId())); writer.write(';'); writer.write(String.valueOf(project.getId())); writer.write(';'); writer.write(project.getPkey()); writer.write(';'); writer.write(project.getName().replaceAll("\"", "'")); writer.write(';'); writer.write(subscription.getNode().getId()); }
@Override public Subscription checkVisible(final Integer id) { final Subscription entity = repository.findOneExpected(id); if (projectRepository.findOneVisible(entity.getProject().getId(), securityHelper.getLogin()) == null) { // Associated project is not visible, reject the subscription access throw new EntityNotFoundException(String.valueOf(id)); } return entity; }
/** * Delete entity and cascaded associations : parameters, events then subscription. * * @param id * the entity identifier. * @param deleteRemoteData * When <code>true</code>, remote data will be also destroyed. * @throws Exception * When the delete fails. Managed at JAX-RS level. */ @Path("{id:\\d+}/{deleteRemoteData}") @DELETE public void delete(@PathParam("id") final int id, @PathParam("deleteRemoteData") final boolean deleteRemoteData) throws Exception { final Subscription entity = checkVisible(id); checkManagedProject(entity.getProject().getId()); // Delete the events eventRepository.deleteAllBy("subscription", entity); // Delegate the deletion deleteWithTasks(entity.getNode().getId(), id, deleteRemoteData); parameterValueResource.deleteBySubscription(id); repository.delete(entity); }
@Override public void create(final int subscription) { final Map<String, String> parameters = subscriptionResource.getParameters(subscription); final String group = parameters.get(IdentityResource.PARAMETER_GROUP); final String parentGroup = parameters.get(IdentityResource.PARAMETER_PARENT_GROUP); final String ou = parameters.get(IdentityResource.PARAMETER_OU); final Project project = subscriptionRepository.findOne(subscription).getProject(); final String pkey = project.getPkey(); // Check the relationship between group, OU and project validateGroup(group, ou, pkey); // Check the relationship between group, and parent final String parentDn = validateAndCreateParent(group, parentGroup, ou, pkey); // Create the group inside the parent (OU or parent CN) final String groupDn = "cn=" + group + "," + parentDn; log.info("New Group CN would be created {} project {} and subscription {}", group, pkey); final GroupLdapRepository repository = getGroup(); final GroupOrg groupLdap = repository.create(groupDn, group); // Complete as needed the relationship between parent and this new group if (StringUtils.isNotBlank(parentGroup)) { // This group will be added as "uniqueMember" of its parent repository.addGroup(groupLdap, parentGroup); } // Associate the project to this group in the cache final CacheProjectGroup projectGroup = new CacheProjectGroup(); projectGroup.setProject(project); projectGroup.setGroup(repository.getCacheRepository().findOneExpected(groupLdap.getId())); cacheProjectGroupRepository.saveAndFlush(projectGroup); }
/** * Return tools specific configuration. Only non secured parameters are returned. * * @param id * The subscription identifier. * @return tools specific configuration. * @throws Exception * When the configuration gathering fails. Managed at JAX-RS level. */ @GET @Path("{id:\\d+}/configuration") @org.springframework.transaction.annotation.Transactional(readOnly = true) public ConfigurationVo getConfiguration(@PathParam("id") final int id) throws Exception { // Copy subscription details final Subscription entity = checkVisible(id); final ConfigurationVo vo = new ConfigurationVo(); vo.setNode(NodeResource.toVo(entity.getNode())); vo.setParameters(getNonSecuredParameters(id)); vo.setSubscription(id); vo.setProject(DescribedBean.clone(entity.getProject())); // Get specific configuration final ConfigurablePlugin servicePlugin = locator.getResource(vo.getNode().getId(), ConfigurablePlugin.class); if (servicePlugin != null) { // Specific configuration is available vo.setConfiguration(servicePlugin.getConfiguration(id)); } return vo; }
/** * Check the visibility of a configured entity. * * @param configured * The requested configured entity. * @param <K> * The {@link Configurable} identifier type. * @param <T> * The {@link Configurable} type. * @return The formal entity parameter. */ protected <K extends Serializable, T extends Configurable<C, K>> T checkConfiguredVisibility(final T configured) { final Subscription entity = subscriptionRepository .findOneExpected(configured.getConfiguration().getSubscription().getId()); if (projectRepository.findOneVisible(entity.getProject().getId(), securityHelper.getLogin()) == null) { // Associated project is not visible, reject the configuration access throw new EntityNotFoundException(configured.getId().toString()); } return configured; }
/** * Refresh given subscriptions and return their status. */ private SubscriptionStatusWithData refreshSubscription(final Subscription subscription) { final Map<String, String> parameters = getParameters(subscription.getId()); final SubscriptionStatusWithData statusWithData = nodeResource.checkSubscriptionStatus(subscription, parameters); statusWithData.setId(subscription.getId()); statusWithData.setProject(subscription.getProject().getId()); statusWithData.setParameters(parameterValueResource.getNonSecuredSubscriptionParameters(subscription.getId())); // Update the last event with fresh data eventResource.registerEvent(subscription, EventType.STATUS, statusWithData.getStatus().name()); // Return the fresh statuses return statusWithData; }