1 package org.apache.ojb.broker; 2 3 /* Copyright 2003-2005 The Apache Software Foundation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * 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 import org.apache.ojb.broker.core.proxy.ProxyHelper; 19 import org.apache.ojb.broker.metadata.CollectionDescriptor; 20 21 /** 22 * Helper class to handle single m:n relation entries (m:n indirection table entries). 23 * <br/> 24 * The "left / right" notation is only used to differ both sides of the relation. 25 * 26 * @author Leandro Rodrigo Saad Cruz 27 * @version $Id: MtoNImplementor.java,v 1.1 2007-08-24 22:17:36 ewestfal Exp $ 28 */ 29 public class MtoNImplementor 30 { 31 private Object leftObject; 32 private Object rightObject; 33 private Class leftClass; 34 private Class rightClass; 35 private CollectionDescriptor leftDescriptor; 36 37 /** 38 * Creates a new instance. 39 * 40 * @param pb The currently used {@link PersistenceBroker} instance 41 * @param leftDescriptor The collection descriptor for the left side 42 * @param left The left side object 43 * @param right The right side object 44 * @deprecated 45 */ 46 public MtoNImplementor(PersistenceBroker pb, CollectionDescriptor leftDescriptor, Object left, Object right) 47 { 48 init(leftDescriptor, left, right); 49 } 50 51 /** 52 * Creates a new instance. 53 * 54 * @param pb The currently used {@link PersistenceBroker} instance 55 * @param leftFieldName Field name of the left m:n reference 56 * @param left The left side object 57 * @param right The right side object 58 */ 59 public MtoNImplementor(PersistenceBroker pb, String leftFieldName, Object left, Object right) 60 { 61 if(left == null || right == null) 62 { 63 throw new IllegalArgumentException("both objects must exist"); 64 } 65 CollectionDescriptor cod = pb.getClassDescriptor(ProxyHelper.getRealClass(left)).getCollectionDescriptorByName(leftFieldName); 66 init(cod, left, right); 67 } 68 69 /** 70 * Creates a new instance. 71 * 72 * @param leftDescriptor The collection descriptor for the left side 73 * @param left The left side object 74 * @param right The right side object 75 * @deprecated 76 */ 77 public MtoNImplementor(CollectionDescriptor leftDescriptor, Object left, Object right) 78 { 79 init(leftDescriptor, left, right); 80 } 81 82 private void init(CollectionDescriptor leftDescriptor, Object left, Object right) 83 { 84 if(left == null || right == null) 85 { 86 throw new IllegalArgumentException("both objects must exist"); 87 } 88 this.leftDescriptor = leftDescriptor; 89 leftObject = left; 90 rightObject = right; 91 leftClass = ProxyHelper.getRealClass(leftObject); 92 rightClass = ProxyHelper.getRealClass(rightObject); 93 } 94 95 /** 96 * Returns the collection descriptor for the left side of the m:n collection. 97 * 98 * @return The collection descriptor 99 */ 100 public CollectionDescriptor getLeftDescriptor() 101 { 102 return leftDescriptor; 103 } 104 105 /** 106 * Returns the class of the left side of the m:n collection. 107 * 108 * @return The class of the left side 109 */ 110 public Class getLeftClass() 111 { 112 return leftClass; 113 } 114 115 /** 116 * Returns the class of the right side of the m:n collection. 117 * 118 * @return The class of the right side 119 */ 120 public Class getRightClass() 121 { 122 return rightClass; 123 } 124 125 /** 126 * Returns the object for the left side of the m:n collection. 127 * 128 * @return The object for the left side 129 */ 130 public Object getLeftObject() 131 { 132 return leftObject; 133 } 134 135 /** 136 * Returns the object for the right side of the m:n collection. 137 * 138 * @return The object for the right side 139 */ 140 public Object getRightObject() 141 { 142 return rightObject; 143 } 144 }