/** * 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.obs; import org.openmrs.Obs; import org.openmrs.api.APIException; /** * Interface for handling complex obs. Implementing classes are responsible for the storage and * retrieval of ComplexData associated with an Obs that is complex -- where Obs.isComplex() returns * true. <br> * <br> * These handler classes are delegated to by the ObsService and should never be called directly. <br> * <br> * Use case: * * <pre> * Obs complexObs = Context.getObsService().getComplexObs(123, OpenmrsConstants.RAW_VIEW); * ComplexData complexData = complexObs.getComplexData(); * Object largeStoredObject = complexData.getData(); * </pre> * * @since 1.5 */ public interface ComplexObsHandler { // Complex observation views public static final String RAW_VIEW = "RAW_VIEW"; public static final String TITLE_VIEW = "TITLE_VIEW"; public static final String TEXT_VIEW = "TEXT_VIEW"; public static final String HTML_VIEW = "HTML_VIEW"; public static final String PREVIEW_VIEW = "PREVIEW_VIEW"; public static final String URI_VIEW = "URI_VIEW"; /** * Save a complex obs. This extracts the ComplexData from an Obs, stores it to a location * determined by the handler, and returns the Obs with the ComplexData nullified. * * @param obs * @return the Obs with the ComplexData nullified */ public Obs saveObs(Obs obs) throws APIException; /** * Fetches the ComplexData from the location indicated from Obs.value_complex, attaches * ComplexData onto the Obs and returns the Obs. <br> * The ComplexData is returned in the format specified by the view (which can be null). <br> * This view is typically a contract between the view and the handler that has been registered, * so they those two know the types of views that can be handled. * * @param obs an obs without complex data filled in * @param view nullable view type. This is defined by the ui and view/handler * @return the obs with complex data filled in * @see org.openmrs.util.OpenmrsConstants */ public Obs getObs(Obs obs, String view); /** * Completely removes the ComplexData Object from its storage location. <br> * <br> * TODO: If we cannot delete the complex data object because of an error, do we want to return * the Obs, a boolean false, or an Exception? * * @param obs */ public boolean purgeComplexData(Obs obs); /** * Supported views getter * * @return all views supported by this handler * @since 1.12 */ public String[] getSupportedViews(); /** * View support check * * @param view view type defined by UI and view/handler * @return true if given view is supported by this handler * @since 1.12 */ public boolean supportsView(String view); }