package railo.runtime;
import java.io.InputStream;
import java.util.Map;
import railo.commons.date.TimeZoneConstants;
import railo.commons.io.IOUtil;
import railo.commons.io.ini.IniFile;
import railo.commons.lang.StringUtil;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.op.Caster;
import railo.runtime.op.date.DateCaster;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.util.ListUtil;
/**
* Info to this Version
*/
public final class Info {
/**
* @return the level
*/
public static String getLevel() {
return level;
}
public static final int STATE_ALPHA = 2*100000000;
public static final int STATE_BETA = 1*100000000;
public static final int STATE_RC = 3*100000000;
public static final int STATE_FINAL = 0;
// Mod this
private static DateTime releaseDate;//=DateUtil.toDateTime(TimeZone.getDefault(),2009,6,29,0,0,0,null);
private static String versionName;//="Barry";
private static String versionNameExplanation;//="http://en.wikipedia.org/wiki/Barry_(dog)";
// 3.1
private static int state;//=STATE_BETA;
private static int major;//=3;
private static int minor;//=1;
private static int releases;//=0;
private static int patches;//=18;
private static final long releaseTime;//=releaseDate.getTime();
private static String version;
private static String level;
private static final String strState;//=toStringState(state);
private static final int intVersion;
private static final int fullVersion;
static {
InputStream is = Info.class.getClassLoader().getResourceAsStream("railo/runtime/Info.ini");
try{
IniFile ini=new IniFile(is);
Map verIni=ini.getSection("version");
versionName=(String) verIni.get("name");
versionNameExplanation=(String) verIni.get("name-explanation");
releaseDate=DateCaster.toDateAdvanced((String) verIni.get("release-date"), TimeZoneConstants.EUROPE_ZURICH);
state=toIntState((String) verIni.get("state"));
level=(String) verIni.get("level");
version=(String) verIni.get("number");
String[] aVersion = ListUtil.toStringArray(ListUtil.listToArrayRemoveEmpty(version,'.'));
major=Caster.toIntValue(aVersion[0]);
minor=Caster.toIntValue(aVersion[1]);
releases=Caster.toIntValue(aVersion[2]);
patches=Caster.toIntValue(aVersion[3]);
}
catch (Throwable t) {
t.printStackTrace();
throw new PageRuntimeException(Caster.toPageException(t));
}
finally{
IOUtil.closeEL(is);
}
releaseTime=releaseDate.getTime();
strState=toStringState(state);
version=StringUtil.addZeros(major,1)+'.'+
StringUtil.addZeros(minor,1)+'.'+
StringUtil.addZeros(releases,1)+'.'+
StringUtil.addZeros(patches,3);
intVersion=(major*1000000)+(minor*10000)+(releases*100)+patches;
fullVersion=intVersion+state;
}
public static int toIntVersion(String version, int defaultValue) {
try{
String[] aVersion = ListUtil.toStringArray(ListUtil.listToArrayRemoveEmpty(version,'.'));
int ma = Caster.toIntValue(aVersion[0]);
int mi = Caster.toIntValue(aVersion[1]);
int re = Caster.toIntValue(aVersion[2]);
int pa = Caster.toIntValue(aVersion[3]);
return (ma*1000000)+(mi*10000)+(re*100)+pa;
}
catch(Throwable t){
return defaultValue;
}
}
// Version <version>.<major>.<minor>.<patches>
/**
* @return Returns the releaseDate.
*/
public static DateTime getRealeaseDate() {
return releaseDate;
}
/**
* @return Returns the releaseTime.
*/
public static long getRealeaseTime() {
return releaseTime;
}
/**
* @return Returns the version.
*/
public static String getVersionAsString() {
return version;
}
/**
* @return Returns the intVersion.
*/
public static int getVersionAsInt() {
return intVersion;
}
/**
* @return returns the state
*/
public static int getStateAsInt() {
return state;
}
/**
* @return returns the state
*/
public static String getStateAsString() {
return strState;
}
/**
* @return returns the state
*/
public static String toStringState(int state) {
if(state==STATE_FINAL) return "final";
else if(state==STATE_BETA) return "beta";
else if(state==STATE_RC) return "rc";
else return "alpha";
}
/**
* @return returns the state
*/
public static int toIntState(String state) {
state=state.trim().toLowerCase();
if("final".equals(state)) return STATE_FINAL;
else if("beta".equals(state)) return STATE_BETA;
else if("rc".equals(state)) return STATE_RC;
else return STATE_ALPHA;
}
public static int getFullVersionInfo() {
return fullVersion;
}
public static String getVersionName() {
return versionName;
}
public static int getMajorVersion() {
return major;
}
public static int getMinorVersion() {
return minor;
}
public static String getVersionNameExplanation() {
return versionNameExplanation;
}
/*public static void main(String[] args) {
print.out("getFullVersionInfo(103010018):"+getFullVersionInfo());
print.out("getStateAsString(beta):"+getStateAsString());
print.out("getStateAsInt(100000000):"+getStateAsInt());
print.out("getVersionAsInt(3010018):"+getVersionAsInt());
print.out("getVersionAsString(3.1.0.018):"+getVersionAsString());
print.out("getVersionName(Barry):"+getVersionName());
print.out("getVersionNameExplanation(http://en.wikipedia.org/wiki/Barry_(dog)):"+getVersionNameExplanation());
print.out("getRealeaseDate({ts '2009-06-29 00:00:00'}):"+getRealeaseDate());
print.out("getRealeaseTime(1246226400000):"+getRealeaseTime());
print.out("getLevel():"+getLevel());
}*/
}