/**
* Copyright (c) 2009--2012 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.frontend.xmlrpc.packages;
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.common.translation.Translator;
import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.rhnpackage.PackageEvr;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.manager.rhnpackage.PackageManager;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* PackageHelper
* @version $Rev$
*/
public class PackageHelper {
/**
* Private constructor
*/
private PackageHelper() {
}
/**
* Utility method to convert a package to a map.
* @param pkg The package to convert
* @param user The user requesting the package conversion (used in calculating the
* providing_channels attribute)
* @return Returns a map representation of a package
*/
public static Map packageToMap(Package pkg, User user) {
Map pkgMap = new HashMap();
// deal with the providing channels first
DataResult dr = PackageManager.providingChannels(user, pkg.getId());
List channelLabels = new ArrayList();
for (Iterator itr = dr.iterator(); itr.hasNext();) {
Map map = (Map) itr.next();
channelLabels.add(map.get("label"));
}
pkgMap.put("providing_channels", channelLabels);
// now deal with the actual package object.
if (pkg.getPackageName() == null) {
addEntry(pkgMap, "name", "");
}
else {
addEntry(pkgMap, "name",
StringUtils.defaultString(pkg.getPackageName().getName()));
}
if (pkg.getPackageEvr() == null) {
addEntry(pkgMap, "epoch", "");
addEntry(pkgMap, "version", "");
addEntry(pkgMap, "release", "");
}
else {
PackageEvr evr = pkg.getPackageEvr();
addEntry(pkgMap, "epoch", StringUtils.defaultString(evr.getEpoch()));
addEntry(pkgMap, "version", StringUtils.defaultString(evr.getVersion()));
addEntry(pkgMap, "release", StringUtils.defaultString(evr.getRelease()));
}
if (pkg.getPackageArch() == null) {
addEntry(pkgMap, "arch_label", "");
}
else {
addEntry(pkgMap, "arch_label", pkg.getPackageArch().getLabel());
}
addEntry(pkgMap, "id", pkg.getId());
addEntry(pkgMap, "build_host",
StringUtils.defaultString(pkg.getBuildHost()));
addEntry(pkgMap, "description",
StringUtils.defaultString(pkg.getDescription()));
addEntry(pkgMap, "checksum",
StringUtils.defaultString(pkg.getChecksum().getChecksum()));
addEntry(pkgMap, "checksum_type",
StringUtils.defaultString(
pkg.getChecksum().getChecksumType().getLabel()));
addEntry(pkgMap, "vendor",
StringUtils.defaultString(pkg.getVendor()));
addEntry(pkgMap, "summary",
StringUtils.defaultString(pkg.getSummary()));
addEntry(pkgMap, "cookie",
StringUtils.defaultString(pkg.getCookie()));
addEntry(pkgMap, "license",
StringUtils.defaultString(pkg.getCopyright()));
addEntry(pkgMap, "path",
StringUtils.defaultString(pkg.getPath()));
addEntry(pkgMap, "file",
StringUtils.defaultString(pkg.getFile()));
addEntry(pkgMap, "build_date",
Translator.date2String(pkg.getBuildTime()));
addEntry(pkgMap, "last_modified_date",
Translator.date2String(pkg.getLastModified()));
Long sz = pkg.getPackageSize();
addEntry(pkgMap, "size", (sz == null) ? "" : String.valueOf(sz));
sz = pkg.getPayloadSize();
addEntry(pkgMap, "payload_size", (sz == null) ? "" : String.valueOf(sz));
return pkgMap;
}
private static void addEntry(Map map, String key, Object value) {
map.put(key, value);
}
/**
* Parse filename from package path
* @param path package path
* @return filename
*/
public static String getPackageFileFromPath(String path) {
String[] parts = StringUtils.split(path, '/');
if (parts != null && parts.length > 0) {
return parts[parts.length - 1];
}
return null;
}
}