Have you implemented OpenMRS? Please participate in the Implementation Site Survey. If you already have, thank you!
Child pages
  • FormFilter Module-Documentation

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • All filters should implement FormFilterHandler interface. " boolean shouldDisplayForm(Patient p, User u) "  method of filter returns true to show the form and false if not required.
Code Block

/**
 * The contents of this file are subject to the OpenMRS Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://license.openmrs.org
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * Copyright (C) OpenMRS, LLC.  All Rights Reserved.
 */
package org.openmrs.module.formfilter;

import org.openmrs.Patient;
import org.openmrs.User;

/**
 * This interface helps to create form filters.
 * @author goutham
 */
public interface FormFilterHandler {


 /**
  * This method holds the logic to return true or false for given 
  * Patient and User. 
  *  
  * @return True/False ,if filter properties satisfy provided condition.
  */
 public boolean shouldDisplayForm(Patient p, User u);

}

...

  • Filtering is based on "Anding" i.e if any one assigned filter returns false then form does not appear on the patient dashboard.
  • Current Role Filter uses role inheritance behavior in filtering a form. We can switch between use/do not use role inheritance by setting "Use Role Inheritance Comparison" Global Property Settings value to yes/no.
  • All filters should have a single string parameter constructor which takes filter properties as input. This constructor can be used to initialize filter properties.
    Example:

    Code Block
    
    package org.openmrs.module.formfilter.impl;
    
    import java.lang.reflect.Field;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.openmrs.Patient;
    import org.openmrs.User;
    import org.openmrs.module.formfilter.FormFilterHandler;
    
    /**
     * This class will provide patient age based form filter.
     */
    public class AgeFormFilter implements FormFilterHandler {
    
    	protected Log log = LogFactory.getLog(getClass());
    
    	/**
    	 * Default Constructor
    	 */
    	public AgeFormFilter()
    	{
    
    	}
    
    	/**
    	 * Constructor sets class field values.
    	 * @param properties ,string property from FormFilterProperty class in key=value based format
    	 * Example: minimumAge=value&maximumAge=value
    	 */
    	public AgeFormFilter(String properties){
    		for (String string : properties.split("&")) {
    	        String str[]=string.split("=");
    	        try {
    	            Field field=this.getClass().getDeclaredField(str[0]);
    	            field.set(this, (Object)Integer.parseInt(str[1]));
                }catch (Exception e) {
                	log.info(e);
                }
    		}
    
    	}
    
    	private int minimumAge;
    
    	private int maximumAge;
    
    
    	/**
    	 * @return minimumAge
    	 */
        public int getMinimumAge() {
        	return minimumAge;
        }
    
        /**
    	 * Sets maximumAge
    	 *
    	 * @param maximumAge
    	 */
        public void setMinimumAge(int minimumAge) {
        	this.minimumAge = minimumAge;
        }
    
    
        /**
    	 * @return maximumAge
    	 */
        public int getMaximumAge() {
        	return maximumAge;
        }
    
    	/**
    	 * Sets maximumAge
    	 *
    	 * @param maximumAge
    	 */
        public void setMaximumAge(int maximumAge) {
        	this.maximumAge = maximumAge;
        }
    
        /**
         * @see org.openmrs.module.formfilter.FormFilterHandler#shouldDisplayForm(org.openmrs.Patient, org.openmrs.User)
         * @return True , if patient age lies between minimumAge and maximumAge.
         * @return False, if patient age does not between minimumAge and maximumAge.
         */
        @Override
        public boolean shouldDisplayForm(Patient p, User u) {
    	    // TODO Auto-generated method stub
    
    	    if((p.getAge()>=minimumAge) && (p.getAge()<=maximumAge))
    	    {
    	    	return true;
    	    }
    	    return false;
        }
    
    }
    

...