use of org.karnak.backend.data.entity.ProfileEntity in project karnak by OsiriX-Foundation.
the class Profile method applyAction.
public void applyAction(Attributes dcm, Attributes dcmCopy, HMAC hmac, ProfileItem profilePassedInSequence, ActionItem actionPassedInSequence, AttributeEditorContext context) {
for (int tag : dcm.tags()) {
VR vr = dcm.getVR(tag);
final ExprCondition exprCondition = new ExprCondition(dcmCopy);
ActionItem currentAction = null;
ProfileItem currentProfile = null;
for (ProfileItem profileEntity : profiles.stream().filter(p -> !(p instanceof CleanPixelData)).collect(Collectors.toList())) {
currentProfile = profileEntity;
if (profileEntity.getCondition() == null || profileEntity.getCodeName().equals(ProfileItemType.DEFACING.getClassAlias()) || profileEntity.getCodeName().equals(ProfileItemType.CLEAN_PIXEL_DATA.getClassAlias())) {
currentAction = profileEntity.getAction(dcm, dcmCopy, tag, hmac);
} else {
boolean conditionIsOk = (Boolean) ExpressionResult.get(profileEntity.getCondition(), exprCondition, Boolean.class);
if (conditionIsOk) {
currentAction = profileEntity.getAction(dcm, dcmCopy, tag, hmac);
}
}
if (currentAction != null) {
break;
}
if (profileEntity.equals(profilePassedInSequence)) {
currentAction = actionPassedInSequence;
break;
}
}
if (!(currentAction instanceof Remove) && !(currentAction instanceof ReplaceNull) && vr == VR.SQ) {
final ProfileItem finalCurrentProfile = currentProfile;
final ActionItem finalCurrentAction = currentAction;
Sequence seq = dcm.getSequence(tag);
if (seq != null) {
for (Attributes d : seq) {
applyAction(d, dcmCopy, hmac, finalCurrentProfile, finalCurrentAction, context);
}
}
} else {
if (currentAction != null) {
try {
currentAction.execute(dcm, tag, hmac);
} catch (final Exception e) {
LOGGER.error("Cannot execute the currentAction {} for tag: {}", currentAction, TagUtils.toString(tag), e);
}
}
}
}
}
use of org.karnak.backend.data.entity.ProfileEntity in project karnak by OsiriX-Foundation.
the class Profile method applyCleanPixelData.
public void applyCleanPixelData(Attributes dcmCopy, AttributeEditorContext context, ProfileEntity profileEntity) {
Object pix = dcmCopy.getValue(Tag.PixelData);
if ((pix instanceof BulkData || pix instanceof Fragments) && !profileEntity.getMaskEntities().isEmpty() && profiles.stream().anyMatch(p -> p instanceof CleanPixelData)) {
String sopClassUID = dcmCopy.getString(Tag.SOPClassUID);
if (!StringUtil.hasText(sopClassUID)) {
throw new IllegalStateException("DICOM Object does not contain sopClassUID");
}
String scuPattern = sopClassUID + ".";
MaskArea mask = getMask(dcmCopy.getString(Tag.StationName));
// BurnedInAnnotation
if (isCleanPixelAllowedDependingImageType(dcmCopy, sopClassUID, scuPattern) && evaluateConditionCleanPixelData(dcmCopy)) {
context.setMaskArea(mask);
if (mask == null) {
throw new IllegalStateException("Clean pixel is not applied: mask not defined in station name");
}
} else {
context.setMaskArea(null);
}
}
}
use of org.karnak.backend.data.entity.ProfileEntity in project karnak by OsiriX-Foundation.
the class ProfilePipeService method validateProfile.
public ArrayList<ProfileError> validateProfile(ProfilePipeBody profilePipeYml) {
ProfileEntity newProfileEntity = createNewProfile(profilePipeYml, false);
ArrayList<ProfileError> profileErrors = new ArrayList<>();
for (ProfileElementEntity profileElementEntity : newProfileEntity.getProfileElementEntities()) {
ProfileError profileError = new ProfileError(profileElementEntity);
profileErrors.add(profileError);
ProfileItemType t = ProfileItemType.getType(profileElementEntity.getCodename());
if (t == null) {
profileError.setError("Cannot find the profile codename: " + profileElementEntity.getCodename());
} else {
try {
t.getProfileClass().getConstructor(ProfileElementEntity.class).newInstance(profileElementEntity);
} catch (Exception e) {
profileError.setError(e.getCause().getMessage());
continue;
}
}
}
return profileErrors;
}
use of org.karnak.backend.data.entity.ProfileEntity in project karnak by OsiriX-Foundation.
the class ProfileLogic method setProfileComponent.
public void setProfileComponent(InputStream stream) {
try {
ProfilePipeBody profilePipe = readProfileYaml(stream);
ArrayList<ProfileError> profileErrors = profilePipeService.validateProfile(profilePipe);
Predicate<ProfileError> errorPredicate = profileError -> profileError.getError() != null;
if (profileErrors.stream().noneMatch(errorPredicate)) {
final ProfileEntity newProfileEntity = profilePipeService.saveProfilePipe(profilePipe, false);
profileView.getProfileErrorView().removeAll();
profileView.getProfileGrid().selectRow(newProfileEntity);
profileView.getProfileComponent().setProfile(newProfileEntity);
profileView.getProfileElementMainView().setProfile(newProfileEntity);
} else {
profileView.getProfileGrid().deselectAll();
profileView.getProfileErrorView().setView(profileErrors);
profileView.remove(profileView.getProfileHorizontalLayout());
profileView.add(profileView.getProfileErrorView());
}
if (profilePipe.getDefaultIssuerOfPatientID() != null) {
openWarningIssuerDialog();
}
} catch (YAMLException e) {
LOGGER.error("Unable to read uploaded YAML", e);
profileView.getProfileErrorView().setView("Unable to read uploaded YAML file.\n" + "Please make sure it is a YAML file and respects the YAML structure.");
}
}
use of org.karnak.backend.data.entity.ProfileEntity in project karnak by OsiriX-Foundation.
the class ProfileElementRepoTest method shouldFindAllRecords.
/**
* Test find all.
*/
@Test
void shouldFindAllRecords() {
// Create an entity to save
// Profile
ProfileEntity profileEntity = new ProfileEntity();
profileEntity.setName("name");
profileEntity = profileRepo.saveAndFlush(profileEntity);
// ProfileElement
ProfileElementEntity entity = new ProfileElementEntity();
entity.setName("Name");
entity.setProfileEntity(profileEntity);
// Save the entity
LOGGER.info("Saving entity with name [{}]", entity.getName());
repository.saveAndFlush(entity);
// Find all
List<ProfileElementEntity> all = repository.findAll();
// Test find all
assertNotNull(all);
assertTrue(all.size() > 0);
assertEquals(1, all.size());
LOGGER.info("Number of entities found [{}]", all.size());
}
Aggregations