blob: 3d1fd881d1b56871d034942427c09d2f515f7da8 [file] [log] [blame]
// Copyright 2016 Google Inc. All rights reserved.
//
// 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.google.archivepatcher.applier;
import com.google.archivepatcher.shared.PatchConstants;
import com.google.archivepatcher.shared.PatchConstants.DeltaFormat;
import com.google.archivepatcher.shared.TypedRange;
/**
* Describes all of the information needed to apply a single delta operation - the format of the
* delta, the ranges in the delta-friendly old and new files that serve as inputs and outputs, and
* the number of bytes that the delta comprises in the patch stream.
*/
public class DeltaDescriptor {
/**
* The format of the delta.
*/
private final PatchConstants.DeltaFormat format;
/**
* The work range for the delta-friendly old file.
*/
private final TypedRange<Void> deltaFriendlyOldFileRange;
/**
* The work range for the delta-friendly new file.
*/
private final TypedRange<Void> deltaFriendlyNewFileRange;
/**
* The number of bytes of delta data in the patch stream.
*/
private final long deltaLength;
/**
* Constructs a new descriptor having the specified data.
* @param format the format of the delta
* @param deltaFriendlyOldFileRange the work range for the delta-friendly old file
* @param deltaFriendlyNewFileRange the work range for the delta-friendly new file
* @param deltaLength the number of bytes of delta data in the patch stream
*/
public DeltaDescriptor(
DeltaFormat format,
TypedRange<Void> deltaFriendlyOldFileRange,
TypedRange<Void> deltaFriendlyNewFileRange,
long deltaLength) {
this.format = format;
this.deltaFriendlyOldFileRange = deltaFriendlyOldFileRange;
this.deltaFriendlyNewFileRange = deltaFriendlyNewFileRange;
this.deltaLength = deltaLength;
}
/**
* Returns the format of the delta.
* @return as described
*/
public PatchConstants.DeltaFormat getFormat() {
return format;
}
/**
* Returns the work range for the delta-friendly old file.
* @return as described
*/
public TypedRange<Void> getDeltaFriendlyOldFileRange() {
return deltaFriendlyOldFileRange;
}
/**
* Returns the work range for the delta-friendly new file.
* @return as described
*/
public TypedRange<Void> getDeltaFriendlyNewFileRange() {
return deltaFriendlyNewFileRange;
}
/**
* Returns the number of bytes of delta data in the patch stream.
* @return as described
*/
public long getDeltaLength() {
return deltaLength;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result =
prime * result
+ ((deltaFriendlyNewFileRange == null) ? 0 : deltaFriendlyNewFileRange.hashCode());
result =
prime * result
+ ((deltaFriendlyOldFileRange == null) ? 0 : deltaFriendlyOldFileRange.hashCode());
result = prime * result + (int) (deltaLength ^ (deltaLength >>> 32));
result = prime * result + ((format == null) ? 0 : format.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
DeltaDescriptor other = (DeltaDescriptor) obj;
if (deltaFriendlyNewFileRange == null) {
if (other.deltaFriendlyNewFileRange != null) return false;
} else if (!deltaFriendlyNewFileRange.equals(other.deltaFriendlyNewFileRange)) return false;
if (deltaFriendlyOldFileRange == null) {
if (other.deltaFriendlyOldFileRange != null) return false;
} else if (!deltaFriendlyOldFileRange.equals(other.deltaFriendlyOldFileRange)) return false;
if (deltaLength != other.deltaLength) return false;
if (format != other.format) return false;
return true;
}
}