001/** 002 * Copyright 2005-2016 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.devtools.jpa.eclipselink.conv.parser.helper.resolver; 017 018import java.util.ArrayList; 019import java.util.Collection; 020import java.util.HashMap; 021import java.util.Map; 022 023public final class BidirectionalOwnerRegistry { 024 025 private final Map<String, Collection<String>> manyToManyOwnerAssignment = new HashMap<String, Collection<String>>(); 026 private final Map<String, Collection<String>> manyToOneOwnerAssignment = new HashMap<String, Collection<String>>(); 027 028 private static class BidirectionalOwnerRegistryHolder { 029 static final BidirectionalOwnerRegistry INSTANCE = new BidirectionalOwnerRegistry(); 030 } 031 032 private BidirectionalOwnerRegistry() { 033 //for singleton 034 } 035 036 public static BidirectionalOwnerRegistry getInstance() { 037 return BidirectionalOwnerRegistryHolder.INSTANCE; 038 } 039 040 public boolean isOwnerThisClassManyToMany(String thisClass, String itemClass) { 041 final Collection<String> ownedByThisClass = manyToManyOwnerAssignment.get(thisClass); 042 return ownedByThisClass != null && ownedByThisClass.contains(itemClass); 043 } 044 045 public boolean isOwnerItemClassManyToMany(String thisClass, String itemClass) { 046 final Collection<String> ownedByItemClass = manyToManyOwnerAssignment.get(itemClass); 047 return ownedByItemClass != null && ownedByItemClass.contains(thisClass); 048 } 049 050 public void assignThisClassAsOwnerManyToMany(String thisClass, String itemClass) { 051 Collection<String> ownedByThisClass = manyToManyOwnerAssignment.get(thisClass); 052 if (ownedByThisClass == null) { 053 ownedByThisClass = new ArrayList<String>(); 054 } 055 056 ownedByThisClass.add(itemClass); 057 manyToManyOwnerAssignment.put(thisClass, ownedByThisClass); 058 } 059 060 public boolean isOwnerThisClassManyToOne(String thisClass, String itemClass) { 061 final Collection<String> ownedByThisClass = manyToOneOwnerAssignment.get(thisClass); 062 return ownedByThisClass != null && ownedByThisClass.contains(itemClass); 063 } 064 065 public boolean isOwnerItemClassManyToOne(String thisClass, String itemClass) { 066 final Collection<String> ownedByItemClass = manyToOneOwnerAssignment.get(itemClass); 067 return ownedByItemClass != null && ownedByItemClass.contains(thisClass); 068 } 069 070 public void assignItemClassAsOwnerManyToOne(String thisClass, String itemClass) { 071 Collection<String> ownedByItemClass = manyToOneOwnerAssignment.get(itemClass); 072 if (ownedByItemClass == null) { 073 ownedByItemClass = new ArrayList<String>(); 074 } 075 076 ownedByItemClass.add(thisClass); 077 manyToOneOwnerAssignment.put(itemClass, ownedByItemClass); 078 } 079}