/**
 * Licensed 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.jboss.loom.ex;

import org.jboss.loom.actions.IMigrationAction;

/**
 * @author Roman Jakubco
 */
public class ActionException extends MigrationException {
    
    
    private final IMigrationAction action;
    
    
    public ActionException(IMigrationAction action, String message) {
        super(message);
        this.action = action;
    }

    public ActionException(IMigrationAction action, String message, Throwable cause) {
        super(message, cause);
        this.action = action;
    }

    public ActionException(IMigrationAction action, Throwable cause) {
        super(cause);
        this.action = action;
    }


    public IMigrationAction getAction() {
        return action;
    }
    
}// class

/**
 * Licensed 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.jboss.loom.ex;

import org.jboss.loom.actions.IMigrationAction;

/**
 * @author Roman Jakubco
 */
public class ActionException extends MigrationException {
    
    
    private final IMigrationAction action;
    
    
    public ActionException(IMigrationAction action, String message) {
        super(message);
        this.action = action;
    }

    public ActionException(IMigrationAction action, String message, Throwable cause) {
        super(message, cause);
        this.action = action;
    }

    public ActionException(IMigrationAction action, Throwable cause) {
        super(cause);
        this.action = action;
    }


    public IMigrationAction getAction() {
        return action;
    }
    
    

    public String formatDescription() {
        IMigrationAction action = this.getAction();
        // Header
        String description = 
                  "\n    Migration action which caused the failure: "
                + "  (from " + action.getFromMigrator().getSimpleName() + ")";
        // StackTraceElement
        if( action.getOriginStackTrace() != null )
            description += "\n\tat " + action.getOriginStackTrace().toString();
        // Description
        description += "\n    " + action.toDescription();
        // Origin message
        if( action.getOriginMessage() != null )
            description += "\n    Purpose of the action: " + action.getOriginMessage();
        return description;
    }

    
    
}// class

Add ActionException#formatDescription()