com.googlesource.gerrit.plugins.supermanifest.JiriProjects.java Source code

Java tutorial

Introduction

Here is the source code for com.googlesource.gerrit.plugins.supermanifest.JiriProjects.java

Source

// Copyright (C) 2017 Google 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.

package com.googlesource.gerrit.plugins.supermanifest;

import java.util.Arrays;
import java.util.Comparator;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import org.apache.commons.lang.StringUtils;

class JiriProjects {
    @XmlElement(name = "project")
    private Project[] projects;

    public JiriProjects() {
        projects = new Project[0];
    }

    /** @return the projects */
    public Project[] getProjects() {
        return projects;
    }

    public void sortByPath() {
        Arrays.sort(projects, new SortbyPath());
    }

    public String toSubmodules() {
        StringBuffer buf = new StringBuffer();
        sortByPath();
        for (Project p : projects) {
            buf.append(p.toSubmodules());
            buf.append("\n");
        }
        return buf.toString();
    }

    public JiriProjects(Project[] projects) {
        this.projects = projects;
    }

    @Override
    public String toString() {
        StringBuffer buf = new StringBuffer();
        if (projects.length > 0) {
            buf.append("projects:\n");
            for (Project p : projects) {
                buf.append(StringUtil.addTab(p.toString()));
            }
        }
        return buf.toString();
    }

    static class Project {
        @XmlAttribute(required = true)
        private String name;

        @XmlAttribute(required = true)
        private String path;

        @XmlAttribute(required = true)
        private String remote;

        @XmlAttribute
        private String remotebranch;

        @XmlAttribute
        private String revision;

        @XmlAttribute
        private int historydepth;

        /** @return the name */
        public String getName() {
            return name;
        }

        /** @return the path */
        public String getPath() {
            return path;
        }

        /** @return the remote */
        public String getRemote() {
            return remote;
        }

        /** @return the historydepth */
        public int getHistorydepth() {
            return historydepth;
        }

        public String getRef() {
            if (!revision.isEmpty()) {
                return revision;
            }
            return remotebranch;
        }

        public Project() {
            name = "";
            path = "";
            remote = "";
            remotebranch = "";
            revision = "";
            historydepth = 0;
        }

        public void fillDefault() {
            if (remotebranch.isEmpty()) {
                remotebranch = "master";
            }
        }

        @Override
        public String toString() {
            return String.format(
                    "project:\n\tname: %s\n\tpath: %s\n\tremote: %s\n\tremotebranch: %s\n\trevision: %s", name,
                    path, remote, remotebranch, revision);
        }

        @Override
        public boolean equals(Object obj) {
            Project p = (Project) obj;

            if (!name.equals(p.name)) {
                return false;
            }
            if (!path.equals(p.path)) {
                return false;
            }
            if (!remote.equals(p.remote)) {
                return false;
            }
            if (!remotebranch.equals(p.remotebranch)) {
                return false;
            }
            if (!revision.equals(p.revision)) {
                return false;
            }

            return true;
        }

        public String toSubmodules() {
            StringBuffer buf = new StringBuffer(String.format("[submodule \"%s\"]", name));
            buf.append("\n\tpath = " + path);
            buf.append("\n\turl = " + remote);
            String branch = "";
            if (!remotebranch.isEmpty()) {
                branch = remotebranch;
            }

            if (!revision.isEmpty()) {
                branch = revision;
            }

            if (!branch.isEmpty()) {
                buf.append("\n\tbranch = " + branch);
            }

            buf.append("\n");
            return buf.toString();
        }

        public String Key() {
            return name + "=" + StringUtils.strip(remote, "/");
        }

        /** @param revision the revision to set */
        public void setRevision(String revision) {
            this.revision = revision;
        }
    }

    static class SortbyPath implements Comparator<Project> {
        @Override
        public int compare(Project a, Project b) {
            String p1 = StringUtil.stripAndAddCharsAtEnd(a.getPath(), "/");
            String p2 = StringUtil.stripAndAddCharsAtEnd(b.getPath(), "/");
            return p1.compareTo(p2);
        }
    }
}