001 package org.LiveGraph.dataFile.common; 002 003 import com.softnetConsult.utils.string.StringTools; 004 005 006 /** 007 * This convenience class defines special tags for the LiveGraph data file format. 008 * 009 * <p style="font-size:smaller;">This product includes software developed by the 010 * <strong>LiveGraph</strong> project and its contributors.<br /> 011 * (<a href="http://www.live-graph.org" target="_blank">http://www.live-graph.org</a>)<br /> 012 * Copyright (c) 2007-2008 G. Paperin.<br /> 013 * All rights reserved. 014 * </p> 015 * <p style="font-size:smaller;">File: DataFormatTools.java</p> 016 * <p style="font-size:smaller;">Redistribution and use in source and binary forms, with or 017 * without modification, are permitted provided that the following terms and conditions are met: 018 * </p> 019 * <p style="font-size:smaller;">1. Redistributions of source code must retain the above 020 * acknowledgement of the LiveGraph project and its web-site, the above copyright notice, 021 * this list of conditions and the following disclaimer.<br /> 022 * 2. Redistributions in binary form must reproduce the above acknowledgement of the 023 * LiveGraph project and its web-site, the above copyright notice, this list of conditions 024 * and the following disclaimer in the documentation and/or other materials provided with 025 * the distribution.<br /> 026 * 3. All advertising materials mentioning features or use of this software or any derived 027 * software must display the following acknowledgement:<br /> 028 * <em>This product includes software developed by the LiveGraph project and its 029 * contributors.<br />(http://www.live-graph.org)</em><br /> 030 * 4. All advertising materials distributed in form of HTML pages or any other technology 031 * permitting active hyper-links that mention features or use of this software or any 032 * derived software must display the acknowledgment specified in condition 3 of this 033 * agreement, and in addition, include a visible and working hyper-link to the LiveGraph 034 * homepage (http://www.live-graph.org). 035 * </p> 036 * <p style="font-size:smaller;">THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY 037 * OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 038 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 039 * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 040 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 041 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 042 * </p> 043 * 044 * @author Greg Paperin (<a href="http://www.paperin.org" target="_blank">http://www.paperin.org</a>) 045 * @version {@value org.LiveGraph.LiveGraph#version} 046 */ 047 public class DataFormatTools { 048 049 /** 050 * Every comment line must start with this tag. 051 */ 052 public static final String TAGComment = "#"; 053 054 /** 055 * Every file description line must start with this tag. 056 */ 057 public static final String TAGFileInfo = "@"; 058 059 /** 060 * An alternatice separator definition in the first line of the file must be 061 * ocated wetween two instances of this tag. 062 */ 063 public static final String TAGSepDefinition = TAGComment + TAGComment; 064 065 /** 066 * This is the default data separator tag. 067 */ 068 public static final String DefaultSeparator = ","; 069 070 071 /** 072 * In order to read the data correctly a tag must not be confused with data value. 073 * This method checks whther a separator tag is valid. Note that while this method 074 * check for most common problems, it does not guarantee a correct separator. 075 * 076 * @param separator A proposed data deparator string. 077 * @return {@code true} if the specified separetor tag can be used with {@code double} 078 * data values; {@code false} if the specified tag is not valid. 079 */ 080 public static String isValidSeparator(String separator) { 081 082 if (null == separator) 083 return "The saparator may not be a null string"; 084 085 try { 086 double d = Double.parseDouble(separator); 087 return "Separator may not represent a legal real value (" + d + ")"; 088 } catch (NumberFormatException e) {} 089 090 try { 091 double d = StringTools.parseDouble(separator); 092 return "Separator may not represent a legal real value (" + d + ")"; 093 } catch (NumberFormatException e) {} 094 095 String SEP = separator.toUpperCase(); 096 if (SEP.equals("P") || SEP.equals("F") || SEP.equals("A") || SEP.equals("B") || SEP.equals("C") 097 || SEP.equals("D") || SEP.equals("E") || SEP.equals("F") || SEP.equals("H") || SEP.equals("NAN") 098 || SEP.equals("INFINITY") || SEP.equals("^") || SEP.equals("-") || SEP.equals("+") 099 || SEP.equals(".") || SEP.equals("..") || SEP.equals("...")) 100 return "Illegal separator (" + separator + ")"; 101 102 if (separator.contains("\n") || separator.contains("\r")) 103 return "Separator may not contain any line feeds or carriage returns"; 104 105 return null; 106 } 107 108 }