Commit 2379c606 authored by gmantele's avatar gmantele
Browse files

TAP: Modify the xSV formats in order to let developer specify a MIME type and...

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).
parent d8dc0bb4
Loading
Loading
Loading
Loading
+30 −7
Original line number Diff line number Diff line
@@ -16,28 +16,48 @@ 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&eacute;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);
	}

	/**
	 * @since 1.1
	 */
	public ResultSet2SVFormatter(final ServiceConnection<ResultSet> service, String colSeparator){
		super(service, colSeparator);
	}

@@ -45,8 +65,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
+91 −30
Original line number Diff line number Diff line
@@ -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&eacute;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,112 @@ public abstract class SVFormat< R > implements OutputFormat<R> {

	protected final String separator;
	protected final boolean delimitStr;
	protected final String mimeType;
	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;

	public String getMimeType(){
		// 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:
				return "text/csv";
					this.mimeType = "text/csv";
					break;
				case TAB_SEPARATOR:
				return "text/tsv";
					this.mimeType = "text/tsv";
					break;
				default:
				return "text/plain";
		}
					this.mimeType = "text/plain";
			}
		}else
			this.mimeType = mimeType;

	public String getShortMimeType(){
		// 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:
				return "csv";
					this.shortMimeType = "csv";
					break;
				case TAB_SEPARATOR:
				return "tsv";
					this.shortMimeType = "tsv";
					break;
				default:
				return "text";
					this.shortMimeType = "text";
			}
		}else
			this.shortMimeType = typeAlias;
	}

	@Override
	public String getMimeType(){
		return mimeType;
	}

	@Override
	public String getShortMimeType(){
		return shortMimeType;
	}

	@Override
	public String getDescription(){
		return null;
	}

	@Override
	public String getFileExtension(){
		switch(separator.charAt(0)){
			case COMMA_SEPARATOR: