blob: 38cbb4e3c47f1d325f16c08dcefdc276cf164a4a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sis.referencing.factory;
import org.opengis.referencing.AuthorityFactory;
/**
* Thrown when a whole factory can not be created because a resource is missing.
* The most common case is when the {@link org.apache.sis.referencing.factory.sql.EPSGFactory}
* has no connection to an EPSG database.
*
* <h2>Relationship with other exceptions</h2>
* This exception means that the whole factory is unusable.
* By contrast, {@link MissingFactoryResourceException} means that at least one particular object
* can not be created, but other objects may be okay.
*
* @author Martin Desruisseaux (IRD, Geomatys)
* @version 0.7
*
* @see ConcurrentAuthorityFactory#newDataAccess()
*
* @since 0.7
* @module
*/
public class UnavailableFactoryException extends MissingFactoryResourceException {
/**
* Serial number for inter-operability with different versions.
*/
private static final long serialVersionUID = -661925454228937249L;
/**
* The factory that can not perform its work, or {@code null} if unknown.
*/
private AuthorityFactory factory;
/**
* Construct an exception with no detail message.
*/
public UnavailableFactoryException() {
}
/**
* Construct an exception with the specified detail message.
*
* @param message the detail message. The detail message is saved
* for later retrieval by the {@link #getMessage()} method.
*/
public UnavailableFactoryException(String message) {
super(message);
}
/**
* Construct an exception with the specified detail message and cause.
* The cause is the exception thrown in the underlying database
* (e.g. {@link java.io.IOException} or {@link java.sql.SQLException}).
*
* @param message the detail message. The detail message is saved
* for later retrieval by the {@link #getMessage()} method.
* @param cause the cause for this exception. The cause is saved
* for later retrieval by the {@link #getCause()} method.
*/
public UnavailableFactoryException(String message, Throwable cause) {
super(message, cause);
}
/**
* Specifies which factory is unavailable. This information can be provided when the exception occurred
* at some later stage <em>after</em> the factory construction (never inside the factory constructor),
* for example the first time that the factory tried to create an object.
*
* <div class="note"><b>Example:</b>
* {@link org.apache.sis.referencing.factory.sql.EPSGFactory} may have been successfully created with
* a valid {@link javax.sql.DataSource}. But the call to {@link javax.sql.DataSource#getConnection()}
* happens only later (the first time that user invokes a method requiring a search in the database).
* In case of failure to connect to the database, user may discover late that the factory is actually
* unavailable. User may want to be informed about which factory is unavailable, for example in order
* to remove it from the list of factory managed by {@link MultiAuthoritiesFactory}.</div>
*
* @param factory the factory which is unavailable.
*/
public void setUnavailableFactory(final AuthorityFactory factory) {
this.factory = factory;
}
/**
* Returns the factory which has been found unavailable, or {@code null} if unspecified.
* See {@link #setUnavailableFactory(AuthorityFactory)} for more details.
*
* @return the factory that should be considered as unavailable.
*/
public AuthorityFactory getUnavailableFactory() {
return factory;
}
}