1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.commons.betwixt.strategy; 19 20 import org.apache.commons.betwixt.expression.Context; 21 22 /** 23 * Pluggable strategy for id storage management. 24 * It is possible to use this strategy for innovative 25 * active storage storage strategies as well as passive ones. 26 * For example, it is possible to have some beans map to 27 * references without ever being fully mapped. 28 * 29 * @author <a href="mailto:christian@wilde-welt.de">Christian Aust </a> 30 * @since 0.7 31 */ 32 public abstract class IdStoringStrategy { 33 34 /** 35 * Default storage strategy 36 * 37 * @deprecated do not use this singleton since it 38 * creates a static Map of all objects ever written. 39 * Use {@link #createDefault} instead 40 */ 41 public static IdStoringStrategy DEFAULT = new DefaultIdStoringStrategy(); 42 43 /** 44 * Factory method creates the default <code>Betwixt</code> implementation. 45 * The implementation created may vary if the default implementation changes. 46 * @return <code>IdStoringStrategy</code> used as default 47 * @since 0.8 48 */ 49 public static IdStoringStrategy createDefault() { 50 return new DefaultIdStoringStrategy(); 51 } 52 53 54 /** 55 * Retrieves a reference for the given instance. 56 * If a not null value is returned from this method, 57 * then the bean content will not be written. 58 * Use {@link org.apache.commons.betwixt.io.IDGenerator} strategy to vary the values 59 * written for a bean. 60 * 61 * @param context 62 * current context, not null 63 * @param bean 64 * the instance, not null 65 * @return id as String when this bean has already been reference, 66 * or null to indicate that this bean is not yet reference 67 */ 68 public abstract String getReferenceFor(Context context, Object bean); 69 70 /** 71 * Stores an instance reference for later retrieval. 72 * This method is shared by writing and reading. 73 * 74 * @param context 75 * current context, not null 76 * @param bean 77 * the instance, not null 78 * @param id 79 * the id to use 80 */ 81 public abstract void setReference(Context context, Object bean, String id); 82 83 /** 84 * Gets an object matching the given reference. 85 * @param context <code>Context</code>, not null 86 * @param id the reference id 87 * @return an bean matching the given reference, 88 * or null if there is no bean matching the given reference 89 */ 90 public abstract Object getReferenced(Context context, String id); 91 92 /** 93 * Reset to the initial state. 94 * 95 */ 96 public abstract void reset(); 97 98 }