/*
 * Copyright 2015-2017 Atomist Inc.
 *
 * 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.
 */

import { TreeNode, GraphNode, FormatInfo, PathExpressionEngine } from "@atomist/rug/tree/PathExpression";
import { ProjectContext } from "@atomist/rug/operations/ProjectEditor";
import { ProjectDecorating } from "./ProjectDecorating";
import { ProjectView } from "./ProjectView";
import { ArtifactContainerView } from "./ArtifactContainerView";
import { ChangeLogging } from "./ChangeLogging";
import { MutableView } from "./MutableView";
export { JavaProject };

/**
 * Java project
 */
interface JavaProject extends ProjectDecorating, ProjectView, ArtifactContainerView, ChangeLogging, MutableView {

    /**
     * Is this a Maven project?
     *
     * @returns {boolean}
     */
    isMaven(): boolean;

    /**
     * Is this a Spring project?
     *
     * @returns {boolean}
     */
    isSpring(): boolean;

    /**
     * Is this a Spring Boot project?
     *
     * @returns {boolean}
     */
    isSpringBoot(): boolean;

    /**
     * Return the number of Java files in this module
     *
     * @returns {number}
     */
    javaFileCount(): number;

    /**
     * List the packages in this project
     *
     * @returns {any[]}
     */
    packages(): any[];

    /**
     * Rename the given package. All package under it will also be renamed
     *
     * @param oldPackage {string} Old package name
     * @param newPackage {string} The new package name
     */
    renamePackage(oldPackage: string, newPackage: string): void;

}
