/** * Copyright (C) 2010 - 2016 52°North Initiative for Geospatial Open Source * Software GmbH * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * If the program is linked with libraries which are licensed under one of * the following licenses, the combination of the program with the linked * library is not considered a "derivative work" of the program: * * • Apache License, version 2.0 * • Apache Software License, version 1.0 * • GNU Lesser General Public License, version 3 * • Mozilla Public License, versions 1.0, 1.1 and 2.0 * • Common Development and Distribution License (CDDL), version 1.0 * * Therefore the distribution of the program linked with libraries licensed * under the aforementioned licenses, is permitted by the copyright holders * if the distribution is compliant with both the GNU General Public * License version 2 and the aforementioned licenses. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. */ package org.n52.wps.server.r.data; import org.n52.wps.io.data.GenericFileDataConstants; import org.n52.wps.io.data.IData; import org.n52.wps.io.data.binding.complex.GTVectorDataBinding; import org.n52.wps.io.data.binding.complex.GenericFileDataBinding; import org.n52.wps.io.data.binding.complex.GenericFileDataWithGTBinding; import org.n52.wps.io.data.binding.literal.LiteralBooleanBinding; import org.n52.wps.io.data.binding.literal.LiteralDoubleBinding; import org.n52.wps.io.data.binding.literal.LiteralIntBinding; import org.n52.wps.io.data.binding.literal.LiteralStringBinding; import org.slf4j.LoggerFactory; /** * Data types which are supported by scripts Note that every IData class must be parsed from an to are to be * handled successful --> GenericRProcess TODO: restructure dependent classes & methods for new attributes * * FIXME use either this class or the fiel R_Datatype.conf, potentially refactor the format of the file. */ public enum RDataType implements RTypeDefinition { // literal data: STRING("string", "xs:string", LiteralStringBinding.class), CHARACTER("character", "xs:string", LiteralStringBinding.class), INTEGER("integer", "xs:integer", LiteralIntBinding.class), DOUBLE("double", "xs:double", LiteralDoubleBinding.class), BOOLEAN("boolean", "xs:boolean", LiteralBooleanBinding.class), // geodata: DBASE("dbf", GenericFileDataConstants.MIME_TYPE_DBASE, GenericFileDataWithGTBinding.class, true, null, "base64"), DGN( "dgn", GenericFileDataConstants.MIME_TYPE_DGN, GenericFileDataWithGTBinding.class, true, null, "base64"), GEOTIFF( "geotiff", GenericFileDataConstants.MIME_TYPE_GEOTIFF, GenericFileDataWithGTBinding.class, true, null, "base64"), GEOTIFF2("geotiff_image", GenericFileDataConstants.MIME_TYPE_IMAGE_GEOTIFF, GenericFileDataWithGTBinding.class, true, null, "base64"), GEOTIFF_X("geotiff_x", GenericFileDataConstants.MIME_TYPE_X_GEOTIFF, GenericFileDataWithGTBinding.class, true, null, "base64"), IMG( "img", GenericFileDataConstants.MIME_TYPE_HDF, GenericFileDataWithGTBinding.class, true, null, "base64"), IMG2( "img_x", GenericFileDataConstants.MIME_TYPE_X_ERDAS_HFA, GenericFileDataWithGTBinding.class, true, null, "base64"), NETCDF("netcdf", GenericFileDataConstants.MIME_TYPE_NETCDF, GenericFileDataWithGTBinding.class, true, null, "base64"), NETCDF_X("netcdf_x", GenericFileDataConstants.MIME_TYPE_X_NETCDF, GenericFileDataWithGTBinding.class, true, null, "base64"), REMAP("remap", GenericFileDataConstants.MIME_TYPE_REMAPFILE, GenericFileDataWithGTBinding.class, true, null, "base64"), SHAPE( "shp", GenericFileDataConstants.MIME_TYPE_SHP, GenericFileDataWithGTBinding.class, true, null, "base64"), // SHAPE_ZIP("shp_zip",GenericFileDataConstants.MIME_TYPE_ZIPPED_SHP, // GenericFileDataBinding.class, // true), SHAPE_ZIP2("shp_x", GenericFileDataConstants.MIME_TYPE_ZIPPED_SHP, GTVectorDataBinding.class, true, null, "base64"), KML( "kml", GenericFileDataConstants.MIME_TYPE_KML, GenericFileDataWithGTBinding.class, true, null, "UTF-8"), // graphical data GIF("gif", GenericFileDataConstants.MIME_TYPE_IMAGE_GIF, GenericFileDataBinding.class, true, null, "base64"), JPEG("jpeg", GenericFileDataConstants.MIME_TYPE_IMAGE_JPEG, GenericFileDataBinding.class, true, null, "base64"), JPEG2("jpg", GenericFileDataConstants.MIME_TYPE_IMAGE_JPEG, GenericFileDataBinding.class, true, null, "base64"), PNG("png", GenericFileDataConstants.MIME_TYPE_IMAGE_PNG, GenericFileDataBinding.class, true, null, "base64"), TIFF("tiff", GenericFileDataConstants.MIME_TYPE_TIFF, GenericFileDataBinding.class, true, null, "base64"), // file data and xml: TEXT_PLAIN("text", GenericFileDataConstants.MIME_TYPE_PLAIN_TEXT, GenericFileDataBinding.class, true), TEXT_XML( "xml", GenericFileDataConstants.MIME_TYPE_TEXT_XML, GenericFileDataBinding.class, true), FILE("file", "application/unknown", GenericFileDataBinding.class), PDF("pdf", "application/pdf", GenericFileDataBinding.class, true, null, null), // "base64"), STY("sty", "application/sty", GenericFileDataBinding.class, true, null, "base64"), RNW("rnw", "application/rnw", GenericFileDataBinding.class, true, null, "base64"); // TEXT_XML2("text_xml", GenericFileDataConstants.MIME_TYPE_TEXT_XML, // GenericFileDataBinding.class,true); private String key; private String processKey; private Class< ? extends IData> iDataClass; private boolean isComplex; // private static final Logger log = LoggerFactory.getLogger(RDataType.class); String schema; String encoding = "UTF-8"; private RDataType(String key, String processKey, Class< ? extends IData> iDataClass, boolean isComplex, String schema, String encoding) { this.key = key; this.processKey = processKey; this.iDataClass = iDataClass; this.isComplex = isComplex; this.schema = schema; this.encoding = encoding; setKey(key); setKey(processKey); } private RDataType(String key, String processKey, Class< ? extends IData> iDataClass, boolean isComplex) { this.key = key; this.processKey = processKey; this.iDataClass = iDataClass; this.isComplex = isComplex; setKey(key); setKey(processKey); } private RDataType(String key, String processKey, Class< ? extends IData> iDataClass) { this.key = key; this.processKey = processKey; this.iDataClass = iDataClass; this.isComplex = false; setKey(key); setKey(processKey); } private void setKey(String key) { RDataTypeRegistry reg = RDataTypeRegistry.getInstance(); if ( !reg.containsKey(key)) reg.register(this); else LoggerFactory.getLogger(RDataType.class).warn("Doubled definition of data type-key for notation '{}'. Only the first definition will be used for this key.", key); } @Override public String getKey() { return this.key; } @Override public String getProcessKey() { return this.processKey; } @Override public boolean isComplex() { return this.isComplex; } @Override public String getEncoding() { if (this.isComplex) return this.encoding; return null; } @Override public String getSchema() { return this.schema; } @Override public Class< ? extends IData> getIDataClass() { return this.iDataClass; } }