001: /*
002: * Copyright 2004-2007 the original author or authors.
003: *
004: * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0
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: */
016: package org.springframework.webflow.engine.builder;
017:
018: import org.springframework.util.ClassUtils;
019: import org.springframework.util.StringUtils;
020: import org.springframework.webflow.core.FlowException;
021: import org.springframework.webflow.execution.FlowExecutionException;
022:
023: /**
024: * A flow artifact lookup exception is thrown when an artifact (such as a flow, state,
025: * action, etc.) required by the webflow system cannot be obtained.
026: * <p>
027: * Flow artifact lookup exceptions indicate unrecoverable problems with the flow
028: * definition, e.g. a required action of a flow cannot be found. They're not used
029: * to signal problems related to execution of a client request. A
030: * {@link FlowExecutionException} is used for that.
031: *
032: * @see org.springframework.webflow.execution.FlowExecutionException
033: *
034: * @author Keith Donald
035: * @author Erwin Vervaet
036: */
037: public class FlowArtifactLookupException extends FlowException {
038:
039: /**
040: * The id of the artifact that could not be retrieved.
041: */
042: private String artifactId;
043:
044: /**
045: * The type of artifact that could not be retrieved.
046: */
047: private Class artifactType;
048:
049: /**
050: * Create a new flow artifact lookup exception.
051: * @param artifactId the id of the artifact
052: * @param artifactType the expected artifact type
053: */
054: public FlowArtifactLookupException(String artifactId,
055: Class artifactType) {
056: this (artifactId, artifactType, null, null);
057: }
058:
059: /**
060: * Create a new flow artifact lookup exception.
061: * @param artifactId the id of the artifact
062: * @param artifactType the expected artifact type
063: * @param cause the underlying cause of this exception
064: */
065: public FlowArtifactLookupException(String artifactId,
066: Class artifactType, Throwable cause) {
067: this (artifactId, artifactType, null, cause);
068: }
069:
070: /**
071: * Create a new flow artifact lookup exception.
072: * @param artifactId the id of the artifact
073: * @param artifactType the expected artifact type
074: * @param message descriptive message
075: */
076: public FlowArtifactLookupException(String artifactId,
077: Class artifactType, String message) {
078: this (artifactId, artifactType, message, null);
079: }
080:
081: /**
082: * Create a new flow artifact lookup exception.
083: * @param artifactId the id of the artifact
084: * @param artifactType the expected artifact type
085: * @param message descriptive message
086: * @param cause the underlying cause of this exception
087: */
088: public FlowArtifactLookupException(String artifactId,
089: Class artifactType, String message, Throwable cause) {
090: super ((StringUtils.hasText(message) ? message
091: : "Unable to obtain a "
092: + ClassUtils.getShortName(artifactType)
093: + " flow artifact with id '" + artifactId
094: + "': make sure there is a valid ["
095: + artifactType + "] exported with this id"),
096: cause);
097: this .artifactType = artifactType;
098: this .artifactId = artifactId;
099: }
100:
101: /**
102: * Returns the id of the artifact that cannot be found.
103: */
104: public String getArtifactId() {
105: return artifactId;
106: }
107:
108: /**
109: * Returns the expected artifact type.
110: */
111: public Class getArtifactType() {
112: return artifactType;
113: }
114: }
|