/** * 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; import java.util.HashSet; import java.util.Locale; import java.util.Set; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Root; /** * Program */ @Root public class Program extends BaseOpenmrsMetadata implements java.io.Serializable { public static final long serialVersionUID = 3214567L; // ****************** // Properties // ****************** private Integer programId; private Concept concept; private Set<ProgramWorkflow> allWorkflows = new HashSet<ProgramWorkflow>(); // ****************** // Constructors // ****************** /** Default Constructor */ public Program() { } /** Constructor with id */ public Program(Integer programId) { setProgramId(programId); } // ****************** // 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</name> * * @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#equals(Object) */ public boolean equals(Object obj) { if (obj != null && obj instanceof Program) { Program p = (Program) obj; if (this.getProgramId() != null) { return (this.getProgramId().equals(p.getProgramId())); } } return this == obj; } /** @see Object#toString() */ 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; } @Attribute(required = true) public Integer getProgramId() { return programId; } @Attribute(required = true) 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.isRetired() == false) 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() */ public Integer getId() { return getProgramId(); } /** * @since 1.5 * @see org.openmrs.OpenmrsObject#setId(java.lang.Integer) */ public void setId(Integer id) { setProgramId(id); } }