package jdepend.metadata;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import jdepend.framework.exception.JDependException;
/**
* The <code>JavaPackage</code> class represents a Java package.
*
* @author <b>Abner</b>
*
*/
public final class JavaPackage implements Serializable, Candidate, Comparable<JavaPackage> {
/**
*
*/
private static final long serialVersionUID = -2047744159854799747L;
private String name;
private String place;
private Collection<JavaClass> classes;
public static final String Default = "Default";
public JavaPackage(String place, String name) {
this.place = place;
this.name = name;
this.classes = new ArrayList<JavaClass>();
}
public void addClass(JavaClass clazz) {
classes.add(clazz);
clazz.setJavaPackage(this);
}
public void removeClass(JavaClass javaClass) {
classes.remove(javaClass);
javaClass.setJavaPackage(null);
}
/*
* (non-Javadoc)
*
* @see jdepend.framework.JDependUnit#getClasses()
*/
public Collection<JavaClass> getClasses() {
return classes;
}
/*
* (non-Javadoc)
*
* @see jdepend.framework.JDependUnit#getClassCount()
*/
public int getClassCount() {
return classes.size();
}
public boolean isInner() {
for (JavaClass javaClass : this.getClasses()) {
if (javaClass.isInner()) {
return true;
}
}
return false;
}
public JavaPackage clone(Map<String, JavaClass> javaClasses) throws JDependException {
JavaPackage obj = new JavaPackage(place, name);
for (JavaClass javaClass : this.classes) {
obj.addClass(javaClasses.get(javaClass.getId()));
}
return obj;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPlace() {
return place;
}
public void setPlace(String place) {
this.place = place;
}
@Override
public String getId() {
return CandidateUtil.getId(this);
}
@Override
public int size() {
return this.getClassCount();
}
@Override
public String toString() {
return "JavaPackage [classes.size()=" + classes.size() + ", name=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (getClass() != obj.getClass())
return false;
JavaPackage other = (JavaPackage) obj;
if (!getId().equals(other.getId()))
return false;
return true;
}
@Override
public int compareTo(JavaPackage o) {
return this.getId().compareTo(o.getId());
}
}