Copyright (c) 2000, 2015 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.core;
import java.util.zip.ZipFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.jdt.core.IJarEntryResource;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.internal.core.util.Util;
public abstract class JarEntryResource extends PlatformObject implements IJarEntryResource {
protected Object parent;
protected String simpleName;
public JarEntryResource(String simpleName) {
this.simpleName = simpleName;
}
public abstract JarEntryResource clone(Object newParent);
@Override
public boolean equals(Object obj) {
if (! (obj instanceof JarEntryResource))
return false;
JarEntryResource other = (JarEntryResource) obj;
return this.parent.equals(other.parent) && this.simpleName.equals(other.simpleName);
}
protected String getEntryName() {
String parentEntryName;
if (this.parent instanceof IPackageFragment) {
String elementName = ((IPackageFragment) this.parent).getElementName();
parentEntryName = elementName.length() == 0 ? "" : elementName .replace('.', '/') + '/'; //$NON-NLS-1$
} else if (this.parent instanceof IPackageFragmentRoot) {
parentEntryName = ""; //$NON-NLS-1$
} else {
parentEntryName = ((JarEntryDirectory) this.parent).getEntryName() + '/';
}
return parentEntryName + this.simpleName;
}
@Override
public IPath getFullPath() {
return new Path(getEntryName()).makeAbsolute();
}
@Override
public String getName() {
return this.simpleName;
}
@Override
public Object getParent() {
return this.parent;
}
@Override
public IPackageFragmentRoot getPackageFragmentRoot() {
if (this.parent instanceof IPackageFragment) {
return (IPackageFragmentRoot) ((IPackageFragment) this.parent).getParent();
} else if (this.parent instanceof IPackageFragmentRoot) {
return (IPackageFragmentRoot) this.parent;
} else {
return ((JarEntryDirectory) this.parent).getPackageFragmentRoot();
}
}
protected ZipFile getZipFile() throws CoreException {
if (this.parent instanceof IPackageFragment) {
JarPackageFragmentRoot root = (JarPackageFragmentRoot) ((IPackageFragment) this.parent).getParent();
return root.getJar();
} else if (this.parent instanceof JarPackageFragmentRoot) {
return ((JarPackageFragmentRoot) this.parent).getJar();
} else
return ((JarEntryDirectory) this.parent).getZipFile();
}
@Override
public int hashCode() {
return Util.combineHashCodes(this.simpleName.hashCode(), this.parent.hashCode());
}
@Override
public boolean isReadOnly() {
return true;
}
public void setParent(Object parent) {
this.parent = parent;
}
}