001: /*
002: * FindBugs - Find Bugs in Java programs
003: * Copyright (C) 2006, University of Maryland
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019:
020: package edu.umd.cs.findbugs.classfile.impl;
021:
022: import java.io.IOException;
023:
024: import edu.umd.cs.findbugs.classfile.ICodeBase;
025: import edu.umd.cs.findbugs.classfile.ICodeBaseLocator;
026: import edu.umd.cs.findbugs.classfile.ResourceNotFoundException;
027:
028: /**
029: * Codebase locator for a zip/jar archive nested inside a parent codebase.
030: *
031: * @author David Hovemeyer
032: */
033: public class NestedZipFileCodeBaseLocator implements ICodeBaseLocator {
034: private final ICodeBase parentCodeBase;
035: private final String resourceName;
036:
037: public NestedZipFileCodeBaseLocator(ICodeBase parentCodeBase,
038: String resourceName) {
039: this .parentCodeBase = parentCodeBase;
040: this .resourceName = resourceName;
041: }
042:
043: /**
044: * @return Returns the parentCodeBase.
045: */
046: public ICodeBase getParentCodeBase() {
047: return parentCodeBase;
048: }
049:
050: /**
051: * @return Returns the resourceName.
052: */
053: public String getResourceName() {
054: return resourceName;
055: }
056:
057: /* (non-Javadoc)
058: * @see edu.umd.cs.findbugs.classfile.ICodeBaseLocator#createRelativeCodeBaseLocator(java.lang.String)
059: */
060: public ICodeBaseLocator createRelativeCodeBaseLocator(
061: String relativePath) {
062: // The relative path indicates another codebase (archive) in the same parent codebase
063: return new NestedZipFileCodeBaseLocator(parentCodeBase,
064: relativePath);
065: }
066:
067: /* (non-Javadoc)
068: * @see edu.umd.cs.findbugs.classfile.ICodeBaseLocator#openCodeBase()
069: */
070: public ICodeBase openCodeBase() throws ResourceNotFoundException,
071: IOException {
072: return ClassFactory.createNestedZipFileCodeBase(this );
073: }
074:
075: /* (non-Javadoc)
076: * @see java.lang.Object#toString()
077: */
078: @Override
079: public String toString() {
080: return "nested:[" + parentCodeBase.getCodeBaseLocator() + "]"
081: + resourceName;
082: }
083:
084: /* (non-Javadoc)
085: * @see java.lang.Object#equals(java.lang.Object)
086: */
087: @Override
088: public boolean equals(Object obj) {
089: if (obj == null || obj.getClass() != this .getClass()) {
090: return false;
091: }
092: NestedZipFileCodeBaseLocator other = (NestedZipFileCodeBaseLocator) obj;
093: return this .parentCodeBase.equals(other.parentCodeBase)
094: && this .resourceName.equals(other.resourceName);
095: }
096:
097: /* (non-Javadoc)
098: * @see java.lang.Object#hashCode()
099: */
100: @Override
101: public int hashCode() {
102: return 7919 * parentCodeBase.hashCode()
103: + resourceName.hashCode();
104: }
105: }
|