package com.buglabs.app.bugdash2;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import freemarker.template.SimpleScalar;
/**
* Represents an ipkg-- used by PackageViewerController
* @author akweon
*
*/
public class Package {
private String name;
private String version;
private String status;
private String architecture;
private String dependency;
private static final String PACKAGE_KEY = "Package";
private static final String VERSION_KEY = "Version";
private static final String STATUS_KEY = "Status";
private static final String ARCHITECTURE_KEY = "Architecture";
private static final String DEPENDENCY_KEY = "Depends";
private static final String RECOMMENDATION_KEY = "Recommends";
private static String ipkg = "ipkg";
public static final String UPDATE_AND_UPGRADE_COMMAND = ipkg + " update && " + ipkg + " -noaction upgrade";
public Package() { }
public String getName() { return name; }
public String getVersion() { return version; }
public String getStatus() { return status; }
public String getArchitecture() { return architecture; }
public String getDependency() { return dependency; }
/**
* Parses input data and returns an instance of ipackage
* @param input (ArrayList)
* @return Package object
*/
public static Package importData(List input) {
// an element in input array represents a line from ipkg status file containing ipkg information;
// data can span multiple lines.
Package p = new Package();
Iterator itr = input.iterator();
String line = "";
String key = "";
HashMap metadata = new HashMap();
String[] line_data;
while (itr.hasNext()) {
line = (String)itr.next();
if (line.length() == 0) break;
line_data = line.split(": "); // key and value are separated by ": "
if (line_data.length == 0) break;
if (line_data.length > 1) {
key = line_data[0];
metadata.put(key, line_data[1]);
} else {
metadata.put(key, metadata.get(key) + line_data[0]); // line without key-- associate it with previous key
}
if (metadata.containsKey(PACKAGE_KEY))
p.name = (String)metadata.get(PACKAGE_KEY);
if (metadata.containsKey(VERSION_KEY))
p.version = (String)metadata.get(VERSION_KEY);
if (metadata.containsKey(STATUS_KEY)) {
p.status = (String)metadata.get(STATUS_KEY);
}
if (metadata.containsKey(ARCHITECTURE_KEY))
p.architecture = (String)metadata.get(ARCHITECTURE_KEY);
if (metadata.containsKey(DEPENDENCY_KEY))
p.dependency = (String)metadata.get(DEPENDENCY_KEY);
}
return p;
}
public static SimpleScalar update() {
return ShellUtil.getSimpleScalar(ipkg + " update");
}
public static SimpleScalar info(String name) {
if (name == null || name.equals("")) return null;
return ShellUtil.getSimpleScalar(ipkg + " info " + name);
}
public static SimpleScalar downloadExtra() {
return ShellUtil.getSimpleScalar("wget http://repo.buglabs.net/ipkg-extras.conf -O /etc/ipkg/ipkg-extras.conf");
}
public static SimpleScalar install(String name) {
if (name == null || name.equals("")) return null;
return ShellUtil.getSimpleScalar(ipkg + " install " + name);
}
public static void setIpkgCommand(String cmd) {
ipkg = cmd;
}
public static String getIpkgCommand() {
return ipkg;
}
}