/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program 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 General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.plugins.platform.content.yum;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* The content class is the base class for yum file content. This includes the medatadata as well as the packages
* (rpms).
*
* @author jortel
*/
public abstract class Content {
/**
* The current yum request.
*/
protected Request request;
/**
* A stream copy buffer.
*/
protected byte[] bfr = new byte[10240];
/**
* Logger
*/
protected final Log log = LogFactory.getLog(Content.class);
/**
* Construct a new content object.
*
* @param request The request that is constructing the object.
*/
protected Content(Request request) {
this.request = request;
}
public abstract long length() throws Exception;
public abstract void writeContent(OutputStream ostr) throws Exception;
public abstract void writeHeader(OutputStream ostr) throws Exception;
public abstract InputStream openStream() throws Exception;
/**
* Delete the local content artifact.
*/
public void delete() {
}
/**
* Transfer bytes from the input stream to the output stream.
*
* @param istr An input stream.
* @param ostr An output stream.
*
* @throws IOException On all errors.
*/
protected void transfer(InputStream istr, OutputStream ostr) throws IOException {
while (true) {
int bytesread = istr.read(bfr);
if (bytesread != -1) {
ostr.write(bfr, 0, bytesread);
} else {
break;
}
}
ostr.flush();
}
protected YumContext context() {
return request.context();
}
}