001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with 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,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019 package org.apache.directory.shared.ldap.schema.ldif.extractor;
020
021
022 import java.net.URL;
023 import java.util.ArrayList;
024 import java.util.Collections;
025 import java.util.Enumeration;
026 import java.util.List;
027
028
029 /**
030 * Exception for when we detect more than one unqiue schema LDIF file resource
031 * on the classpath.
032 *
033 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
034 * @version $Rev: 664295 $ $Date: 2008-06-07 10:48:16 +0300 (Sat, 07 Jun 2008) $
035 */
036 public class UniqueResourceException extends RuntimeException
037 {
038 private static final long serialVersionUID = 1L;
039
040 private final String resourceName;
041 private final List<URL> urls;
042 private final String resourceDescription;
043
044
045 public UniqueResourceException( String resourceName, String resourceDescription )
046 {
047 this( resourceName, null, resourceDescription );
048 }
049
050
051 public UniqueResourceException( String resourceName, List<URL> urls, String resourceDescription )
052 {
053 this.resourceName = resourceName;
054 this.urls = urls;
055 this.resourceDescription = resourceDescription;
056 }
057
058
059 public UniqueResourceException( String resourceName, URL first, Enumeration<URL> urlEnum, String resourceDescription )
060 {
061 this( resourceName, toList( first, urlEnum ), resourceDescription );
062 }
063
064
065 private static List<URL> toList( URL first, Enumeration<URL> urlEnum )
066 {
067 ArrayList<URL> urls = new ArrayList<URL>();
068 urls.add( first );
069 while( urlEnum.hasMoreElements() )
070 {
071 urls.add( urlEnum.nextElement() );
072 }
073 return urls;
074 }
075
076
077 public String getMessage()
078 {
079 StringBuffer buf = new StringBuffer( "Problem locating " ).append( resourceDescription ).append( "\n" );
080 if ( urls == null )
081 {
082 buf.append( "No resources named '" ).append( resourceName ).append( "' located on classpath" );
083 } else
084 {
085 buf.append( "Multiple copies of resource named '" ).append( resourceName ).append(
086 "' located on classpath at urls" );
087 for ( URL url : urls )
088 {
089 buf.append( "\n " ).append( url );
090 }
091 }
092 return buf.toString();
093 }
094
095
096 public String getResourceName()
097 {
098 return resourceName;
099 }
100
101
102 public List<URL> getUrls()
103 {
104 return Collections.unmodifiableList( urls );
105 }
106 }