From 5688d286c39f73b32338032ca7c105aeddf861b7 Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Wed, 9 Apr 2014 20:48:55 +0200 Subject: [PATCH] TAP: Modify the xSV formats in order to let developer specify a MIME type and short MIME type (or alias) for any SV format, but especially for the one not already managed (CSV and TSV). --- src/tap/formatter/ResultSet2SVFormatter.java | 35 ++++-- src/tap/formatter/SVFormat.java | 123 ++++++++++++++----- 2 files changed, 121 insertions(+), 37 deletions(-) diff --git a/src/tap/formatter/ResultSet2SVFormatter.java b/src/tap/formatter/ResultSet2SVFormatter.java index 6289570..0eb1edf 100644 --- a/src/tap/formatter/ResultSet2SVFormatter.java +++ b/src/tap/formatter/ResultSet2SVFormatter.java @@ -16,28 +16,46 @@ package tap.formatter; * You should have received a copy of the GNU Lesser General Public License * along with TAPLibrary. If not, see <http://www.gnu.org/licenses/>. * - * Copyright 2012 - UDS/Centre de Données astronomiques de Strasbourg (CDS) + * Copyright 2012-2013 - UDS/Centre de Données astronomiques de Strasbourg (CDS), + * Astronomisches Rechen Institute (ARI) */ import java.io.IOException; import java.io.PrintWriter; - import java.sql.ResultSet; import java.sql.SQLException; -import adql.db.DBColumn; - import tap.ServiceConnection; import tap.TAPException; import tap.TAPExecutionReport; +import adql.db.DBColumn; +/** + * + * @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de + * @version 1.1 (12/2013) + */ public class ResultSet2SVFormatter extends SVFormat<ResultSet> implements ResultSetFormatter { + /** + * @since 1.1 + */ + public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, char colSeparator){ + super(service, colSeparator); + } + public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, char colSeparator, boolean delimitStrings){ super(service, colSeparator, delimitStrings); } - public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, char colSeparator){ + /** + * @since 1.1 + */ + public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, char colSeparator, boolean delimitStrings, String mimeType, String typeAlias){ + super(service, colSeparator, delimitStrings, mimeType, typeAlias); + } + + public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, String colSeparator){ super(service, colSeparator); } @@ -45,8 +63,11 @@ public class ResultSet2SVFormatter extends SVFormat<ResultSet> implements Result super(service, colSeparator, delimitStrings); } - public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, String colSeparator){ - super(service, colSeparator); + /** + * @since 1.1 + */ + public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, String colSeparator, boolean delimitStrings, String mimeType, String typeAlias){ + super(service, colSeparator, delimitStrings, mimeType, typeAlias); } @Override diff --git a/src/tap/formatter/SVFormat.java b/src/tap/formatter/SVFormat.java index 259fff2..3cc95c3 100644 --- a/src/tap/formatter/SVFormat.java +++ b/src/tap/formatter/SVFormat.java @@ -16,19 +16,28 @@ package tap.formatter; * You should have received a copy of the GNU Lesser General Public License * along with TAPLibrary. If not, see <http://www.gnu.org/licenses/>. * - * Copyright 2012 - UDS/Centre de Données astronomiques de Strasbourg (CDS) + * Copyright 2012-2013 - UDS/Centre de Données astronomiques de Strasbourg (CDS), + * Astronomisches Rechen Institute (ARI) */ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; -import cds.savot.writer.SavotWriter; -import adql.db.DBColumn; import tap.ServiceConnection; import tap.TAPException; import tap.TAPExecutionReport; +import adql.db.DBColumn; +import cds.savot.writer.SavotWriter; +/** + * + * + * @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de + * @version 1.1 (12/2013) + * + * @param <R> + */ public abstract class SVFormat< R > implements OutputFormat<R> { /** Indicates whether a format report (start and end date/time) must be printed in the log output. */ @@ -42,60 +51,114 @@ public abstract class SVFormat< R > implements OutputFormat<R> { protected final String separator; protected final boolean delimitStr; + /** @since 1.1 */ + protected final String mimeType; + /** @since 1.1 */ + protected final String shortMimeType; public SVFormat(final ServiceConnection<R> service, char colSeparator){ this(service, colSeparator, true); } + /** + * @since 1.1 + */ + public SVFormat(final ServiceConnection<R> service, String colSeparator){ + this(service, colSeparator, true); + } + public SVFormat(final ServiceConnection<R> service, char colSeparator, boolean delimitStrings){ - this(service, colSeparator, delimitStrings, false); + this(service, "" + colSeparator, delimitStrings); } - public SVFormat(final ServiceConnection<R> service, char colSeparator, boolean delimitStrings, final boolean logFormatReport){ - separator = "" + colSeparator; - delimitStr = delimitStrings; - this.service = service; - this.logFormatReport = logFormatReport; + /** + * @since 1.1 + */ + public SVFormat(final ServiceConnection<R> service, String colSeparator, boolean delimitStrings){ + this(service, colSeparator, delimitStrings, null, null); } - public SVFormat(final ServiceConnection<R> service, String colSeparator){ - this(service, colSeparator, true); + /** + * @since 1.1 + */ + public SVFormat(final ServiceConnection<R> service, char colSeparator, boolean delimitStrings, String mimeType, String typeAlias){ + this(service, "" + colSeparator, delimitStrings, mimeType, typeAlias); } - public SVFormat(final ServiceConnection<R> service, String colSeparator, boolean delimitStrings){ + /** + * @since 1.1 + */ + public SVFormat(final ServiceConnection<R> service, String colSeparator, boolean delimitStrings, String mimeType, String typeAlias){ + this(service, colSeparator, delimitStrings, mimeType, typeAlias, false); + } + + /** + * @since 1.1 + */ + public SVFormat(final ServiceConnection<R> service, char colSeparator, boolean delimitStrings, String mimeType, String typeAlias, final boolean logFormatReport){ + this(service, "" + colSeparator, delimitStrings, mimeType, typeAlias, logFormatReport); + } + + /** + * @since 1.1 + */ + public SVFormat(final ServiceConnection<R> service, String colSeparator, boolean delimitStrings, String mimeType, String typeAlias, final boolean logFormatReport){ separator = (colSeparator == null) ? ("" + COMMA_SEPARATOR) : colSeparator; delimitStr = delimitStrings; this.service = service; + this.logFormatReport = logFormatReport; + + // Set the MIME type: + if (mimeType == null || mimeType.length() == 0){ + // if none is provided, guess it from the separator: + switch(separator.charAt(0)){ + case COMMA_SEPARATOR: + case SEMI_COLON_SEPARATOR: + this.mimeType = "text/csv"; + break; + case TAB_SEPARATOR: + this.mimeType = "text/tsv"; + break; + default: + this.mimeType = "text/plain"; + } + }else + this.mimeType = mimeType; + + // Set the short MIME type (or the alias): + if (typeAlias == null || typeAlias.length() == 0){ + // if none is provided, guess it from the separator: + switch(separator.charAt(0)){ + case COMMA_SEPARATOR: + case SEMI_COLON_SEPARATOR: + this.shortMimeType = "csv"; + break; + case TAB_SEPARATOR: + this.shortMimeType = "tsv"; + break; + default: + this.shortMimeType = "text"; + } + }else + this.shortMimeType = typeAlias; } + @Override public String getMimeType(){ - switch(separator.charAt(0)){ - case COMMA_SEPARATOR: - case SEMI_COLON_SEPARATOR: - return "text/csv"; - case TAB_SEPARATOR: - return "text/tsv"; - default: - return "text/plain"; - } + return mimeType; } + @Override public String getShortMimeType(){ - switch(separator.charAt(0)){ - case COMMA_SEPARATOR: - case SEMI_COLON_SEPARATOR: - return "csv"; - case TAB_SEPARATOR: - return "tsv"; - default: - return "text"; - } + return shortMimeType; } + @Override public String getDescription(){ return null; } + @Override public String getFileExtension(){ switch(separator.charAt(0)){ case COMMA_SEPARATOR: -- GitLab