List of usage examples for org.apache.commons.collections CollectionUtils size
public static int size(Object object)
From source file:org.openmrs.module.clinicalsummary.rule.antenatal.grouped.EncounterBasedNoFilterRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *///from w w w . ja va 2s . c om @Override protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { Result result = new Result(); EncounterWithRestrictionRule encounterWithRestrictionRule = new EncounterWithStringRestrictionRule(); Result encounterResults = encounterWithRestrictionRule.eval(context, patientId, parameters); // take out the encounter type for the reference encounter Object encounterType = parameters.remove(AncParameters.AFTER_ENCOUNTER_TYPE); // prepare the parameters parameters.put(EvaluableConstants.ENCOUNTER_FETCH_SIZE, 1); parameters.put(EvaluableConstants.ENCOUNTER_TYPE, Arrays.asList(encounterType)); Result afterEncounterResults = encounterWithRestrictionRule.eval(context, patientId, parameters); // see if we can get the reference encounter Object afterEncounter = null; if (CollectionUtils.isNotEmpty(afterEncounterResults)) afterEncounter = afterEncounterResults.latest().getResultObject(); ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); int counter = 0; Boolean foundAfter = Boolean.FALSE; while (counter < CollectionUtils.size(encounterResults) && !foundAfter) { Result encounterResult = encounterResults.get(counter); parameters.put(EvaluableConstants.OBS_ENCOUNTER, Arrays.asList(encounterResult.getResultObject())); Result obsResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(obsResults)) result.addAll(obsResults); if (OpenmrsUtil.nullSafeEquals(afterEncounter, encounterResult.getResultObject())) foundAfter = Boolean.TRUE; counter++; } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.common.CohortBuilderRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//*w ww.j a va 2 s . c om*/ @Override protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) { Result result = new Result(); String dateString = DATE_CUTOFF_POINT; Date initialDate = RuleUtils.parse(dateString, null); if (initialDate != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(initialDate); calendar.add(Calendar.MONTH, 5); Date cutoffDate = calendar.getTime(); EncounterWithRestrictionRule encounterWithRestrictionRule = new EncounterWithStringRestrictionRule(); parameters.put(EvaluableConstants.ENCOUNTER_FETCH_SIZE, 1); parameters.put(EvaluableConstants.ENCOUNTER_LOCATION, Arrays.asList(ENCOUNTER_LOCATION_MTRH_MODULE_4, ENCOUNTER_LOCATION_TURBO, ENCOUNTER_LOCATION_KITALE, ENCOUNTER_LOCATION_WEBUYE)); Result encounterResults = encounterWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(encounterResults) && encounterResults.getResultDate().after(cutoffDate)) { Result encounterResult = encounterResults.latest(); Encounter encounter = (Encounter) encounterResult.getResultObject(); Location encounterLocation = encounter.getLocation(); Patient patient = Context.getPatientService().getPatient(patientId); Integer age = patient.getAge(); if (age != null && age >= 6 && age <= 14) { Result obsResult = null; ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); parameters.put(EvaluableConstants.OBS_FETCH_SIZE, 1); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.PROBLEM_ADDED)); parameters.put(EvaluableConstants.OBS_VALUE_CODED, Arrays.asList(EvaluableNameConstants.HIV_INFECTED)); Result problemAddedResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(problemAddedResults)) obsResult = problemAddedResults.latest(); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.HIV_TEST_RESULT_THIS_VISIT)); parameters.put(EvaluableConstants.OBS_VALUE_CODED, Arrays.asList(EvaluableNameConstants.POSITIVE)); Result hivTestResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(hivTestResults)) obsResult = hivTestResults.latest(); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.HIV_ENZYME_IMMUNOASSAY_QUALITATIVE)); parameters.put(EvaluableConstants.OBS_VALUE_CODED, Arrays.asList(EvaluableNameConstants.POSITIVE)); Result elisaResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(elisaResults)) obsResult = elisaResults.latest(); parameters.put(EvaluableConstants.OBS_FETCH_SIZE, 2); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.HIV_DNA_POLYMERASE_CHAIN_REACTION_QUALITATIVE)); parameters.put(EvaluableConstants.OBS_VALUE_CODED, Arrays.asList(EvaluableNameConstants.POSITIVE)); Result polymeraseResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(polymeraseResults) && CollectionUtils.size(polymeraseResults) >= 2) obsResult = polymeraseResults.latest(); if (obsResult != null) { Obs obs = (Obs) obsResult.getResultObject(); result.add(new Result(encounter.getEncounterDatetime(), null, null, obs.getConcept(), obs.getObsDatetime(), obs.getObsId().doubleValue(), encounterLocation.getName(), obs.getValueCoded())); } } } } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.encounter.EncounterWithObjectRestrictionRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//*from w ww . j a v a2 s . c o m*/ @Override @SuppressWarnings("unchecked") protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { // this rule can process the following parameters: // - list of encounter type (map key: EvaluableConstants.ENCOUNTER_TYPE) // - list of location (map key: EvaluableConstants.LOCATION) // - number of encounter that should be returned (map key: EvaluableConstants.ENCOUNTER_FETCH_SIZE) // - ordering on the encounter datetime (map key: EvaluableConstants.ENCOUNTER_FETCH_ORDER) Result result = new Result(); // we will pass this restrictions to core service to get the correct encounters Map<String, Collection<OpenmrsObject>> restrictions = new HashMap<String, Collection<OpenmrsObject>>(); // get list of encounter types from the parameters Object encounterTypeObjects = parameters.get(EvaluableConstants.ENCOUNTER_TYPE); if (RuleUtils.isValidCollectionObject(encounterTypeObjects)) restrictions.put(EvaluableConstants.ENCOUNTER_TYPE, (Collection<OpenmrsObject>) encounterTypeObjects); // get list of locations from the parameters Object locationObjects = parameters.get(EvaluableConstants.ENCOUNTER_LOCATION); if (RuleUtils.isValidCollectionObject(locationObjects)) restrictions.put(EvaluableConstants.ENCOUNTER_LOCATION, (Collection<OpenmrsObject>) locationObjects); // get list of providers from the parameters (currently this is not supported) Object providerObjects = parameters.get(EvaluableConstants.ENCOUNTER_PROVIDER); if (RuleUtils.isValidCollectionObject(providerObjects)) restrictions.put(EvaluableConstants.ENCOUNTER_PROVIDER, (Collection<OpenmrsObject>) providerObjects); // this fetch restriction will define how many records should be returned and how they will be ordered FetchRestriction fetchRestriction = new FetchRestriction(); // specify how many records should be returned Object sizeObject = parameters.get(EvaluableConstants.ENCOUNTER_FETCH_SIZE); if (RuleUtils.isValidSizeObject(sizeObject)) fetchRestriction.setSize(NumberUtils.toInt(sizeObject.toString())); // specify how the record will be ordered (ascending or descending by encounter datetime) Object orderObject = parameters.get(EvaluableConstants.ENCOUNTER_FETCH_ORDER); if (RuleUtils.isValidOrderObject(orderObject)) fetchRestriction.setFetchOrdering(orderObject.toString()); // call the core service to search for the matching encounters CoreService coreService = Context.getService(CoreService.class); // pass the patient id, restrictions map and the fetch restriction in the service call List<Encounter> encounters = coreService.getPatientEncounters(patientId, restrictions, fetchRestriction); if (log.isDebugEnabled()) log.debug("Patient: " + patientId + ", encounters size:" + CollectionUtils.size(encounters)); // iterate over the encounters and then wrap them into a logic's result object // check the result object implementation to see how to create result object and how to pull data from them for (Encounter encounter : encounters) { Date encounterDatetime = encounter.getEncounterDatetime(); EncounterType type = encounter.getEncounterType(); String encounterTypeName = StringUtils.EMPTY; if (type != null) encounterTypeName = type.getName(); result.add(new Result(encounterDatetime, encounterTypeName, encounter)); } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.flowsheet.FlowsheetUtils.java
/** * Slice the flow-sheet to match the total number and record configuration needed * * @param results the result/*from w w w. j a v a2 s. c o m*/ * @return results object arranged in a certain way */ public static Result slice(final Result results) { if (CollectionUtils.isEmpty(results)) return results; Result slicedResults = new Result(); // result is ordered descending, last result is the earliest result Result firstResult = results.get(CollectionUtils.size(results) - 1); slicedResults.add(firstResult); if (results.size() > slicedResults.size()) { // get the last four results Integer counter = 0; Result otherResults = new Result(); while (counter < results.size() - 1 && counter < FlowsheetParameters.FLOWSHEET_MAX_SIZE - 1) { Result result = results.get(counter++); // skip some not not valid results if (DateUtils.isSameDay(firstResult.getResultDate(), result.getResultDate()) && OpenmrsUtil.nullSafeEquals(firstResult.getDatatype(), result.getDatatype())) { if (OpenmrsUtil.nullSafeEquals(result.getDatatype(), Result.Datatype.NUMERIC) && OpenmrsUtil.nullSafeEquals(firstResult.toNumber(), result.toNumber()) || (OpenmrsUtil.nullSafeEquals(result.getDatatype(), Result.Datatype.CODED) && OpenmrsUtil.nullSafeEquals(firstResult.toConcept(), result.toConcept()))) continue; } // get the latest results otherResults.add(result); } // flip them to make the order from earliest to latest Collections.reverse(otherResults); // add all of them to the oldest result, we now have results from earliest to latest slicedResults.addAll(otherResults); // flip them back to make the order from latest to the earliest Collections.reverse(slicedResults); } return slicedResults; }
From source file:org.openmrs.module.clinicalsummary.rule.primary.ConceptSetBasedObsRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//*from w w w . ja va 2s . c o m*/ @Override @SuppressWarnings("unchecked") protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { Result result = new Result(); Object conceptSetObjects = parameters.remove(PrimaryCareParameters.OBS_CONCEPT_SET_MEMBERS); Map<Concept, Integer> conceptSetPositions = searchPositions(conceptSetObjects); ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); Result parentObsResults = obsWithRestrictionRule.eval(context, patientId, parameters); for (Result parentObsResult : parentObsResults) { Obs parentObs = (Obs) parentObsResult.getResultObject(); if (parentObs.isObsGrouping()) { Set<Obs> childObservations = parentObs.getGroupMembers(); Result groupedResult = new Result(); groupedResult.add(new Result(parentObsResult.getResultDate())); Result[] results = new Result[CollectionUtils.size(conceptSetPositions)]; for (Obs childObservation : childObservations) { Integer position = conceptSetPositions.get(childObservation.getConcept()); if (position != null) results[position] = new Result(childObservation); } groupedResult.addAll(Arrays.asList(results)); result.add(groupedResult); } } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.primary.ConceptSetBasedObsRule.java
@SuppressWarnings("unchecked") private Map<Concept, Integer> searchPositions(Object conceptSetObjects) { Map<Concept, Integer> conceptSetPositions = new HashMap<Concept, Integer>(); if (RuleUtils.isValidCollectionObject(conceptSetObjects)) { List<String> conceptSetNames = (List<String>) conceptSetObjects; for (int counter = 0; counter < CollectionUtils.size(conceptSetNames); counter++) { Concept concept = CacheUtils.getConcept(conceptSetNames.get(counter)); conceptSetPositions.put(concept, counter); }/*from www . j a v a2 s. com*/ } return conceptSetPositions; }
From source file:org.openmrs.module.clinicalsummary.rule.primary.GroupedObservationRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//*from w w w . j ava 2s. com*/ @Override protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { Result result = new Result(); ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); Result results = obsWithRestrictionRule.eval(context, patientId, parameters); int counter = 0; Map<Concept, Result> groupedResult = new HashMap<Concept, Result>(); while (counter < CollectionUtils.size(results)) { Result obsResult = results.get(counter++); Obs obs = (Obs) obsResult.getResultObject(); Concept concept = obs.getConcept(); Result resultList = groupedResult.get(concept); if (resultList == null) { resultList = new Result(); groupedResult.put(concept, resultList); } resultList.add(obsResult); } for (Concept concept : groupedResult.keySet()) { result.add(groupedResult.get(concept)); } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.reminder.adult.cluster.FallingCD4OnARVReminderRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//* w w w. ja v a 2 s . co m*/ @Override protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { Result result = new Result(); ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); parameters.put(EvaluableConstants.OBS_FETCH_SIZE, 2); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.CD4_COUNT)); Result clusterResults = obsWithRestrictionRule.eval(context, patientId, parameters); // only process when we have at least two results if (CollectionUtils.size(clusterResults) >= 2) { Calendar calendar = Calendar.getInstance(); // three months ago calendar.add(Calendar.MONTH, -3); Date threeMonthsAgo = calendar.getTime(); // we already know there's at least two results, so we can use the magic number here to get last and second from last result Result currentClusterResult = clusterResults.get(0); Result previousClusterResult = clusterResults.get(1); Double percentage = (previousClusterResult.toNumber() - currentClusterResult.toNumber()) / previousClusterResult.toNumber(); if (currentClusterResult.getResultDate().before(threeMonthsAgo) && percentage > 0.5) { AntiRetroViralRule antiRetroViralRule = new AntiRetroViralRule(); // prepare the encounter types parameters.put(EvaluableConstants.ENCOUNTER_TYPE, Arrays.asList(EvaluableNameConstants.ENCOUNTER_TYPE_ADULT_INITIAL, EvaluableNameConstants.ENCOUNTER_TYPE_ADULT_RETURN, EvaluableNameConstants.ENCOUNTER_TYPE_ADULT_NONCLINICALMEDICATION)); Result arvResults = antiRetroViralRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(arvResults)) { // we don't want to limit the search on the test parameters.remove(EvaluableConstants.OBS_FETCH_SIZE); // search for the test parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.TESTS_ORDERED)); parameters.put(EvaluableConstants.OBS_VALUE_CODED, Arrays.asList(EvaluableNameConstants.CD4_PANEL, EvaluableNameConstants.HIV_DNA_POLYMERASE_CHAIN_REACTION_QUALITATIVE, EvaluableNameConstants.HIV_VIRAL_LOAD_QUANTITATIVE)); Result testResults = obsWithRestrictionRule.eval(context, patientId, parameters); calendar.setTime(currentClusterResult.getResultDate()); calendar.add(Calendar.MONTH, 3); Date threeMonthsAfterResult = calendar.getTime(); Boolean testExists = Boolean.FALSE; Integer testCounter = 0; while (testCounter < testResults.size() && !testExists) { Result testResult = testResults.get(testCounter++); if (testResult.getResultDate().before(threeMonthsAfterResult) && testResult.getResultDate().after(currentClusterResult.getResultDate())) testExists = Boolean.TRUE; } if (!testExists) result.add(new Result( String.valueOf(parameters.get(ReminderParameters.DISPLAYED_REMINDER_TEXT)))); } } } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.reminder.adult.cluster.Over300CD4ExpressCareReminderRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//*from ww w . j a v a 2s. c o m*/ @Override protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { Result result = new Result(); ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.HIV_VIRAL_LOAD_QUANTITATIVE)); parameters.put(EvaluableConstants.ENCOUNTER_FETCH_SIZE, 2); Result obsClusterResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.size(obsClusterResults) > 1) { Result latestClusterResult = obsClusterResults.get(0); Result previousClusterResult = obsClusterResults.get(1); Calendar calendar = Calendar.getInstance(); calendar.setTime(latestClusterResult.getResultDate()); calendar.add(Calendar.MONTH, -6); Date sixMonthsBefore = calendar.getTime(); if (latestClusterResult.toNumber() < 1000 && previousClusterResult.toNumber() < 1000 && previousClusterResult.getResultDate().before(sixMonthsBefore)) { parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.REFERRALS_ORDERED)); parameters.put(EvaluableConstants.OBS_VALUE_CODED, Arrays.asList(EvaluableNameConstants.EXPRESS_CARE_PROGRAM, EvaluableNameConstants.LOW_RISK_EXPRESS_CARE_PROGRAM)); Result referralResults = obsWithRestrictionRule.eval(context, patientId, parameters); if (CollectionUtils.isEmpty(referralResults)) { parameters.put(EvaluableConstants.ENCOUNTER_TYPE, Arrays.asList(EvaluableNameConstants.ECSTABLE)); EncounterWithRestrictionRule encounterWithRestrictionRule = new EncounterWithStringRestrictionRule(); Result stableEncounterResults = encounterWithRestrictionRule.eval(context, patientId, parameters); AntiRetroViralRule antiRetroViralRule = new AntiRetroViralRule(); // prepare the encounter types parameters.put(EvaluableConstants.ENCOUNTER_TYPE, Arrays.asList(EvaluableNameConstants.ENCOUNTER_TYPE_ADULT_INITIAL, EvaluableNameConstants.ENCOUNTER_TYPE_ADULT_RETURN, EvaluableNameConstants.ENCOUNTER_TYPE_ADULT_NONCLINICALMEDICATION)); Result arvResults = antiRetroViralRule.eval(context, patientId, parameters); if (CollectionUtils.isNotEmpty(arvResults) && CollectionUtils.isEmpty(stableEncounterResults)) result.add(new Result( String.valueOf(parameters.get(ReminderParameters.DISPLAYED_REMINDER_TEXT)))); } } } return result; }
From source file:org.openmrs.module.clinicalsummary.rule.reminder.adult.general.FallingWeightReminderRule.java
/** * @see org.openmrs.logic.Rule#eval(org.openmrs.logic.LogicContext, Integer, java.util.Map) *//*from www.j a v a 2 s. co m*/ @Override protected Result evaluate(final LogicContext context, final Integer patientId, final Map<String, Object> parameters) throws LogicException { Result result = new Result(); ObsWithRestrictionRule obsWithRestrictionRule = new ObsWithStringRestrictionRule(); parameters.put(EvaluableConstants.OBS_FETCH_SIZE, 2); parameters.put(EvaluableConstants.OBS_CONCEPT, Arrays.asList(EvaluableNameConstants.WEIGHT_KG)); Result weightResults = obsWithRestrictionRule.eval(context, patientId, parameters); // only process when we have at least two results if (CollectionUtils.size(weightResults) >= 2) { // we already know there's at least two results, so we can use the magic number here to get last and second from last result Result firstWeightResult = weightResults.get(0); Result secondWeightResult = weightResults.get(1); Double weightDrop = secondWeightResult.toNumber() - firstWeightResult.toNumber(); Double weightDropPercentage = weightDrop / secondWeightResult.toNumber(); Calendar calendar = Calendar.getInstance(); calendar.setTime(firstWeightResult.getResultDate()); calendar.add(Calendar.MONTH, -6); Date sixMonthsBefore = calendar.getTime(); if (weightDropPercentage > 0.1 && secondWeightResult.getResultDate().after(sixMonthsBefore)) { result.add(new Result(String.valueOf(parameters.get(ReminderParameters.DISPLAYED_REMINDER_TEXT)))); } } return result; }