/** * A case-insensitive "like" (similar to Postgres <tt>ilike</tt> operator) * * @param propertyName The name of the property * @param value The value to use in comparison * * @return The Criterion * * @see LikeExpression */ public static Criterion ilike(String propertyName, Object value) { if ( value == null ) { throw new IllegalArgumentException( "Comparison value passed to ilike cannot be null" ); } return ilike( propertyName, value.toString(), MatchMode.EXACT ); }
@Test public void testIlikeRendering() { SessionFactory sf = new Configuration() .addAnnotatedClass( IrrelevantEntity.class ) .setProperty( AvailableSettings.DIALECT, IlikeSupportingDialect.class.getName() ) .setProperty( Environment.HBM2DDL_AUTO, "create-drop" ) .buildSessionFactory(); try { final Criteria criteria = sf.openSession().createCriteria( IrrelevantEntity.class ); final CriteriaQueryTranslator translator = new CriteriaQueryTranslator( (SessionFactoryImplementor) sf, (CriteriaImpl) criteria, IrrelevantEntity.class.getName(), "a" ); final Criterion ilikeExpression = Restrictions.ilike( "name", "abc" ); final String ilikeExpressionSqlFragment = ilikeExpression.toSqlString( criteria, translator ); assertEquals( "a.name insensitiveLike ?", ilikeExpressionSqlFragment ); } finally { sf.close(); } }
@Test public void testIlikeMimicing() { SessionFactory sf = new Configuration() .addAnnotatedClass( IrrelevantEntity.class ) .setProperty( AvailableSettings.DIALECT, NonIlikeSupportingDialect.class.getName() ) .setProperty( Environment.HBM2DDL_AUTO, "create-drop" ) .buildSessionFactory(); try { final Criteria criteria = sf.openSession().createCriteria( IrrelevantEntity.class ); final CriteriaQueryTranslator translator = new CriteriaQueryTranslator( (SessionFactoryImplementor) sf, (CriteriaImpl) criteria, IrrelevantEntity.class.getName(), "a" ); final Criterion ilikeExpression = Restrictions.ilike( "name", "abc" ); final String ilikeExpressionSqlFragment = ilikeExpression.toSqlString( criteria, translator ); assertEquals( "lowLowLow(a.name) like ?", ilikeExpressionSqlFragment ); } finally { sf.close(); } }
/** * @see org.openmrs.api.db.AdministrationDAO#getGlobalPropertiesByPrefix(java.lang.String) */ @Override @SuppressWarnings("unchecked") public List<GlobalProperty> getGlobalPropertiesByPrefix(String prefix) { return sessionFactory.getCurrentSession().createCriteria(GlobalProperty.class) .add(Restrictions.ilike(PROPERTY, prefix, MatchMode.START)).list(); }
/** * @see org.openmrs.api.db.AdministrationDAO#getGlobalPropertiesBySuffix(java.lang.String) */ @Override @SuppressWarnings("unchecked") public List<GlobalProperty> getGlobalPropertiesBySuffix(String suffix) { return sessionFactory.getCurrentSession().createCriteria(GlobalProperty.class) .add(Restrictions.ilike(PROPERTY, suffix, MatchMode.END)).list(); }
/** * @see org.openmrs.api.db.ConceptDAO#getConceptAttributeTypes(String) */ @Override public List<ConceptAttributeType> getConceptAttributeTypes(String name) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(ConceptAttributeType.class); //match name anywhere and case insensitive if (name != null) { criteria.add(Restrictions.ilike("name", name, MatchMode.ANYWHERE)); } return criteria.list(); }
/** * @see org.openmrs.api.db.ConceptDAO#getConceptMapTypeByName(java.lang.String) */ @Override public ConceptMapType getConceptMapTypeByName(String name) throws DAOException { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(ConceptMapType.class); criteria.add(Restrictions.ilike("name", name, MatchMode.EXACT)); return (ConceptMapType) criteria.uniqueResult(); }
/** * @see org.openmrs.api.db.ProviderDAO#getProviderByIdentifier(java.lang.String) */ @Override public Provider getProviderByIdentifier(String identifier) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Provider.class); criteria.add(Restrictions.ilike("identifier", identifier, MatchMode.EXACT)); return (Provider) criteria.uniqueResult(); } }
/** * @see OrderDAO#getCareSettingByName(String) */ @Override public CareSetting getCareSettingByName(String name) { return (CareSetting) sessionFactory.getCurrentSession().createCriteria(CareSetting.class).add( Restrictions.ilike("name", name)).uniqueResult(); }
/** * @see SerializedObjectDAO#getAllSerializedObjectsByName(Class, String, boolean) */ @Override @SuppressWarnings("unchecked") public List<SerializedObject> getAllSerializedObjectsByName(Class<?> type, String name, boolean exactMatchOnly) throws DAOException { Criteria c = sessionFactory.getCurrentSession().createCriteria(SerializedObject.class); c.add(Restrictions.or(Restrictions.eq("type", type.getName()), Restrictions.eq("subtype", type.getName()))); if (exactMatchOnly) { c.add(Restrictions.eq("name", name)); } else { c.add(Restrictions.ilike("name", name, MatchMode.ANYWHERE)); } return (List<SerializedObject>) c.list(); }
/** * @see org.openmrs.api.db.VisitDAO#getVisitTypes(java.lang.String) */ @Override @SuppressWarnings("unchecked") @Transactional(readOnly = true) public List<VisitType> getVisitTypes(String fuzzySearchPhrase) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(VisitType.class); criteria.add(Restrictions.ilike("name", fuzzySearchPhrase, MatchMode.ANYWHERE)); criteria.addOrder(Order.asc("name")); return criteria.list(); }
/** * @see org.openmrs.api.db.LocationDAO#getLocationTags(String) */ @Override @SuppressWarnings("unchecked") public List<LocationTag> getLocationTags(String search) { return sessionFactory.getCurrentSession().createCriteria(LocationTag.class) // 'ilike' case insensitive search .add(Restrictions.ilike("name", search, MatchMode.START)).addOrder(Order.asc("name")).list(); }
/** * @see org.openmrs.api.db.CohortDAO#getCohorts(java.lang.String) */ @Override @SuppressWarnings("unchecked") public List<Cohort> getCohorts(String nameFragment) throws DAOException { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Cohort.class); criteria.add(Restrictions.ilike("name", nameFragment, MatchMode.ANYWHERE)); criteria.addOrder(Order.asc("name")); return criteria.list(); }
/** * @see org.openmrs.api.db.ProgramWorkflowDAO#findPrograms(java.lang.String) */ @Override @SuppressWarnings("unchecked") public List<Program> findPrograms(String nameFragment) throws DAOException { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Program.class, "program"); criteria.add(Restrictions.ilike("name", nameFragment, MatchMode.ANYWHERE)); criteria.addOrder(Order.asc("name")); return criteria.list(); }
/** * @see org.openmrs.api.db.LocationDAO#getCountOfLocations(String, Boolean) */ @Override public Long getCountOfLocations(String nameFragment, Boolean includeRetired) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Location.class); if (!includeRetired) { criteria.add(Restrictions.eq("retired", false)); } if (StringUtils.isNotBlank(nameFragment)) { criteria.add(Restrictions.ilike("name", nameFragment, MatchMode.START)); } criteria.setProjection(Projections.rowCount()); return (Long) criteria.uniqueResult(); }
/** * @see org.openmrs.api.db.EncounterDAO#findEncounterTypes(java.lang.String) */ @Override @SuppressWarnings("unchecked") public List<EncounterType> findEncounterTypes(String name) throws DAOException { return sessionFactory.getCurrentSession().createCriteria(EncounterType.class) // 'ilike' case insensitive search .add(Restrictions.ilike("name", name, MatchMode.START)).addOrder(Order.asc("name")).addOrder( Order.asc("retired")).list(); }
/** * Utility method to add prefix and suffix like expression * * @param identifier * @param adminService */ private Criterion getCriterionForSimpleSearch(String identifier, AdministrationService adminService) { String prefix = adminService.getGlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_PATIENT_IDENTIFIER_PREFIX, ""); String suffix = adminService.getGlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_PATIENT_IDENTIFIER_SUFFIX, ""); return Restrictions.ilike("ids.identifier", prefix + identifier + suffix); }
Criterion prepareCriterionForName(String value, Boolean voided) { if (voided == null || !voided) { return Restrictions.conjunction().add(Restrictions.eq("name.voided", false)).add( Restrictions.disjunction().add(Restrictions.ilike("name.givenName", value, MatchMode.START)).add( Restrictions.ilike("name.middleName", value, MatchMode.START)).add( Restrictions.ilike("name.familyName", value, MatchMode.START)).add( Restrictions.ilike("name.familyName2", value, MatchMode.START))); } else { return Restrictions.conjunction().add( Restrictions.disjunction().add(Restrictions.ilike("name.givenName", value, MatchMode.START)).add( Restrictions.ilike("name.middleName", value, MatchMode.START)).add( Restrictions.ilike("name.familyName", value, MatchMode.START)).add( Restrictions.ilike("name.familyName2", value, MatchMode.START))); } }
Criterion prepareCriterionForAttribute(String value, Boolean voided, MatchMode matchMode) { if (voided == null || !voided) { return Restrictions.conjunction().add(Restrictions.eq("attributeType.searchable", true)).add( Restrictions.eq("attribute.voided", false)).add(Restrictions.ilike("attribute.value", value, matchMode)); } else { return Restrictions.conjunction().add(Restrictions.eq("attributeType.searchable", true)).add( Restrictions.ilike("attribute.value", value, matchMode)); } }
private void addEmptyVisitsByPatientCriteria(Criteria criteria, Patient patient, boolean includeVoided, String query) { criteria.add(Restrictions.eq("patient", patient)); criteria.add(Restrictions.isEmpty("encounters")); if (!includeVoided) { criteria.add(Restrictions.eq("voided", includeVoided)); } if (query != null && !StringUtils.isBlank(query)) { criteria.createAlias("visitType", "visitType", JoinType.LEFT_OUTER_JOIN); criteria.createAlias("location", "location", JoinType.LEFT_OUTER_JOIN); Disjunction or = Restrictions.disjunction(); criteria.add(or); or.add(Restrictions.ilike("visitType.name", query, MatchMode.ANYWHERE)); or.add(Restrictions.ilike("location.name", query, MatchMode.ANYWHERE)); } criteria.addOrder(Order.desc("startDatetime")); criteria.addOrder(Order.desc("visitId")); }