blob: 951936e4b1629afcc465949cb9092bfd7d72575e [file] [log] [blame]
/*
* 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
*
* https://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 org.apache.ivy.core.report;
import java.io.File;
import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
/**
* Report on the download of an artifact from a repository to a local (cached) file.
* <p>
* Note that depending on cache implementation, the artifact may not be actually downloaded, but
* used directly from its original location.
* </p>
*/
public class ArtifactDownloadReport {
/**
* download details used when the download "fails" when the artifact is simply missing on the
* remote repository.
* <p>
* For historical reason the status can't be used to distinguish a real failure from a missing
* artifact by using the status, in both cases it's DownloadStatus.FAILED. The details message
* can be used for this purpose though.
* </p>
*/
public static final String MISSING_ARTIFACT = "missing artifact";
private Artifact artifact;
private ArtifactOrigin origin;
private File localFile;
private DownloadStatus downloadStatus;
private long size;
private String downloadDetails = "";
private long downloadTimeMillis;
private File unpackedLocalFile;
private Artifact unpackedArtifact;
public ArtifactDownloadReport(Artifact artifact) {
this.artifact = artifact;
}
public DownloadStatus getDownloadStatus() {
return downloadStatus;
}
public void setDownloadStatus(DownloadStatus downloadStatus) {
this.downloadStatus = downloadStatus;
}
public String getName() {
return artifact.getName();
}
/**
*
* @return the type of the downloaded artifact
*/
public String getType() {
return artifact.getType();
}
public Artifact getArtifact() {
return artifact;
}
public String getExt() {
return artifact.getExt();
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public void setArtifactOrigin(ArtifactOrigin origin) {
this.origin = origin;
}
public ArtifactOrigin getArtifactOrigin() {
return origin;
}
public void setDownloadDetails(String message) {
downloadDetails = message;
}
public String getDownloadDetails() {
return downloadDetails;
}
public void setDownloadTimeMillis(long l) {
downloadTimeMillis = l;
}
public long getDownloadTimeMillis() {
return downloadTimeMillis;
}
public String toString() {
if (downloadStatus == DownloadStatus.SUCCESSFUL) {
return "[SUCCESSFUL ] " + artifact + " (" + downloadTimeMillis + "ms)";
} else if (downloadStatus == DownloadStatus.FAILED) {
if (MISSING_ARTIFACT.equals(downloadDetails)) {
return "[NOT FOUND ] " + artifact + " (" + downloadTimeMillis + "ms)";
} else {
return "[FAILED ] " + artifact + ": " + downloadDetails + " ("
+ downloadTimeMillis + "ms)";
}
} else if (downloadStatus == DownloadStatus.NO) {
return "[NOT REQUIRED] " + artifact;
} else {
return super.toString();
}
}
/**
* Returns the File where the artifact is available on the local filesystem, or
* <code>null</code> if and only if the artifact caching failed.
*
* @return the file where the artifact is now available on the local filesystem.
*/
public File getLocalFile() {
return localFile;
}
public void setLocalFile(File localFile) {
this.localFile = localFile;
}
public boolean isDownloaded() {
return DownloadStatus.SUCCESSFUL == downloadStatus;
}
public void setUnpackedLocalFile(File unpackedLocalFile) {
this.unpackedLocalFile = unpackedLocalFile;
}
public File getUnpackedLocalFile() {
return unpackedLocalFile;
}
public void setUnpackedArtifact(final Artifact unpackedArtifact) {
this.unpackedArtifact = unpackedArtifact;
}
public Artifact getUnpackedArtifact() {
return this.unpackedArtifact;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((artifact == null) ? 0 : artifact.hashCode());
return result;
}
public boolean equals(Object obj) {
if (!(obj instanceof ArtifactDownloadReport)) {
return false;
}
if (this == obj) {
return true;
}
ArtifactDownloadReport other = (ArtifactDownloadReport) obj;
return artifact == null ? other.artifact == null : artifact.equals(other.artifact);
}
}