001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.betwixt.strategy; 019 020 import org.apache.commons.betwixt.expression.Context; 021 022 /** 023 * Pluggable strategy for id storage management. 024 * It is possible to use this strategy for innovative 025 * active storage storage strategies as well as passive ones. 026 * For example, it is possible to have some beans map to 027 * references without ever being fully mapped. 028 * 029 * @author <a href="mailto:christian@wilde-welt.de">Christian Aust </a> 030 * @since 0.7 031 */ 032 public abstract class IdStoringStrategy { 033 034 /** 035 * Default storage strategy 036 * 037 * @deprecated do not use this singleton since it 038 * creates a static Map of all objects ever written. 039 * Use {@link #createDefault} instead 040 */ 041 public static IdStoringStrategy DEFAULT = new DefaultIdStoringStrategy(); 042 043 /** 044 * Factory method creates the default <code>Betwixt</code> implementation. 045 * The implementation created may vary if the default implementation changes. 046 * @return <code>IdStoringStrategy</code> used as default 047 * @since 0.8 048 */ 049 public static IdStoringStrategy createDefault() { 050 return new DefaultIdStoringStrategy(); 051 } 052 053 054 /** 055 * Retrieves a reference for the given instance. 056 * If a not null value is returned from this method, 057 * then the bean content will not be written. 058 * Use {@link org.apache.commons.betwixt.io.IDGenerator} strategy to vary the values 059 * written for a bean. 060 * 061 * @param context 062 * current context, not null 063 * @param bean 064 * the instance, not null 065 * @return id as String when this bean has already been reference, 066 * or null to indicate that this bean is not yet reference 067 */ 068 public abstract String getReferenceFor(Context context, Object bean); 069 070 /** 071 * Stores an instance reference for later retrieval. 072 * This method is shared by writing and reading. 073 * 074 * @param context 075 * current context, not null 076 * @param bean 077 * the instance, not null 078 * @param id 079 * the id to use 080 */ 081 public abstract void setReference(Context context, Object bean, String id); 082 083 /** 084 * Gets an object matching the given reference. 085 * @param context <code>Context</code>, not null 086 * @param id the reference id 087 * @return an bean matching the given reference, 088 * or null if there is no bean matching the given reference 089 */ 090 public abstract Object getReferenced(Context context, String id); 091 092 /** 093 * Reset to the initial state. 094 * 095 */ 096 public abstract void reset(); 097 098 }