/* * 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.core.domain.content.composite; import org.rhq.core.domain.content.ContentSource; import org.rhq.core.domain.content.PackageBits; import org.rhq.core.domain.content.PackageVersion; import java.io.Serializable; /** * Composite object built by a query that indicates if a package version's contents (its "bits") is loaded/available and * (if loaded) if the contents are stored in the database. * * @author John Mazzitelli * @see PackageBits#QUERY_PACKAGE_BITS_LOADED_STATUS_PACKAGE_VERSION_ID */ public class LoadedPackageBitsComposite implements Serializable { private static final long serialVersionUID = 1L; private final int packageVersionId; private final String fileName; private final Integer packageBitsId; private final boolean isPackageBitsInDatabase; public LoadedPackageBitsComposite(int packageVersionId, String fileName, Integer packageBitsId, boolean isPackageBitsInDatabase) { if ((packageBitsId == null) && isPackageBitsInDatabase) { throw new IllegalArgumentException("Does not make sense that there is no bits ID but bits are in DB"); } this.packageVersionId = packageVersionId; this.fileName = fileName; this.packageBitsId = packageBitsId; this.isPackageBitsInDatabase = isPackageBitsInDatabase; } /** * For use directly by JPQL NamedQueries. * * @param packageVersionId the ID of the {@link PackageVersion} this composite relates to * @param fileName the name of the package version file * @param packageBitsId the ID of the {@link PackageBits} this composite relates to - if <code>null</code> * the package bits have not been downloaded yet * @param isPackageBitsInDatabase considered <code>true</code> if not <code>null</code> and greater than 0 */ public LoadedPackageBitsComposite(int packageVersionId, String fileName, Number packageBitsId, Number isPackageBitsInDatabase) { this(packageVersionId, fileName, ((packageBitsId != null) ? new Integer(packageBitsId.intValue()) : null), (isPackageBitsInDatabase != null) && (isPackageBitsInDatabase.intValue() > 0)); } /** * The ID of the {@link PackageVersion} that this composite relates to. It is this package version whose contents is * examined. * * @return package version ID */ public int getPackageVersionId() { return packageVersionId; } /** * The name of the {@link PackageVersion#getFileName() package version file}. Useful if the package bits are stored * on the filesystem and you want to read in the bits. * * @return package version file name */ public String getFileName() { return fileName; } /** * The ID of the {@link PackageBits} that this composite relates to. If this is <code>null</code>, then the package * bits have not been downloaded and are {@link #isPackageBitsAvailable() not available}. * * @return package bits ID, or <code>null</code> */ public Integer getPackageBitsId() { return packageBitsId; } /** * Returns <code>true</code> if the contents of the {@link #getPackageVersionId() package version} is loaded and * available. If <code>false</code> is returned, then the contents are not stored anywhere and must be retrieved; * usually by either a {@link ContentSource} or by uploading from an agent. If this returns <code>false</code> then * you are guaranteed that {@link #isPackageBitsInDatabase()} will return <code>false</code>. * * <p>If this returns <code>true</code>, you can call {@link #getPackageBitsId()} to get the package bits ID.</p> * * @return flag to indicate if the package bits are loaded/available */ public boolean isPackageBitsAvailable() { return packageBitsId != null; } /** * Returns <code>true</code> if the contents of the {@link #getPackageVersionId() package version} are stored in the * database. If this is <code>true</code>, then by definition, you are guaranteed that * {@link #isPackageBitsAvailable()} will return <code>true</code>. If this returns <code>false</code>, but * {@link #isPackageBitsAvailable()} returns <code>true</code>, then the package bits are available, they just are * not stored in the database and to retrieve them you must use an appropriate mechanism based on where the bits are * stored (usually cached on a local file system). * * @return flag to indicate if the package bits are stored in the database */ public boolean isPackageBitsInDatabase() { return isPackageBitsInDatabase; } }