/* * Copyright 2008 Federal Chancellery Austria and * Graz University of Technology * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package at.gv.egiz.stal.impl; import at.gv.egiz.stal.HashDataInput; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * * @author clemens */ public class ByteArrayHashDataInput implements HashDataInput { private static final Log log = LogFactory.getLog(ByteArrayHashDataInput.class); protected byte[] hashData; protected String id; protected String mimeType; protected String encoding; public ByteArrayHashDataInput(byte[] hashData, String id, String mimeType, String encoding) { if (hashData == null) { throw new NullPointerException("HashDataInput not provided."); } this.hashData = hashData; this.id = id; this.mimeType = mimeType; this.encoding = encoding; } /** * caches the hashdata input's stream * @param hdi to be cached */ public ByteArrayHashDataInput(HashDataInput hdi) { if (hdi == null) { throw new NullPointerException("HashDataInput not provided."); } InputStream is = hdi.getHashDataInput(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { byte[] buffer = new byte[1024]; for (int i = is.read(buffer); i > -1; i = is.read(buffer)) { baos.write(buffer, 0, i); } this.hashData = baos.toByteArray(); } catch (IOException ex) { log.error("Failed to cache provided HashDataInput: " + ex.getMessage(), ex); this.hashData = new byte[0]; } this.id = hdi.getReferenceId(); this.mimeType = hdi.getMimeType(); this.encoding = hdi.getEncoding(); } @Override public String getReferenceId() { return id; } @Override public String getMimeType() { return mimeType; } @Override public InputStream getHashDataInput() { return new ByteArrayInputStream(hashData); } /** * may be null * @return */ @Override public String getEncoding() { return encoding; } }