public String getTableName() { String name = baseName; if ( program != null ) { name += PartitionUtils.SEP + program.getUid().toLowerCase(); } return name; }
public String getTempTableName() { String name = baseName + AnalyticsTableManager.TABLE_TEMP_SUFFIX; if ( program != null ) { name += PartitionUtils.SEP + program.getUid().toLowerCase(); } return name; }
/** * Returns the table name of the table with the given base name and program. * * @param baseName the table base name. * @param program the program. * @return the table name. */ public static String getTableName( String baseName, Program program ) { return baseName + SEP + program.getUid().toLowerCase(); }
@Override public String getDimensionItem() { return program.getUid() + COMPOSITE_DIM_OBJECT_PLAIN_SEP + dataElement.getUid(); }
@Override public String getDimensionItem() { return program.getUid() + COMPOSITE_DIM_OBJECT_PLAIN_SEP + attribute.getUid(); }
public MetadataItem( String name, Program program ) { this.name = name; if ( program == null ) { return; } this.uid = program.getUid(); this.code = program.getCode(); this.description = program.getDescription(); }
public String getTableName() { String name = masterTable.getBaseName(); if ( year != null ) { name += PartitionUtils.SEP + year; } if ( masterTable.getProgram() != null ) { name += PartitionUtils.SEP + masterTable.getProgram().getUid().toLowerCase(); } return name; }
public String getTempTableName() { String name = masterTable.getBaseName() + AnalyticsTableManager.TABLE_TEMP_SUFFIX; if ( year != null ) { name += PartitionUtils.SEP + year; } if ( masterTable.getProgram() != null ) { name += PartitionUtils.SEP + masterTable.getProgram().getUid().toLowerCase(); } return name; }
private String getProgramIndicatorEventInProgramStageSql(ProgramIndicator programIndicator, Date reportingStartDate, Date reportingEndDate ) { Assert.isTrue( programIndicator.hasEventDateCohortBoundary(), "Can not get event date cohort boundaries for program indicator:" + programIndicator.getUid() ); Map<String, Set<AnalyticsPeriodBoundary>> map = programIndicator.getEventDateCohortBoundaryByProgramStage(); final SimpleDateFormat format = new SimpleDateFormat(); format.applyPattern( Period.DEFAULT_DATE_FORMAT ); String sql = ""; for ( String programStage : map.keySet() ) { Set<AnalyticsPeriodBoundary> boundaries = map.get( programStage ); String eventTableName = "analytics_event_" + programIndicator.getProgram().getUid(); sql += " (select count(*) from " + eventTableName + " where " + eventTableName + ".pi = " + ANALYTICS_TBL_ALIAS + ".pi and executiondate is not null "; for ( AnalyticsPeriodBoundary boundary : boundaries ) { sql += " and executiondate " + ( boundary.getAnalyticsPeriodBoundaryType().isStartBoundary() ? ">" : "<" ) + " cast( '" + format.format( boundary.getBoundaryDate( reportingStartDate, reportingEndDate ) ) + "' as date )"; } sql += ") > 0"; } return sql; }
@Override public List<String> canWrite( User user, TrackedEntityInstance trackedEntityInstance, Program program ) { List<String> errors = new ArrayList<>(); // always allow if user == null (internal process) or user is superuser if ( user == null || user.isSuper() || trackedEntityInstance == null ) { return errors; } if ( !aclService.canDataWrite( user, program ) ) { errors.add( "User has no data write access to program: " + program.getUid() ); } TrackedEntityType trackedEntityType = trackedEntityInstance.getTrackedEntityType(); if ( !aclService.canDataWrite( user, trackedEntityType ) ) { errors.add( "User has no data write access to tracked entity: " + trackedEntityType.getUid() ); } if ( !ownershipAccessManager.hasAccess( user, trackedEntityInstance, program ) ) { errors.add( TrackerOwnershipManager.OWNERSHIP_ACCESS_DENIED ); } return errors; }
@Override public List<String> canRead( User user, TrackedEntityInstance trackedEntityInstance, Program program ) { List<String> errors = new ArrayList<>(); // always allow if user == null (internal process) or user is superuser if ( user == null || user.isSuper() || trackedEntityInstance == null ) { return errors; } if ( !aclService.canDataRead( user, program ) ) { errors.add( "User has no data read access to program: " + program.getUid() ); } TrackedEntityType trackedEntityType = trackedEntityInstance.getTrackedEntityType(); if ( !aclService.canDataRead( user, trackedEntityType ) ) { errors.add( "User has no data read access to tracked entity: " + trackedEntityType.getUid() ); } if ( !ownershipAccessManager.hasAccess( user, trackedEntityInstance, program ) ) { errors.add( TrackerOwnershipManager.OWNERSHIP_ACCESS_DENIED ); } return errors; }
public String countWhereCondition( ProgramIndicator programIndicator, StatementBuilder sb, Date reportingStartDate, Date reportingEndDate, String element, String condition ) { Matcher matcher = COHORT_HAVING_DATA_ELEMENT_PATTERN.matcher( element ); if ( matcher.find() ) { String ps = matcher.group( PROGRAM_STAGE_REGEX_GROUP ); String de = matcher.group( DATA_ELEMENT_REGEX_GROUP ); String eventTableName = "analytics_event_" + programIndicator.getProgram().getUid(); String columnName = "\"" + de + "\""; return "(select count(" + columnName + ") from " + eventTableName + " where " + eventTableName + ".pi = " + StatementBuilder.ANALYTICS_TBL_ALIAS + ".pi and " + columnName + " is not null " + " and " + columnName + condition + " " + (programIndicator.getEndEventBoundary() != null ? ("and " + sb.getBoundaryCondition( programIndicator.getEndEventBoundary(), programIndicator, reportingStartDate, reportingEndDate ) + " ") : "") + (programIndicator.getStartEventBoundary() != null ? ("and " + sb.getBoundaryCondition( programIndicator.getStartEventBoundary(), programIndicator, reportingStartDate, reportingEndDate ) + " ") : "") + "and ps = '" + ps + "')"; } else { throw new IllegalArgumentException( "No data element found in argument 1:" + element + " in " + BaseCountIfProgramIndicatorFunction.KEY + " for program indciator:" + programIndicator.getUid() ); } }
/** * Check if the user has temporary access for a specific tei-program * combination * * @param entityInstance The tracked entity instance object * @param program The program object * @param user The user object against which the check has to be performed * @return true if the user has temporary access, false otherwise */ private boolean hasTemporaryAccess( TrackedEntityInstance entityInstance, Program program, User user ) { if ( canSkipOwnershipCheck( user, program ) || entityInstance == null ) { return true; } return temporaryTrackerOwnershipCache.get( tempAccessKey( entityInstance.getUid(), program.getUid(), user.getUsername() ) ).orElse( false ); }
public ProgramOwner( TrackedEntityProgramOwner programOwner ) { this.ownerOrgUnit = programOwner.getOrganisationUnit().getUid(); this.program = programOwner.getProgram().getUid(); this.trackedEntityInstance = programOwner.getEntityInstance().getUid(); }
private ImportSummaries handleEvents( Enrollment enrollment, ProgramInstance programInstance, ImportOptions importOptions ) { List<Event> create = new ArrayList<>(); List<Event> update = new ArrayList<>(); List<String> delete = new ArrayList<>(); for ( Event event : enrollment.getEvents() ) { event.setEnrollment( enrollment.getEnrollment() ); event.setProgram( programInstance.getProgram().getUid() ); event.setTrackedEntityInstance( enrollment.getTrackedEntityInstance() ); if ( importOptions.getImportStrategy().isSync() && event.isDeleted() ) { delete.add( event.getEvent() ); } else if ( !programStageInstanceService.programStageInstanceExists( event.getEvent() ) ) { create.add( event ); } else { update.add( event ); } } ImportSummaries importSummaries = new ImportSummaries(); importSummaries.addImportSummaries( eventService.addEvents( create, importOptions, false ) ); importSummaries.addImportSummaries( eventService.updateEvents( update, importOptions, false, false ) ); importSummaries.addImportSummaries( eventService.deleteEvents( delete, false ) ); return importSummaries; }
/** * Handles the references for RelationshipConstraint, persisting any bject that might * end up in a transient state. * * @param relationshipConstraint */ private void handleRelationshipConstraintReferences( RelationshipConstraint relationshipConstraint ) { TrackedEntityType trackedEntityType = relationshipConstraint.getTrackedEntityType(); Program program = relationshipConstraint.getProgram(); ProgramStage programStage = relationshipConstraint.getProgramStage(); if ( trackedEntityType != null ) { trackedEntityType = trackedEntityTypeService.getTrackedEntityType( trackedEntityType.getUid() ); relationshipConstraint.setTrackedEntityType( trackedEntityType ); } if ( program != null ) { program = programService.getProgram( program.getUid() ); relationshipConstraint.setProgram( program ); } if ( programStage != null ) { programStage = programStageService.getProgramStage( programStage.getUid() ); relationshipConstraint.setProgramStage( programStage ); } sessionFactory.getCurrentSession().save( relationshipConstraint ); }
@Override public void grantTemporaryOwnership( TrackedEntityInstance entityInstance, Program program, User user, String reason ) { if ( canSkipOwnershipCheck( user, program ) || entityInstance == null ) { return; } if ( user != null && program.isProtected() ) { programTempOwnershipAuditService .addProgramTempOwnershipAudit( new ProgramTempOwnershipAudit( program, entityInstance, reason, user.getUsername() ) ); temporaryTrackerOwnershipCache.put( tempAccessKey( entityInstance.getUid(), program.getUid(), user.getUsername() ), true ); } }
public String getProgramIndicatorColumnSelectSql( String programStageUid, String columnName, Date reportingStartDate, Date reportingEndDate, ProgramIndicator programIndicator ) { if ( programIndicator.getAnalyticsType().equals( AnalyticsType.ENROLLMENT ) ) { String eventTableName = "analytics_event_" + programIndicator.getProgram().getUid(); return "(select " + columnName + " from " + eventTableName + " where " + eventTableName + ".pi = " + ANALYTICS_TBL_ALIAS + ".pi and " + columnName + " is not null " + ( programIndicator.getEndEventBoundary() != null ? ("and " + getBoundaryCondition( programIndicator.getEndEventBoundary(), programIndicator, reportingStartDate, reportingEndDate ) + " ") : "" ) + ( programIndicator.getStartEventBoundary() != null ? ( "and " + getBoundaryCondition( programIndicator.getStartEventBoundary(), programIndicator, reportingStartDate, reportingEndDate ) + " ") : "" ) + "and ps = '" + programStageUid + "' " + "order by executiondate " + "desc limit 1 )"; } else { return columnName; } }
protected String getBoundedDataValueSelectSql( String programStageUid, String dataElementUid, Date reportingStartDate, Date reportingEndDate, ProgramIndicator programIndicator ) { if ( programIndicator.hasNonDefaultBoundaries() && programIndicator.hasEventBoundary() ) { String eventTableName = "analytics_event_" + programIndicator.getProgram().getUid(); String columnName = "\"" + dataElementUid + "\""; return "(select " + columnName + " from " + eventTableName + " where " + eventTableName + ".pi = enrollmenttable.pi and " + columnName + " is not null " + ( programIndicator.getEndEventBoundary() != null ? ( "and " + statementBuilder.getBoundaryCondition( programIndicator.getEndEventBoundary(), programIndicator, reportingStartDate, reportingEndDate ) + " ") : "" ) + (programIndicator.getStartEventBoundary() != null ? ("and " + statementBuilder.getBoundaryCondition( programIndicator.getStartEventBoundary(), programIndicator, reportingStartDate, reportingEndDate ) + " ") : "" ) + "and ps = '" + programStageUid + "' " + "order by executiondate " + "desc limit 1 )"; } else { return statementBuilder.columnQuote( programStageUid + ProgramIndicator.DB_SEPARATOR_ID + dataElementUid ); } }
@Override public void decideAccess( TrackedEntityInstanceQueryParams params ) { User user = params.isInternalSearch() ? null : currentUserService.getCurrentUser(); if ( params.isOrganisationUnitMode( ALL ) && !currentUserService.currentUserIsAuthorized( Authorities.F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS.name() ) && !params.isInternalSearch() ) { throw new IllegalQueryException( "Current user is not authorized to query across all organisation units" ); } if ( params.hasProgram() ) { if ( !aclService.canDataRead( user, params.getProgram() ) ) { throw new IllegalQueryException( "Current user is not authorized to read data from selected program: " + params.getProgram().getUid() ); } if ( params.getProgram().getTrackedEntityType() != null && !aclService.canDataRead( user, params.getProgram().getTrackedEntityType() ) ) { throw new IllegalQueryException( "Current user is not authorized to read data from selected program's tracked entity type: " + params.getProgram().getTrackedEntityType().getUid() ); } } if ( params.hasTrackedEntityType() && !aclService.canDataRead( user, params.getTrackedEntityType() ) ) { throw new IllegalQueryException( "Current user is not authorized to read data from selected tracked entity type: " + params.getTrackedEntityType().getUid() ); } }