/** * Constructor. * * @param os output stream * @param sopts serializer options * @throws QueryIOException query I/O exception */ protected OutputSerializer(final OutputStream os, final SerializerOptions sopts) throws QueryIOException { this.sopts = sopts; indent = sopts.yes(INDENT); // project-specific options indents = sopts.get(INDENTS); tab = sopts.yes(TABULATOR) ? '\t' : ' '; encoding = Strings.normEncoding(sopts.get(ENCODING), true); PrintOutput po; if (encoding == Strings.UTF8) { po = PrintOutput.get(os); } else { try { po = new EncoderOutput(os, Charset.forName(encoding)); } catch (final Exception ex) { throw SERENCODING_X.getIO(encoding); } } final int limit = sopts.get(LIMIT); if (limit != -1) po.setLimit(limit); final byte[] nl = token(sopts.get(NEWLINE).newline()); if (nl.length != 1 || nl[0] != '\n') po = new NewlineOutput(po, nl); out = po; }
/** * Returns the media type defined in the specified serialization parameters. * * @param sopts serialization parameters * @return media type */ public static String mediaType(final SerializerOptions sopts) { // set content type final String type = sopts.get(SerializerOptions.MEDIA_TYPE); if (!type.isEmpty()) return type; // determine content type dependent on output method final SerialMethod sm = sopts.get(SerializerOptions.METHOD); if (sm == SerialMethod.RAW) return APP_OCTET; if (sm == SerialMethod.XML) return APP_XML; if (sm == SerialMethod.XHTML || sm == SerialMethod.HTML) return TEXT_HTML; if (sm == SerialMethod.JSON) { final JsonSerialOptions jprop = sopts.get(SerializerOptions.JSON); return jprop.get(JsonOptions.FORMAT) == JsonFormat.JSONML ? APP_JSONML : APP_JSON; } return TEXT_PLAIN; }
/** Initializes the output. Sets the expected encoding and content type. */ public void initResponse() { // set content type and encoding final SerializerOptions opts = sopts(); final String enc = opts.get(SerializerOptions.ENCODING); res.setCharacterEncoding(enc); final String ct = mediaType(opts); res.setContentType(new TokenBuilder(ct).add(CHARSET).add(enc).toString()); }
/** * Runs a query and checks the serialization parameters. * * @throws IOException I/O exception */ @Test public void queryOptions() throws IOException { final Query query = session.query("declare option output:encoding 'US-ASCII';()"); query.execute(); final SerializerOptions sp = new SerializerOptions(); sp.parse(query.options()); assertEquals("US-ASCII", sp.get(SerializerOptions.ENCODING)); query.close(); }
/** Creates the database context. */ @BeforeClass public static void start() { // turn off pretty printing set(MainOptions.SERIALIZER, SerializerOptions.get(false)); }
/** * Sets the item separator. * * @param def default separator */ protected final void itemsep(final String def) { final String is = sopts.get(ITEM_SEPARATOR); itemsep = sopts.contains(ITEM_SEPARATOR) ? token(is) : def == null ? null : token(def); }