package ca.canuckcoding.webos;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ResourceBundle;
/**
* @author Jason Robitaille
*/
public class PatchFile extends File {
private ResourceBundle locale;
private String name;
private String base;
private String id;
private String metaName;
private String metaVersion;
private String metaAuthor;
private String metaDescription;
public PatchFile(File patch) {
this(patch.getAbsolutePath());
}
public PatchFile(String path) {
super(path);
locale = ResourceBundle.getBundle("ca/canuckcoding/webos/Locale");
name = getFileName(path);
base = name.substring(0, name.lastIndexOf(".")).toLowerCase()
.replaceAll("[^a-zA-Z0-9-]", "");
base = base.replace(" ", "");
id = "ca.canuckcoding.patches." + base;
name = base + ".patch";
}
private String getFileName(String path) {
String result = path;
int index = result.lastIndexOf("/");
if(index!=-1) {
result = result.substring(index+1);
}
index = result.lastIndexOf("\\");
if(index!=-1) {
result = result.substring(index+1);
}
return result;
}
public void scan() {
try {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new FileReader(this));
String line = br.readLine();
boolean isMeta=true;
while(line!=null) {
if(isMeta) {
if(line.startsWith("Name:")) {
metaName = parseLine(line);
} else if(line.startsWith("Version:")) {
metaVersion = parseLine(line);
String[] tokens = metaVersion.split("-");
if(tokens.length==2) {
metaVersion = tokens[1];
} else {
metaVersion = null;
}
} else if(line.startsWith("Author:")) {
metaAuthor = parseLine(line);
} else if(line.startsWith("Description:")) {
metaDescription = parseLine(line);
}
}
if(line.startsWith("+++")) {
isMeta = false;
}
sb.append(line+"\n");
line = br.readLine();
}
br.close();
BufferedWriter out=new BufferedWriter (new FileWriter(this));
out.write(sb.toString());
out.flush();
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
private String parseLine(String s) {
int i = s.indexOf(":");
String result = null;
if(i>-1) {
result = s.substring(i+1).trim();
}
return result;
}
public String getIdBase() { return base; }
public String getId() { return id; }
public String getPatchFilename() { return name; }
public String getPatchName() {
if(metaName==null || metaName.length()==0) {
metaName = base;
}
return metaName;
}
public String getPatchVersion(String webOSVersion) {
String result = webOSVersion;
if(metaVersion==null || metaVersion.length()==0) {
result += "-1";
} else {
result += "-" + metaVersion;
}
return result;
}
public String getPatchAuthor() {
if(metaAuthor==null || metaAuthor.length()==0) {
metaAuthor = locale.getString("UNKNOWN");
}
return metaAuthor;
}
public String getPatchDescription() {
if(metaDescription==null || metaDescription.length()==0) {
metaDescription = locale.getString("UNKNOWN");
}
return metaDescription;
}
}