001/* 002 * ModeShape (http://www.modeshape.org) 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.modeshape.connector.git; 017 018import java.io.BufferedInputStream; 019import java.io.IOException; 020import java.io.InputStream; 021import org.eclipse.jgit.lib.ObjectId; 022import org.eclipse.jgit.lib.ObjectLoader; 023import org.modeshape.jcr.mimetype.MimeTypeDetector; 024import org.modeshape.jcr.value.BinaryKey; 025import org.modeshape.jcr.value.BinaryValue; 026import org.modeshape.jcr.value.binary.AbstractBinary; 027import org.modeshape.jcr.value.binary.ExternalBinaryValue; 028 029/** 030 * A {@link BinaryValue} implementation used to read the content of a specific object ID from the supplied repository. This class 031 * computes the {@link AbstractBinary#getMimeType() MIME type} lazily or upon serialization. 032 */ 033public class GitBinaryValue extends ExternalBinaryValue { 034 private static final long serialVersionUID = 1L; 035 036 private transient ObjectLoader loader; 037 038 public GitBinaryValue( ObjectId id, 039 ObjectLoader loader, 040 String sourceName, 041 String nameHint, 042 MimeTypeDetector mimeTypeDetector ) { 043 super(new BinaryKey(id.getName()), sourceName, id.getName(), loader.getSize(), nameHint, mimeTypeDetector); 044 this.loader = loader; 045 } 046 047 @Override 048 protected InputStream internalStream() throws IOException { 049 return new BufferedInputStream(loader.openStream()); 050 } 051}