package org.basex.query.util.pkg; import static org.basex.util.Token.*; import java.io.File; import org.basex.util.TokenBuilder; import org.basex.util.list.ObjList; /** * Package. * * @author BaseX Team 2005-12, BSD License * @author Rositsa Shadura */ public final class Package { /** List of dependencies. */ public final ObjList<Dependency> dep = new ObjList<Dependency>(); /** Package components. */ public final ObjList<Component> comps = new ObjList<Component>(); /** Package short name. */ public byte[] abbrev; /** Package uri. */ byte[] name; /** Package version. */ byte[] version; /** Version of packaging specification the package conforms to. */ byte[] spec; /** * Returns unique package name consisting of package uri and package version. * @return result */ byte[] uniqueName() { return new TokenBuilder().add(name).add('-').add(version).finish(); } /** * Extracts the package name from a unique package name. * @param pkgName unique package name: name-version * @return package name */ public static byte[] name(final byte[] pkgName) { final int idx = lastIndexOf(pkgName, '-'); return idx == -1 ? pkgName : subtoken(pkgName, 0, idx); } /** * Extracts the package version from a unique package name. * @param pkgName unique package name: name-version * @return package version */ public static byte[] version(final byte[] pkgName) { final int idx = lastIndexOf(pkgName, '-'); return subtoken(pkgName, idx + 1, pkgName.length); } /** * Package dependency. * @author BaseX Team 2005-12, BSD License * @author Rositsa Shadura */ public static final class Dependency { /** Name of package a package depends on. */ public byte[] pkg; /** Name of processor a package depends on. */ byte[] processor; /** Set of acceptable version. */ byte[] versions; /** SemVer template. */ byte[] semver; /** Minimum acceptable version. */ byte[] semverMin; /** Maximum acceptable version. */ byte[] semverMax; /** * Returns unique package name for secondary package using the given * version. * @param version version * @return unique name */ public byte[] name(final byte[] version) { return new TokenBuilder().add(pkg).add('-').add(version).finish(); } } /** * Package component. * @author BaseX Team 2005-12, BSD License * @author Rositsa Shadura */ public static final class Component { /** Namespace URI. */ public byte[] uri; /** Component file. */ public byte[] file; /** * Extracts component's file name from component's path. * @return component's name */ String name() { final String path = string(file); final int i = path.lastIndexOf(File.separator); return i == -1 ? path : path.substring(i + 1, path.length()); } } }