package com.limegroup.gnutella.version;
import org.apache.commons.httpclient.URI;
import com.limegroup.gnutella.URN;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
/**
* A single message for updating.
*
* Contains information if the current architecture applies to this update.
*/
class UpdateData implements Cloneable, UpdateInformation {
private static final Log LOG = LogFactory.getLog(UpdateData.class);
/** The 'from' version. */
private Version fromVersion;
/** The 'to' version. */
private Version toVersion;
/** The 'for' version. */
private Version forVersion;
/** Is valid for pro? */
private boolean isPro;
/** Is valid for free? */
private boolean isFree;
/** The url to send this to. */
private String updateURL;
/** The style of this update. */
private int updateStyle;
/** The javafrom */
private Version fromJava;
/** The javato */
private Version toJava;
/** The OS[] this applies to. */
private OS[] osList;
/** The language this applies to. */
private String language;
/** The text of this message */
private String updateText;
/** The text of button1. */
private String button1Text;
/** The text of button2. */
private String button2Text;
/** The text of the update title. */
private String updateTitle;
/** The URN of the version. */
private URN urn;
/** The Tiger Tree Root of the version. */
private String ttRoot;
/** The command to run to launch the update. */
private String updateCommand;
/** The filename to name the update file on disk. */
private String updateFileName;
/** The size of the update on disk. */
private int size;
/**
* Constructs a new UpdateData object.
*/
UpdateData() {}
/**
* The data.
*/
public String toString() {
return "\n{" +
"from: " + fromVersion + ", to: " + toVersion + ", for: " + forVersion +
", pro: " + isPro + ", free: " + isFree + ", url: " + updateURL + ", style: " + updateStyle +
", javaFrom: " + fromJava + ", javaTo: " + toJava + ", osList: " + OS.toString(osList) +
", language: " + language + ", text: " + updateText + ", title: " + updateTitle +
", urn: " + urn + ", ttroot: " + ttRoot + ", updateCommand: " + updateCommand +
", updateFileName: " + updateFileName + ", size: " + size + "}";
}
/** Sets the from */
void setFromVersion(Version v) { fromVersion = v; }
/** Sets the to */
void setToVersion(Version v) { toVersion = v; }
/** Sets the forVersion */
void setForVersion(Version v) { forVersion = v; }
/** Sets the pro status */
void setPro(boolean b) { isPro = b; }
/** Sets the free status */
void setFree(boolean b) { isFree = b; }
/** Sets the update URL */
void setUpdateURL(String s) { updateURL = s; }
/** Sets the style */
void setStyle(int s) { updateStyle = s; }
/** Sets the fromJava */
void setFromJava(Version v) { fromJava = v; }
/** Sets the toJava */
void setToJava(Version v) { toJava = v; }
/** Sets the osList */
void setOSList(OS[] os) { osList = os; }
/** Sets the language */
void setLanguage(String l) { language = l; }
/** Sets the update text */
void setUpdateText(String t) { updateText = t; }
/** Sets the button1 text */
void setButton1Text(String t) { button1Text = t; }
/** Sets the button2 text */
void setButton2Text(String t) { button2Text = t; }
/** Sets the text of the title */
void setUpdateTitle(String t) { updateTitle = t; }
/** Sets the update URN. */
void setUpdateURN(URN urn) { this.urn = urn; }
/** Sets the update TT root. */
void setUpdateTTRoot(String root) { this.ttRoot = root; }
/** Sets the update command to run. */
void setUpdateCommand(String command) { updateCommand = command; }
/** Sets the filename to save the update to. */
void setUpdateFileName(String filename) { updateFileName = filename; }
/** Sets the size of the update. */
void setUpdateSize(int size) { this.size = size; }
/** Gets the language. */
String getLanguage() { return language; }
/// the below getters implement UpdateInformation.
/** Gets the update version as a string. */
public String getUpdateVersion() { return forVersion.toString(); }
/** Gets the update text. */
public String getUpdateText() { return updateText; }
/** Gets the update URL */
public String getUpdateURL() { return updateURL; }
/** Gets the update style. */
public int getUpdateStyle() { return updateStyle; }
/** Gets the button1 text. */
public String getButton1Text() { return button1Text; }
/** Gets the button2 text. */
public String getButton2Text() { return button2Text; }
/** Gets the update title. */
public String getUpdateTitle() { return updateTitle; }
/** Gets the update file name. */
public String getUpdateFileName() { return updateFileName; }
/** Gets the update command to run. */
public String getUpdateCommand() { return updateCommand; }
/** Gets the update URN */
public URN getUpdateURN() { return urn; }
/** Gets the TigerTreeRoot hash. */
public String getTTRoot() { return ttRoot; }
/** Gets the size of the update. */
public long getSize() { return size; }
/**
* Determines if this matches (on all except language).
* The OS match is taken from CommonUtils.
*/
boolean isAllowed(Version currentV, boolean currentPro, int currentStyle, Version currentJava) {
return currentV.compareTo(fromVersion) >= 0 &&
currentV.compareTo(toVersion) < 0 &&
currentStyle <= updateStyle &&
OS.hasAcceptableOS(osList) &&
isValidJava(currentJava) &&
(currentPro ? isPro : isFree);
}
/**
* Determines if the java versions are okay.
*/
boolean isValidJava(Version currentV) {
if(currentV == null || (fromJava == null && toJava == null))
return true;
if(fromJava == null)
return currentV.compareTo(toJava) < 0;
if(toJava == null)
return currentV.compareTo(fromJava) >= 0;
return currentV.compareTo(fromJava) >= 0 &&
currentV.compareTo(toJava) < 0;
}
/**
* Clones a new update data that is exactly like this one.
*/
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch(CloneNotSupportedException cnse) {
LOG.error("shoulda cloned", cnse);
}
return clone;
}
}