/**
 * 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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.hadoop.fs.ozone;

/**
 * Minimum set of Ozone key information attributes.
 * <p>
 * This class doesn't depend on any other ozone class just on primitive
 * java types. It could be used easily in the signature of OzoneClientAdapter
 * as even if a separated class loader is loaded it it won't cause any
 * dependency problem.
 */
public class BasicKeyInfo {

  private String name;

  private long modificationTime;

  private long dataSize;

  public BasicKeyInfo(String name, long modificationTime, long size) {
    this.name = name;
    this.modificationTime = modificationTime;
    this.dataSize = size;
  }

  public String getName() {
    return name;
  }

  public long getModificationTime() {
    return modificationTime;
  }

  public long getDataSize() {
    return dataSize;
  }
}
