/*
 *  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.easyant.man;

import org.apache.easyant.core.descriptor.PropertyDescriptor;
import org.apache.easyant.core.report.ExtensionPointReport;
import org.apache.easyant.core.report.ParameterReport;
import org.apache.easyant.core.report.TargetReport;

/**
 * Implements support for -describe easyant switch.
 * 
 * This command searches for extension point, target, and properties by the supplied search name and returns result for
 * each of these sequentially.
 */
public class Describe extends EasyantOption {

    private static final long serialVersionUID = 1L;

    public Describe() throws IllegalArgumentException {
        super("describe", true, "Describes extension point / target / property / parameters  specified by the argument");
        setStopBuild(true);
    }

    // convenient string constants
    private static final String NONE = "NONE";

    public void execute() {
        String target = getValue();
        if (target == null || target.length() == 0) {
            throw new IllegalArgumentException("No parameter specified for -describe parameter.");
        }

        getProject().log(
                LINE_SEP + "--- Available references for: " + target + " in current project: " + getProject().getName()
                        + " ---" + LINE_SEP);

        ExtensionPointReport extensionPointRep = getEareport().getExtensionPointReport(target);
        if (extensionPointRep != null) {
            getProject().log("\tExtension Point: " + target);
            getProject().log(
                    "\t\tDescription: "
                            + (extensionPointRep.getDescription() == null ? NONE : extensionPointRep.getDescription()));
            getProject().log(
                    "\t\tDepends: " + (extensionPointRep.getDepends() == null ? NONE : extensionPointRep.getDepends()));
            getProject().log(LINE_SEP + "\t\tFor information on targets attached to this extension-point, run:");
            getProject().log("\t\teasyant -listTargets " + target);
        } else {
            getProject().log("\tNo extension point found for name: " + target);
        }
        TargetReport targetRep = getEareport().getTargetReport(target);
        if (targetRep != null) {
            getProject().log("\tTarget: " + target);
            getProject().log(
                    "\t\tExtension Point: "
                            + (targetRep.getExtensionPoint() == null ? NONE : targetRep.getExtensionPoint()));
            getProject().log(
                    "\t\tDescription: " + (targetRep.getDescription() == null ? NONE : targetRep.getDescription()));
            getProject().log("\t\tDepends: " + (targetRep.getDepends() == null ? NONE : targetRep.getDepends()));
            getProject().log("\t\tIF: " + (targetRep.getIfCase() == null ? NONE : targetRep.getIfCase()));
            getProject().log("\t\tUNLESS: " + (targetRep.getUnlessCase() == null ? NONE : targetRep.getUnlessCase()));
        } else {
            getProject().log("\tNo Target found for name: " + target);
        }
        PropertyDescriptor prop = getEareport().getAvailableProperties().get(target);
        if (prop != null) {
            getProject().log("\tProperty: " + target);
            getProject().log("\t\tDescription: " + (prop.getDescription() == null ? NONE : prop.getDescription()));
            String defaultValue = prop.getDefaultValue() == null ? NONE : prop.getDefaultValue();
            getProject().log("\t\tDefault: " + defaultValue);
            getProject().log("\t\tRequired: " + prop.isRequired());
            String currentValue = prop.getValue() == null ? defaultValue : prop.getValue();
            getProject().log("\t\tCurrent value: " + currentValue);
            if (prop.getOwningTarget() != null) {
                getProject().log("\t\tDefined in :" + prop.getOwningTarget());
            }
        } else {
            getProject().log("\tNo Property found for name: " + target);
        }
        ParameterReport parameter = getEareport().getParameterReport(target);
        if (parameter != null) {
            getProject().log("\tName: " + target);
            getProject().log("\t\tType: " + parameter.getType());
            getProject().log("\t\tDescription: " + parameter.getDescription());
            getProject().log("\t\tRequired: " + parameter.isRequired());
            if (parameter.getOwningTarget() != null) {
                getProject().log("\t\tDefined in :" + parameter.getOwningTarget());
            }
        } else {
            getProject().log("\tNo Parameter found for name: " + target);
        }

        getProject().log(LINE_SEP + "--- End Of (Describe) ---");
    }

}

@@ -4631,26 +4631,26 @@
 %5CtDefined in
- 
 :
+ 
 %22 + prop.get
@@ -5264,18 +5264,18 @@
 fined in
- 
 :
+ 
 %22 + para

Fix minor typo in Describe man command