/** * 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.HashSet; import java.util.Locale; import java.util.Set; import org.openmrs.annotation.AllowDirectAccess; /** * Program */ public class Program extends BaseOpenmrsMetadata { public static final long serialVersionUID = 3214567L; // ****************** // Properties // ****************** private Integer programId; private Concept concept; /** * Represents the possible outcomes for this program. The concept should have answers or a * memberSet. */ private Concept outcomesConcept; @AllowDirectAccess private Set<ProgramWorkflow> allWorkflows = new HashSet<ProgramWorkflow>(); // ****************** // Constructors // ****************** /** Default Constructor */ public Program() { } /** Constructor with id */ public Program(Integer programId) { setProgramId(programId); } /** * Constructor with name * * @since 1.10 */ public Program(String name) { setName(name); } // ****************** // Instance methods // ****************** /** * Adds a new {@link ProgramWorkflow} to this Program * * @param workflow - the {@link ProgramWorkflow} to add */ public void addWorkflow(ProgramWorkflow workflow) { workflow.setProgram(this); getAllWorkflows().add(workflow); } /** * Removes a {@link ProgramWorkflow} from this Program * * @param workflow - the {@link ProgramWorkflow} to remove */ public void removeWorkflow(ProgramWorkflow workflow) { if (getAllWorkflows().contains(workflow)) { getAllWorkflows().remove(workflow); workflow.setProgram(null); } } /** * Retires a {@link ProgramWorkflow} * * @param workflow - the {@link ProgramWorkflow} to retire */ public void retireWorkflow(ProgramWorkflow workflow) { workflow.setRetired(true); } /** * Returns a {@link ProgramWorkflow} whose {@link Concept} has any {@link ConceptName} that * matches the given <code>name</code> * * @param name the {@link ProgramWorkflow} name, in any {@link Locale} * @return a {@link ProgramWorkflow} which has the passed <code>name</code> in any * {@link Locale} */ public ProgramWorkflow getWorkflowByName(String name) { for (ProgramWorkflow pw : getAllWorkflows()) { if (pw.getConcept().isNamed(name)) { return pw; } } return null; } /** @see Object#toString() */ @Override public String toString() { return "Program(id=" + getProgramId() + ", concept=" + getConcept() + ", workflows=" + getWorkflows() + ")"; } // ****************** // Property Access // ****************** public Concept getConcept() { return concept; } public void setConcept(Concept concept) { this.concept = concept; } public Concept getOutcomesConcept() { return outcomesConcept; } public void setOutcomesConcept(Concept concept) { this.outcomesConcept = concept; } public Integer getProgramId() { return programId; } public void setProgramId(Integer programId) { this.programId = programId; } /** * Get only the non-retired workflows * * @return Returns a Set<ProgramWorkflow> of all non-retired workflows */ public Set<ProgramWorkflow> getWorkflows() { Set<ProgramWorkflow> ret = new HashSet<ProgramWorkflow>(); for (ProgramWorkflow workflow : getAllWorkflows()) { if (!workflow.getRetired()) { ret.add(workflow); } } return ret; } /** * Get the workflow with the specified ID * * @return the workflow matching the given id or null if none found * @since 1.6 */ public ProgramWorkflow getWorkflow(Integer programWorkflowId) { if (getWorkflows() != null) { for (ProgramWorkflow wf : getWorkflows()) { if (wf.getId().equals(programWorkflowId)) { return wf; } } } return null; } /** * Get all workflows...including the retired ones * * @return Returns a Set<ProgramWorkflow> of all workflows */ public Set<ProgramWorkflow> getAllWorkflows() { if (allWorkflows == null) { allWorkflows = new HashSet<ProgramWorkflow>(); } return allWorkflows; } public void setAllWorkflows(Set<ProgramWorkflow> allWorkflows) { this.allWorkflows = allWorkflows; } /** * @since 1.5 * @see org.openmrs.OpenmrsObject#getId() */ @Override public Integer getId() { return getProgramId(); } /** * @since 1.5 * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer) */ @Override public void setId(Integer id) { setProgramId(id); } }