/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs;
import java.util.ArrayList;
import java.util.List;
import org.openmrs.api.APIException;
/**
* Represents the grouping of orders into a set,
* so as to give decision support for the doctors
*
* @since 1.12
*/
public class OrderSet extends BaseOpenmrsMetadata {
public static final long serialVersionUID = 72232L;
/**
* Restrictions put on saving an orderSet.
* ALL: All the members of the orderSet need to be selected for saving
* ONE: Only one of the member of the orderSet needs to be selected for saving
* ANY: Any of the members of the orderSet can be selected for saving
*/
public enum Operator {
ALL, ONE, ANY
}
private Integer orderSetId;
private Operator operator;
private List<OrderSetMember> orderSetMembers;
/**
* Gets the orderSetId
*
* @return the orderSetId
*/
public Integer getOrderSetId() {
return orderSetId;
}
/**
* Sets the orderSetId
*
* @param orderSetId the orderSetId to set
*/
public void setOrderSetId(Integer orderSetId) {
this.orderSetId = orderSetId;
}
/**
* Gets the operator
*
* @return the operator
*/
public Operator getOperator() {
return operator;
}
/**
* Sets the operator
*
* @param operator the operator to set
*/
public void setOperator(Operator operator) {
this.operator = operator;
}
/**
* Gets the orderSetMembers
*
* @return the orderSetMembers
*/
public List<OrderSetMember> getOrderSetMembers() {
if (orderSetMembers == null) {
orderSetMembers = new ArrayList<OrderSetMember>();
}
return orderSetMembers;
}
/**
* Sets the orderSetMembers
*
* @param orderSetMembers the orderSetMembers to set
*/
public void setOrderSetMembers(List<OrderSetMember> orderSetMembers) {
this.orderSetMembers = orderSetMembers;
}
/**
* Adds an orderSetMember to the existing list of orderSetMembers
*
* @param orderSetMember the new orderSetMember to be added
* @param position the position where it is to be added, if position is null it adds to the last position
*/
public void addOrderSetMember(OrderSetMember orderSetMember, Integer position) {
Integer listIndex = findListIndexForGivenPosition(position);
orderSetMember.setOrderSet(this);
getOrderSetMembers().add(listIndex, orderSetMember);
}
private Integer findListIndexForGivenPosition(Integer position) {
Integer size = getOrderSetMembers().size();
if (position != null) {
if (position < 0 && position >= (-1 - size)) {
position = position + size + 1;
} else if (position > size) {
throw new APIException("Cannot add a member which is out of range of the list");
}
} else {
position = size;
}
return position;
}
/**
* Adds an orderSetMember to the existing list of orderSetMembers
*
* @param orderSetMember the new orderSetMember to be added at the end of the current list of order set members
*/
public void addOrderSetMember(OrderSetMember orderSetMember) {
this.addOrderSetMember(orderSetMember, null);
}
@Override
public Integer getId() {
return getOrderSetId();
}
@Override
public void setId(Integer id) {
setOrderSetId(id);
}
/**
* Fetches the list of orderSetMembers that are not retired
*
* @return the orderSetMembers that are not retired
*/
public List<OrderSetMember> getUnRetiredOrderSetMembers() {
List<OrderSetMember> osm = new ArrayList<OrderSetMember>();
for (OrderSetMember orderSetMember : getOrderSetMembers()) {
if (!orderSetMember.getRetired()) {
osm.add(orderSetMember);
}
}
return osm;
}
/**
* Removes and orderSetMember from a list of existing orderSetMembers
*
* @param orderSetMember that is to be removed
*/
public void removeOrderSetMember(OrderSetMember orderSetMember) {
if (getOrderSetMembers().contains(orderSetMember)) {
getOrderSetMembers().remove(orderSetMember);
orderSetMember.setOrderSet(null);
}
}
/**
* Retires an orderSetMember
*
* @param orderSetMember to be retired
*/
public void retireOrderSetMember(OrderSetMember orderSetMember) {
orderSetMember.setRetired(true);
}
}