/** * 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.xml; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.util.OpenmrsConstants; import org.simpleframework.xml.graph.CycleStrategy; import org.simpleframework.xml.stream.NodeMap; /** * This is a specific serialization strategy developed so that the OpenMRS objects that happen to be * proxied by Hibernate will be serialized correctly.<br/> * Use: * * <pre> * Serializer serializer = new Persister(new OpenmrsCycleStrategy()); * serializer.write(someObject, outputStream); * </pre> * * @deprecated - Use OpenmrsSerializer from Context.getSerializationService.getDefaultSerializer() */ @Deprecated public class OpenmrsCycleStrategy extends CycleStrategy { private static final Log log = LogFactory.getLog(OpenmrsCycleStrategy.class); /** * If true, the serialization will be kept to a minimum as decided in the methods marked with @Replace * annotations */ private boolean shortSerialization = false; /** * Overriding the default constructor so we can set our label logic onto the strategy. This * label logic will convert hibernate proxy class names to their equivalent pojo class names */ public OpenmrsCycleStrategy() { super(); setLabelLogic(new OpenmrsLabelLogic()); setReferenceLogic(new OpenmrsReferenceLogic()); } /** * Custom constructor to set whether this serialization will be a short one or not. The * * @param isShortSerialization */ public OpenmrsCycleStrategy(boolean isShortSerialization) { this(); this.shortSerialization = isShortSerialization; } /** * @see org.simpleframework.xml.graph.CycleStrategy#setRoot(java.lang.Class, java.lang.Object, * org.simpleframework.xml.stream.NodeMap, java.util.Map) */ @Override @SuppressWarnings("unchecked") public boolean setRoot(Class field, Object value, NodeMap node, Map map) { // if the constructor was called to mark this as a short serialization, // put that property into the session map so that the @Replace methods // have access and know about it. if (shortSerialization) map.put(OpenmrsConstants.SHORT_SERIALIZATION, Boolean.TRUE); log.debug("Setting root as class: " + field); // continue as normal return super.setRoot(field, value, node, map); } }