package org.basex.query.util.pkg; import static org.basex.query.util.Err.*; import static org.basex.query.util.pkg.PkgText.*; import static org.basex.util.Token.*; import java.io.IOException; import org.basex.core.Context; import org.basex.io.IO; import org.basex.query.QueryException; import org.basex.query.item.ANode; import org.basex.query.item.DBNode; import org.basex.query.item.QNm; import org.basex.query.iter.AxisIter; import org.basex.util.InputInfo; /** * Parses the jar descriptors and performs schema checks. * @author BaseX Team 2005-12, BSD License * @author Rositsa Shadura */ public final class JarParser { /** Context. */ private final Context context; /** Input info. */ private final InputInfo input; /** * Constructor. * @param ctx database context * @param ii input info */ public JarParser(final Context ctx, final InputInfo ii) { context = ctx; input = ii; } /** * Parses a jar descriptor. * @param io XML input * @return jar descriptor container * @throws QueryException query exception */ public JarDesc parse(final IO io) throws QueryException { final JarDesc desc = new JarDesc(); try { final ANode node = new DBNode(io, context.prop).children().next(); final AxisIter ch = node.children(); for(ANode next; (next = ch.next()) != null;) { final QNm name = next.qname(); // ignore namespace to improve compatibility if(eq(JAR, name.local())) desc.jars.add(next.string()); else if(eq(CLASS, name.local())) desc.classes.add(next.string()); // [CG] add message for unknown elements } if(desc.jars.size() == 0) JARDESCINV.thrw(input, NOJARS); else if(desc.classes.size() == 0) JARDESCINV.thrw(input, NOCLASS); return desc; } catch(final IOException ex) { throw JARREADFAIL.thrw(input, ex.getMessage()); } } }