001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package org.apache.geronimo.gbean; 020 021 import java.io.Serializable; 022 import java.util.Collections; 023 import java.util.Iterator; 024 import java.util.LinkedHashSet; 025 import java.util.Set; 026 027 /** 028 * @version $Rev: 470597 $ $Date: 2006-11-02 15:30:55 -0800 (Thu, 02 Nov 2006) $ 029 */ 030 public class ReferencePatterns implements Serializable { 031 private static final long serialVersionUID = 1888371271299507818L; 032 033 private final Set patterns; 034 private final AbstractName abstractName; 035 036 public ReferencePatterns(Set patterns) { 037 this.patterns = new LinkedHashSet(); 038 for (Iterator iterator = patterns.iterator(); iterator.hasNext();) { 039 Object pattern = iterator.next(); 040 if (pattern instanceof AbstractName) { 041 AbstractName name = (AbstractName) pattern; 042 this.patterns.add(new AbstractNameQuery(name)); 043 } else if (pattern instanceof AbstractNameQuery) { 044 AbstractNameQuery nameQuery = (AbstractNameQuery) pattern; 045 this.patterns.add(nameQuery); 046 } else { 047 throw new IllegalArgumentException("Unknown pattern type: " + pattern); 048 } 049 } 050 this.abstractName = null; 051 } 052 053 public ReferencePatterns(AbstractNameQuery abstractNameQuery) { 054 this.patterns = Collections.singleton(abstractNameQuery); 055 this.abstractName = null; 056 } 057 058 public ReferencePatterns(AbstractName abstractName) { 059 if (abstractName == null) { 060 throw new IllegalArgumentException("parameter abstractName is null"); 061 } 062 this.abstractName = abstractName; 063 this.patterns = null; 064 } 065 066 public Set getPatterns() { 067 if (patterns == null) { 068 throw new IllegalStateException("This is resolved to: " + abstractName); 069 } 070 return patterns; 071 } 072 073 public AbstractName getAbstractName() { 074 if (abstractName == null) { 075 throw new IllegalStateException("This is not resolved with patterns: " + patterns); 076 } 077 return abstractName; 078 } 079 080 public boolean isResolved() { 081 return abstractName != null; 082 } 083 084 public String toString() { 085 if (abstractName != null) { 086 return abstractName.toString(); 087 } else { 088 return patterns.toString(); 089 } 090 } 091 092 public boolean equals(Object other) { 093 if (other instanceof ReferencePatterns) { 094 ReferencePatterns otherRefPat = (ReferencePatterns) other; 095 if (abstractName != null) { 096 return abstractName.equals(otherRefPat.abstractName); 097 } 098 return patterns.equals(otherRefPat.patterns); 099 } 100 return false; 101 } 102 103 public int hashCode() { 104 if (abstractName != null) { 105 return abstractName.hashCode(); 106 } 107 return patterns.hashCode(); 108 } 109 }