001package org.kuali.common.devops.heap;
002
003import static org.kuali.common.util.base.Precondition.checkMin;
004
005import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
006
007@JsonDeserialize(builder = Heap.Builder.class)
008public final class Heap {
009
010        private final long young;
011        private final long old;
012        private final long perm;
013
014        private Heap(Builder builder) {
015                this.young = builder.young;
016                this.old = builder.old;
017                this.perm = builder.perm;
018        }
019
020        public static Builder builder() {
021                return new Builder();
022        }
023
024        public static class Builder implements org.apache.commons.lang3.builder.Builder<Heap> {
025
026                private long young = -1;
027                private long old = -1;
028                private long perm = -1;
029
030                public Builder withYoung(long young) {
031                        this.young = young;
032                        return this;
033                }
034
035                public Builder withOld(long old) {
036                        this.old = old;
037                        return this;
038                }
039
040                public Builder withPerm(long perm) {
041                        this.perm = perm;
042                        return this;
043                }
044
045                @Override
046                public Heap build() {
047                        return validate(new Heap(this));
048                }
049
050                private static Heap validate(Heap instance) {
051                        checkMin(instance.perm, 0, "perm");
052                        checkMin(instance.old, 0, "old");
053                        checkMin(instance.young, 0, "young");
054                        return instance;
055                }
056        }
057
058        public long getYoung() {
059                return young;
060        }
061
062        public long getOld() {
063                return old;
064        }
065
066        public long getPerm() {
067                return perm;
068        }
069
070}