156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson/* 256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Copyright (C) 2010 Google Inc. 356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Licensed under the Apache License, Version 2.0 (the "License"); 556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * you may not use this file except in compliance with the License. 656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * You may obtain a copy of the License at 756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * http://www.apache.org/licenses/LICENSE-2.0 956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * 1056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Unless required by applicable law or agreed to in writing, software 1156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * distributed under the License is distributed on an "AS IS" BASIS, 1256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * See the License for the specific language governing permissions and 1456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * limitations under the License. 1556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson */ 1656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 1756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonpackage com.google.clearsilver.jsilver.adaptor; 1856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 1956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport com.google.clearsilver.jsilver.JSilverOptions; 2056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport com.google.clearsilver.jsilver.data.Data; 2156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport com.google.clearsilver.jsilver.data.DataFactory; 2256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport com.google.clearsilver.jsilver.data.Parser; 2356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport com.google.clearsilver.jsilver.exceptions.JSilverBadSyntaxException; 2456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport org.clearsilver.CSFileLoader; 2656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport org.clearsilver.HDF; 2756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport java.io.FileWriter; 2956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport java.io.IOException; 3056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport java.io.StringReader; 3156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport java.util.Date; 3256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonimport java.util.TimeZone; 3356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 3456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson/** 3556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * Adaptor that wraps a JSilver Data object so it can be used as an HDF object. 3656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson */ 3756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonpublic class JHdf implements HDF { 3856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 3956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // Only changed to null on close() 4056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private Data data; 4156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private final DataFactory dataFactory; 4256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private final JSilverOptions options; 4356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private final LoadPathToFileCache loadPathCache; 4556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson private ResourceLoaderAdaptor resourceLoader; 4656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson JHdf(Data data, DataFactory dataFactory, LoadPathToFileCache loadPathCache, JSilverOptions options) { 4956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.data = data; 5056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.loadPathCache = loadPathCache; 5156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.dataFactory = dataFactory; 5256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.options = options; 5356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.resourceLoader = new ResourceLoaderAdaptor(this, loadPathCache, null); 5456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 5556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 5656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson static JHdf cast(HDF hdf) { 5756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (!(hdf instanceof JHdf)) { 5856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson throw new IllegalArgumentException("HDF object not of type JHdf. " 5956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson + "Make sure you use the same ClearsilverFactory to construct all " 6056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson + "related HDF and CS objects."); 6156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 6256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return (JHdf) hdf; 6356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 6456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 6556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Data getData() { 6656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return data; 6756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 6856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 6956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson ResourceLoaderAdaptor getResourceLoaderAdaptor() { 7056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return resourceLoader; 7156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 7256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 7356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 7456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void close() { 7556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // This looks pointless but it actually reduces the lifetime of the large 7656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // Data object as far as the garbage collector is concerned and 7756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // dramatically improves performance. 7856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data = null; 7956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 8056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 8156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 8256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public boolean readFile(String filename) throws IOException { 8356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson dataFactory.loadData(filename, resourceLoader, data); 8456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return false; 8556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 8656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 8756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 8856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public CSFileLoader getFileLoader() { 8956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return resourceLoader.getCSFileLoader(); 9056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 9156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 9256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 9356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void setFileLoader(CSFileLoader fileLoader) { 9456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson this.resourceLoader = new ResourceLoaderAdaptor(this, loadPathCache, fileLoader); 9556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 9656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 9756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 9856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public boolean writeFile(String filename) throws IOException { 9956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson FileWriter writer = new FileWriter(filename); 10056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson try { 10156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.write(writer, 2); 10256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } finally { 10356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson writer.close(); 10456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 10556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return true; 10656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 10756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 10856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 10956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public boolean readString(String content) { 11056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Parser hdfParser = dataFactory.getParser(); 11156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson try { 11256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson hdfParser.parse(new StringReader(content), data, new Parser.ErrorHandler() { 11356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void error(int line, String lineContent, String fileName, String errorMessage) { 11456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson throw new JSilverBadSyntaxException("HDF parsing error : '" + errorMessage + "'", 11556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson lineContent, fileName, line, JSilverBadSyntaxException.UNKNOWN_POSITION, null); 11656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 11756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson }, resourceLoader, null, options.getIgnoreAttributes()); 11856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return true; 11956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } catch (IOException e) { 12056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return false; 12156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 12256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 12356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 12456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 12556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public int getIntValue(String hdfName, int defaultValue) { 12656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return data.getIntValue(hdfName, defaultValue); 12756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 12856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 12956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 13056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String getValue(String hdfName, String defaultValue) { 13156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return data.getValue(hdfName, defaultValue); 13256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 13356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 13456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 13556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void setValue(String hdfName, String value) { 13656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.setValue(hdfName, value); 13756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 13856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 13956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 14056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void removeTree(String hdfName) { 14156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.removeTree(hdfName); 14256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 14356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 14456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 14556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void setSymLink(String hdfNameSrc, String hdfNameDest) { 14656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.setSymlink(hdfNameSrc, hdfNameDest); 14756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 14856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 14956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 15056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void exportDate(String hdfName, TimeZone timeZone, Date date) { 15156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson throw new UnsupportedOperationException("TBD"); 15256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 15356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 15456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 15556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void exportDate(String hdfName, String tz, int tt) { 15656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson throw new UnsupportedOperationException("TBD"); 15756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 15856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 15956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 16056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public HDF getObj(String hdfpath) { 16156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Data d = data.getChild(hdfpath); 16256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return d == null ? null : new JHdf(d, dataFactory, loadPathCache, options); 16356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 16456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 16556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 16656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public HDF getChild(String hdfpath) { 16756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Data d = data.getChild(hdfpath); 16856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (d == null) { 16956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return null; 17056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 17156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson for (Data child : d.getChildren()) { 17256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (child.isFirstSibling()) { 17356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return new JHdf(child, dataFactory, loadPathCache, options); 17456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } else { 17556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // The first child returned should be the first sibling. Throw an error 17656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // if not. 17756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson throw new IllegalStateException("First child was not first sibling."); 17856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 17956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 18056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return null; 18156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 18256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 18356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 18456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public HDF getRootObj() { 18556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Data root = data.getRoot(); 18656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (root == data) { 18756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return this; 18856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } else { 18956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return new JHdf(root, dataFactory, loadPathCache, options); 19056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 19156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 19256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 19356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 19456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public boolean belongsToSameRoot(HDF hdf) { 19556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson JHdf jHdf = cast(hdf); 19656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return this.data.getRoot() == jHdf.data.getRoot(); 19756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 19856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 19956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 20056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public HDF getOrCreateObj(String hdfpath) { 20156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return new JHdf(data.createChild(hdfpath), dataFactory, loadPathCache, options); 20256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 20356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 20456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 20556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String objName() { 20656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return data.getName(); 20756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 20856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 20956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 21056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String objValue() { 21156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return data.getValue(); 21256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 21356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 21456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 21556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public HDF objChild() { 21656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson for (Data child : data.getChildren()) { 21756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (child.isFirstSibling()) { 21856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return new JHdf(child, dataFactory, loadPathCache, options); 21956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 22056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 22156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return null; 22256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 22356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 22456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 22556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public HDF objNext() { 22656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson Data next = data.getNextSibling(); 22756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return next == null ? null : new JHdf(next, dataFactory, loadPathCache, options); 22856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 22956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 23056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 23156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void copy(String hdfpath, HDF src) { 23256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson JHdf srcJHdf = cast(src); 23356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (hdfpath.equals("")) { 23456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.copy(srcJHdf.data); 23556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } else { 23656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.copy(hdfpath, srcJHdf.data); 23756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 23856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 23956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 24056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 24156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String dump() { 24256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson StringBuilder sb = new StringBuilder(); 24356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson try { 24456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.write(sb, 0); 24556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return sb.toString(); 24656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } catch (IOException e) { 24756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return null; 24856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 24956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 25056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 25156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 25256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String writeString() { 25356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return dump(); 25456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 25556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 25656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson @Override 25756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public String toString() { 25856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson return dump(); 25956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 26056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 26156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson /** 26256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * JSilver-specific method that optimizes the underlying data object. Should only be used on 26356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson * long-lived HDF objects (e.g. global HDF). 26456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson */ 26556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson public void optimize() { 26656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson data.optimize(); 26756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 26856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson} 269