// $Id: NcSDString.java,v 1.3 2004-02-06 15:23:49 donm Exp $ /* * Copyright 1997-2000 Unidata Program Center/University Corporation for * Atmospheric Research, P.O. Box 3000, Boulder, CO 80307, * support@unidata.ucar.edu. * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library 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 Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package dods.servers.netcdf; import dods.dap.Server.*; import dods.dap.*; import dods.servers.agg.HasProxyObject; import java.io.IOException; import java.io.EOFException; import ucar.ma2.*; import ucar.nc2.*; /** * Wraps a netcdf scalar or 1D char variable. * @version $Revision: 1.3 $ * @author jcaron */ public class NcSDString extends SDString implements HasProxyObject { private Variable ncVar; private String val = null; /** * Constructor * @param ncVar: the netcdf Variable */ NcSDString(Variable ncVar) { super(ncVar.getName()); this.ncVar = ncVar; } /** * Constructor * @param name: name of variable * @param val: the value. */ NcSDString(String name, String val) { super(name); this.val = val; if (val != null) setValue(val); } /** get/set the underlying proxy */ public void setProxy(Object v) { this.ncVar = (Variable) v; } public Object getProxy() { return ncVar; } /** Read the value (parameters are ignored).*/ public boolean read(String datasetName, Object specialO) throws IOException { if (val == null) { // read first time if (ncVar.getRank() == 0) { // scalar char - convert to a String ArrayChar.D0 a = (ArrayChar.D0) ncVar.read(); byte[] b = new byte[1]; b[0] = (byte) a.get(); val = new String(b); } else { // 1D ArrayChar.D1 a = (ArrayChar.D1) ncVar.read(); val = a.getString(a.getIndex()); // fetches the entire String } } setValue( val); setRead(true); return (false); } } /* Change History: $Log: not supported by cvs2svn $ Revision 1.1.1.1 2001/09/26 15:34:30 caron checkin beta1 */