use of org.obiba.mica.network.domain.NetworkState in project mica2 by obiba.
the class NetworkService method removeRoles.
private void removeRoles(@NotNull Network network, Iterable<String> roles) {
saveInternal(network, String.format("Removed roles: %s", Joiner.on(", ").join(roles)), false);
NetworkState state = findStateById(network.getId());
if (state.isPublished()) {
processNetworkForPublishedNumberOfStudies(network);
publishState(network.getId());
eventBus.post(new NetworkPublishedEvent(network, getCurrentUsername(), PublishCascadingScope.NONE));
}
}
use of org.obiba.mica.network.domain.NetworkState in project mica2 by obiba.
the class NetworkService method saveInternal.
@SuppressWarnings("OverlyLongMethod")
private void saveInternal(@NotNull Network network, String comment, boolean cascade) {
Network saved = network;
if (network.isNew()) {
generateId(saved);
} else {
saved = networkRepository.findOne(network.getId());
if (saved != null) {
BeanUtils.copyProperties(network, saved, "id", "version", "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate");
} else {
saved = network;
}
}
if (saved.getLogo() != null && saved.getLogo().isJustUploaded()) {
fileStoreService.save(saved.getLogo().getId());
saved.getLogo().setJustUploaded(false);
}
ImmutableSet<String> invalidRoles = ImmutableSet.copyOf(Sets.difference(saved.membershipRoles(), Sets.newHashSet(micaConfigService.getConfig().getRoles())));
for (String r : invalidRoles) {
saved.removeRole(r);
}
NetworkState networkState = findEntityState(network, () -> {
NetworkState defaultState = new NetworkState();
defaultState.setName(network.getName());
return defaultState;
});
if (!network.isNew())
ensureGitRepository(networkState);
networkState.incrementRevisionsAhead();
networkStateRepository.save(networkState);
saved.setLastModifiedDate(DateTime.now());
if (cascade)
networkRepository.saveWithReferences(saved);
else
networkRepository.save(saved);
eventBus.post(new NetworkUpdatedEvent(saved));
gitService.save(saved, comment);
}
use of org.obiba.mica.network.domain.NetworkState in project mica2 by obiba.
the class NetworkService method index.
/**
* Index a specific {@link Network} without updating it.
*
* @param id
* @throws NoSuchNetworkException
*/
public void index(@NotNull String id) throws NoSuchNetworkException {
NetworkState networkState = getEntityState(id);
Network network = findById(id);
eventBus.post(new NetworkUpdatedEvent(network));
processNetworkForPublishedNumberOfStudies(network);
if (networkState.isPublished())
eventBus.post(new NetworkPublishedEvent(network, getCurrentUsername()));
else
eventBus.post(new NetworkUnpublishedEvent(network));
}
use of org.obiba.mica.network.domain.NetworkState in project mica2 by obiba.
the class NetworkDtos method asDtoBuilder.
@NotNull
Mica.NetworkDto.Builder asDtoBuilder(@NotNull Network network, boolean asDraft) {
Mica.NetworkDto.Builder builder = Mica.NetworkDto.newBuilder();
if (network.hasModel())
builder.setContent(JSONUtils.toJSON(network.getModel()));
//
builder.setId(network.getId()).addAllName(//
localizedStringDtos.asDto(network.getName())).addAllDescription(//
localizedStringDtos.asDto(network.getDescription())).addAllAcronym(localizedStringDtos.asDto(network.getAcronym()));
Mica.PermissionsDto permissionsDto = permissionsDtos.asDto(network);
NetworkState networkState = networkService.getEntityState(network.getId());
builder.setPublished(networkState.isPublished());
if (asDraft) {
//
builder.setTimestamps(TimestampsDtos.asDto(network)).setPublished(//
networkState.isPublished()).setExtension(Mica.EntityStateDto.state, entityStateDtos.asDto(networkState).setPermissions(permissionsDto).build());
}
builder.setPermissions(permissionsDto);
List<String> roles = micaConfigService.getConfig().getRoles();
if (network.getMemberships() != null) {
List<Mica.MembershipsDto> memberships = network.getMemberships().entrySet().stream().filter(e -> roles.contains(e.getKey())).map(e -> Mica.MembershipsDto.newBuilder().setRole(e.getKey()).addAllMembers(e.getValue().stream().map(m -> personDtos.asDto(m.getPerson(), asDraft)).collect(toList())).build()).collect(toList());
builder.addAllMemberships(memberships);
}
List<BaseStudy> publishedStudies = publishedStudyService.findByIds(network.getStudyIds());
Set<String> publishedStudyIds = publishedStudies.stream().map(AbstractGitPersistable::getId).collect(Collectors.toSet());
Sets.SetView<String> unpublishedStudyIds = Sets.difference(ImmutableSet.copyOf(network.getStudyIds().stream().filter(sId -> asDraft && subjectAclService.isPermitted("/draft/individual-study", "VIEW", sId) || subjectAclService.isAccessible("/individual-study", sId)).collect(toList())), publishedStudyIds);
if (!publishedStudies.isEmpty()) {
Map<String, Long> datasetVariableCounts = asDraft ? null : datasetVariableService.getCountByStudyIds(Lists.newArrayList(publishedStudyIds));
publishedStudies.forEach(study -> {
builder.addStudyIds(study.getId());
builder.addStudySummaries(studySummaryDtos.asDtoBuilder(study, true, datasetVariableCounts == null ? 0 : datasetVariableCounts.get(study.getId())));
});
}
unpublishedStudyIds.forEach(studyId -> {
try {
builder.addStudySummaries(studySummaryDtos.asDto(studyId));
builder.addStudyIds(studyId);
} catch (NoSuchEntityException e) {
log.warn("Study not found in network {}: {}", network.getId(), studyId);
// ignore
}
});
if (network.getLogo() != null) {
builder.setLogo(attachmentDtos.asDto(network.getLogo()));
}
network.getNetworkIds().stream().filter(nId -> asDraft && subjectAclService.isPermitted("/draft/network", "VIEW", nId) || subjectAclService.isAccessible("/network", nId)).forEach(nId -> {
try {
builder.addNetworkSummaries(networkSummaryDtos.asDtoBuilder(nId, asDraft));
builder.addNetworkIds(nId);
} catch (NoSuchEntityException e) {
log.warn("Network not found in network {}: {}", network.getId(), nId);
// ignore
}
});
return builder;
}
use of org.obiba.mica.network.domain.NetworkState in project mica2 by obiba.
the class NetworkSummaryDtos method asDto.
@NotNull
public Mica.NetworkSummaryDto asDto(@NotNull Network network, boolean asDraft) {
Mica.NetworkSummaryDto.Builder builder = Mica.NetworkSummaryDto.newBuilder();
NetworkState networkState = networkService.getEntityState(network.getId());
builder.setId(network.getId()).addAllAcronym(localizedStringDtos.asDto(network.getAcronym())).addAllName(localizedStringDtos.asDto(network.getName())).setPublished(networkState.isPublished());
Mica.PermissionsDto permissionsDto = permissionsDtos.asDto(network);
if (asDraft) {
//
builder.setTimestamps(TimestampsDtos.asDto(network)).setPublished(//
networkState.isPublished()).setExtension(Mica.EntityStateDto.networkSummaryState, entityStateDtos.asDto(networkState).setPermissions(permissionsDto).build());
}
builder.setPermissions(permissionsDto);
network.getStudyIds().stream().filter(sId -> asDraft && subjectAclService.isPermitted("/draft/individual-study", "VIEW", sId) || subjectAclService.isAccessible("/individual-study", sId)).forEach(sId -> {
try {
builder.addStudyIds(sId);
} catch (NoSuchEntityException e) {
log.warn("Study not found in network {}: {}", network.getId(), sId);
// ignore
}
});
network.getNetworkIds().stream().filter(nId -> asDraft && subjectAclService.isPermitted("/draft/network", "VIEW", nId) || subjectAclService.isAccessible("/network", nId)).forEach(nId -> {
try {
builder.addNetworkIds(nId);
} catch (NoSuchEntityException e) {
log.warn("Network not found in network {}: {}", network.getId(), nId);
// ignore
}
});
return builder.build();
}
Aggregations