001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.hadoop.hdfs.protocol;
019    
020    import org.apache.hadoop.classification.InterfaceAudience;
021    import org.apache.hadoop.classification.InterfaceStability;
022    
023    /**
024     * Describes a path-based cache directive.
025     */
026    @InterfaceStability.Evolving
027    @InterfaceAudience.Public
028    public class CacheDirectiveStats {
029      public static class Builder {
030        private long bytesNeeded;
031        private long bytesCached;
032        private long filesNeeded;
033        private long filesCached;
034        private boolean hasExpired;
035    
036        /**
037         * Builds a new CacheDirectiveStats populated with the set properties.
038         * 
039         * @return New CacheDirectiveStats.
040         */
041        public CacheDirectiveStats build() {
042          return new CacheDirectiveStats(bytesNeeded, bytesCached, filesNeeded,
043              filesCached, hasExpired);
044        }
045    
046        /**
047         * Creates an empty builder.
048         */
049        public Builder() {
050        }
051    
052        /**
053         * Sets the bytes needed by this directive.
054         * 
055         * @param bytesNeeded The bytes needed.
056         * @return This builder, for call chaining.
057         */
058        public Builder setBytesNeeded(long bytesNeeded) {
059          this.bytesNeeded = bytesNeeded;
060          return this;
061        }
062    
063        /**
064         * Sets the bytes cached by this directive.
065         * 
066         * @param bytesCached The bytes cached.
067         * @return This builder, for call chaining.
068         */
069        public Builder setBytesCached(long bytesCached) {
070          this.bytesCached = bytesCached;
071          return this;
072        }
073    
074        /**
075         * Sets the files needed by this directive.
076         * @param filesNeeded The number of files needed
077         * @return This builder, for call chaining.
078         */
079        public Builder setFilesNeeded(long filesNeeded) {
080          this.filesNeeded = filesNeeded;
081          return this;
082        }
083    
084        /**
085         * Sets the files cached by this directive.
086         * 
087         * @param filesCached The number of files cached.
088         * @return This builder, for call chaining.
089         */
090        public Builder setFilesCached(long filesCached) {
091          this.filesCached = filesCached;
092          return this;
093        }
094    
095        /**
096         * Sets whether this directive has expired.
097         * 
098         * @param hasExpired if this directive has expired
099         * @return This builder, for call chaining.
100         */
101        public Builder setHasExpired(boolean hasExpired) {
102          this.hasExpired = hasExpired;
103          return this;
104        }
105      }
106    
107      private final long bytesNeeded;
108      private final long bytesCached;
109      private final long filesNeeded;
110      private final long filesCached;
111      private final boolean hasExpired;
112    
113      private CacheDirectiveStats(long bytesNeeded, long bytesCached,
114          long filesNeeded, long filesCached, boolean hasExpired) {
115        this.bytesNeeded = bytesNeeded;
116        this.bytesCached = bytesCached;
117        this.filesNeeded = filesNeeded;
118        this.filesCached = filesCached;
119        this.hasExpired = hasExpired;
120      }
121    
122      /**
123       * @return The bytes needed.
124       */
125      public long getBytesNeeded() {
126        return bytesNeeded;
127      }
128    
129      /**
130       * @return The bytes cached.
131       */
132      public long getBytesCached() {
133        return bytesCached;
134      }
135    
136      /**
137       * @return The number of files needed.
138       */
139      public long getFilesNeeded() {
140        return filesNeeded;
141      }
142    
143      /**
144       * @return The number of files cached.
145       */
146      public long getFilesCached() {
147        return filesCached;
148      }
149    
150      /**
151       * @return Whether this directive has expired.
152       */
153      public boolean hasExpired() {
154        return hasExpired;
155      }
156    
157      @Override
158      public String toString() {
159        StringBuilder builder = new StringBuilder();
160        builder.append("{");
161        builder.append("bytesNeeded: ").append(bytesNeeded);
162        builder.append(", ").append("bytesCached: ").append(bytesCached);
163        builder.append(", ").append("filesNeeded: ").append(filesNeeded);
164        builder.append(", ").append("filesCached: ").append(filesCached);
165        builder.append(", ").append("hasExpired: ").append(hasExpired);
166        builder.append("}");
167        return builder.toString();
168      }
169    };