public void addCategoryOptionCombo( CategoryOptionCombo dataElementCategoryOptionCombo ) { categoryOptionCombos.add( dataElementCategoryOptionCombo ); dataElementCategoryOptionCombo.getCategoryOptions().add( this ); }
public void removeCategoryOptionCombo( CategoryOptionCombo dataElementCategoryOptionCombo ) { categoryOptionCombos.remove( dataElementCategoryOptionCombo ); dataElementCategoryOptionCombo.getCategoryOptions().remove( this ); }
private boolean checkOptionComboSharingPermission( User user, IdentifiableObject object, Permission permission ) { CategoryOptionCombo optionCombo = (CategoryOptionCombo) object; if ( optionCombo.isDefault() || optionCombo.getCategoryOptions().isEmpty() ) { return true; } List<Integer> accessibleOptions = new ArrayList<>(); for ( CategoryOption option : optionCombo.getCategoryOptions() ) { if ( checkSharingPermission( user, option, permission ) ) { accessibleOptions.add( option.getId() ); } } return accessibleOptions.size() == optionCombo.getCategoryOptions().size(); } }
public void generateOptionCombos() { this.optionCombos = new HashSet<>( generateOptionCombosList() ); for ( CategoryOptionCombo optionCombo : optionCombos ) { for ( CategoryOption categoryOption : optionCombo.getCategoryOptions() ) { categoryOption.addCategoryOptionCombo( optionCombo ); } } }
public CategoryOptionGroup getGroup( CategoryOptionCombo optionCombo ) { Set<CategoryOption> categoryOptions = optionCombo.getCategoryOptions(); for ( CategoryOptionGroup group : members ) { if ( !CollectionUtils.intersection( group.getMembers(), categoryOptions ).isEmpty() ) { return group; } } return null; }
@Override public List<String> canRead( User user, CategoryOptionCombo optionCombo ) { List<String> errors = new ArrayList<>(); if ( user == null || user.isSuper() ) { return errors; } Set<CategoryOption> options = optionCombo.getCategoryOptions(); options.forEach( attrOption -> { if ( !aclService.canDataRead( user, attrOption ) ) { errors.add( "User has no data read access for CategoryOption: " + attrOption.getUid() ); } } ); return errors; }
public Date getLatestStartDate() { Date latestStartDate = null; for ( CategoryOption co : getCategoryOptions() ) { if ( co.getStartDate() != null ) { latestStartDate = (latestStartDate == null || latestStartDate.before( co.getStartDate() ) ? co.getStartDate() : latestStartDate); } } return latestStartDate; }
@Override public List<String> canRead( User user, CategoryOptionCombo categoryOptionCombo ) { List<String> errors = new ArrayList<>(); if ( user == null || user.isSuper() || categoryOptionCombo == null ) { return errors; } for ( CategoryOption categoryOption : categoryOptionCombo.getCategoryOptions() ) { if ( !aclService.canDataRead( user, categoryOption ) ) { errors.add( "User has no read access to category option: " + categoryOption.getUid() ); } } return errors; }
@Override public List<String> canWrite( User user, CategoryOptionCombo optionCombo ) { List<String> errors = new ArrayList<>(); if ( user == null || user.isSuper() ) { return errors; } Set<CategoryOption> options = optionCombo.getCategoryOptions(); options.forEach( attrOption -> { if ( !aclService.canDataWrite( user, attrOption ) ) { errors.add( "User has no data write access for CategoryOption: " + attrOption.getUid() ); } } ); return errors; }
private SetMap<Class<? extends IdentifiableObject>, IdentifiableObject> handleCategoryOptionCombo( SetMap<Class<? extends IdentifiableObject>, IdentifiableObject> metadata, CategoryOptionCombo categoryOptionCombo ) { if ( categoryOptionCombo == null ) return metadata; metadata.putValue( CategoryOptionCombo.class, categoryOptionCombo ); handleAttributes( metadata, categoryOptionCombo ); categoryOptionCombo.getCategoryOptions().forEach( categoryOption -> handleCategoryOption( metadata, categoryOption ) ); return metadata; }
public Date getEarliestEndDate() { Date earliestEndDate = null; for ( CategoryOption co : getCategoryOptions() ) { if ( co.getEndDate() != null ) { earliestEndDate = (earliestEndDate == null || earliestEndDate.after( co.getEndDate() ) ? co.getStartDate() : earliestEndDate); } } return earliestEndDate; }
@Override public List<String> canWrite( User user, CategoryOptionCombo categoryOptionCombo ) { List<String> errors = new ArrayList<>(); if ( user == null || user.isSuper() || categoryOptionCombo == null ) { return errors; } for ( CategoryOption categoryOption : categoryOptionCombo.getCategoryOptions() ) { if ( !aclService.canDataWrite( user, categoryOption ) ) { errors.add( "User has no write access to category option: " + categoryOption.getUid() ); } } return errors; }
@Override public List<String> canRead( User user, DataValue dataValue ) { List<String> errors = new ArrayList<>(); if ( user == null || user.isSuper() ) { return errors; } Set<CategoryOption> options = new HashSet<>(); CategoryOptionCombo categoryOptionCombo = dataValue.getCategoryOptionCombo(); if ( categoryOptionCombo != null ) { options.addAll( categoryOptionCombo.getCategoryOptions() ); } CategoryOptionCombo attributeOptionCombo = dataValue.getAttributeOptionCombo(); if ( attributeOptionCombo != null ) { options.addAll( attributeOptionCombo.getCategoryOptions() ); } options.forEach( option -> { if ( !aclService.canDataRead( user, option ) ) { errors.add( "User has no data read access for CategoryOption: " + option.getUid() ); } } ); return errors; }
public List<CategoryOptionCombo> getSortedOptionCombos() { List<CategoryOptionCombo> list = new ArrayList<>(); CombinationGenerator<CategoryOption> generator = new CombinationGenerator<>( getCategoryOptionsAsArray() ); while ( generator.hasNext() ) { List<CategoryOption> categoryOptions = generator.getNext(); Set<CategoryOption> categoryOptionSet = new HashSet<>( categoryOptions ); for ( CategoryOptionCombo optionCombo : optionCombos ) { Set<CategoryOption> persistedCategoryOptions = new HashSet<>( optionCombo.getCategoryOptions() ); if ( categoryOptionSet.equals( persistedCategoryOptions ) ) { list.add( optionCombo ); continue; } } } return list; }
/** * Returns whether a user can read a data element attribute option combo * given the user's dimension constraints. * <p> * In order to read an option combo, the user must be able to read *every* * option in the option combo. * * @param user the user. * @param optionCombo the record to test. * @param cogDimensionConstraints category option combo group constraints, if any. * @param catDimensionConstraints category constraints, if any. * @return whether the user can read the DataApprovalAudit. */ private boolean canReadOptionCombo( User user, CategoryOptionCombo optionCombo, Set<CategoryOptionGroupSet> cogDimensionConstraints, Set<Category> catDimensionConstraints ) { for ( CategoryOption option : optionCombo.getCategoryOptions() ) { if ( !isOptionCogConstraintReadable( user, option, cogDimensionConstraints ) || !isOptionCatConstraintReadable( user, option, catDimensionConstraints ) ) { return false; } } return true; }
/** * @param categoryCombo the category combo. * @param categoryOptions the category options. * @return CategoryOptionCombo */ public static CategoryOptionCombo createCategoryOptionCombo( CategoryCombo categoryCombo, CategoryOption... categoryOptions ) { CategoryOptionCombo categoryOptionCombo = new CategoryOptionCombo(); categoryOptionCombo.setAutoFields(); categoryOptionCombo.setCategoryCombo( categoryCombo ); for ( CategoryOption categoryOption : categoryOptions ) { categoryOptionCombo.getCategoryOptions().add( categoryOption ); categoryOption.getCategoryOptionCombos().add( categoryOptionCombo ); } return categoryOptionCombo; }
/** * @param categoryComboUniqueIdentifier A unique character to identify the * category option combo. * @param dataElementCategoryCombo The associated category combination. * @param categoryOptions the category options. * @return CategoryOptionCombo */ public static CategoryOptionCombo createCategoryOptionCombo( char categoryComboUniqueIdentifier, CategoryCombo dataElementCategoryCombo, CategoryOption... categoryOptions ) { CategoryOptionCombo categoryOptionCombo = new CategoryOptionCombo(); categoryOptionCombo.setAutoFields(); categoryOptionCombo.setCategoryCombo( dataElementCategoryCombo ); for ( CategoryOption categoryOption : categoryOptions ) { categoryOptionCombo.getCategoryOptions().add( categoryOption ); categoryOption.getCategoryOptionCombos().add( categoryOptionCombo ); } return categoryOptionCombo; }
@Override public CategoryOptionCombo getCategoryOptionComboAcl( IdentifiableProperty property, String id ) { CategoryOptionCombo coc = idObjectManager.getObject( CategoryOptionCombo.class, property, id ); if ( coc != null ) { User user = currentUserService.getCurrentUser(); for ( CategoryOption categoryOption : coc.getCategoryOptions() ) { if ( !aclService.canDataWrite( user, categoryOption ) ) { return null; } } } return coc; }
/** * @param categoryComboUniqueIdentifier A unique character to identify the * category combo. * @param categoryOptionUniqueIdentifiers Unique characters to identify the * category options. * @return CategoryOptionCombo */ public static CategoryOptionCombo createCategoryOptionCombo( char categoryComboUniqueIdentifier, char... categoryOptionUniqueIdentifiers ) { CategoryOptionCombo categoryOptionCombo = new CategoryOptionCombo(); categoryOptionCombo.setAutoFields(); categoryOptionCombo.setCategoryCombo( new CategoryCombo( "CategoryCombo" + categoryComboUniqueIdentifier, DataDimensionType.DISAGGREGATION ) ); for ( char identifier : categoryOptionUniqueIdentifiers ) { categoryOptionCombo.getCategoryOptions() .add( new CategoryOption( "CategoryOption" + identifier ) ); } return categoryOptionCombo; }
/** * Gets a range of valid dates for this (attribute) cateogry option combo. * <p> * The earliest valid date is the latest start date (if any) from all the * category options associated with this option combo. * <p> * The latest valid date is the earliest end date (if any) from all the * category options associated with this option combo. * * @return valid date range for this (attribute) category option combo. */ public DateRange getDateRange() { Date latestStartDate = null; Date earliestEndDate = null; for ( CategoryOption option : getCategoryOptions() ) { if ( option.getStartDate() != null && (latestStartDate == null || option.getStartDate().compareTo( latestStartDate ) > 0) ) { latestStartDate = option.getStartDate(); } if ( option.getEndDate() != null && (earliestEndDate == null || option.getStartDate().compareTo( earliestEndDate ) < 0) ) { earliestEndDate = option.getEndDate(); } } return new DateRange( latestStartDate, earliestEndDate ); }