package jdepend.model.component.modelconf;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import jdepend.metadata.CandidateUtil;
import jdepend.metadata.JavaClass;
/**
* 组件模型下一个组件的配置信息
*
* @author wangdg
*
*/
public abstract class ComponentConf implements Serializable, Cloneable {
private String name;
private int layer;
private List<String> itemIds = new ArrayList<String>();
public ComponentConf(String name) {
super();
this.name = name;
}
public ComponentConf(String name, int layer) {
super();
this.name = name;
this.layer = layer;
}
public ComponentConf(String name, List<String> itemIds) {
super();
this.name = name;
this.itemIds = itemIds;
}
public String getName() {
return name;
}
public int getLayer() {
return layer;
}
public void setLayer(int layer) {
this.layer = layer;
}
public Collection<String> getItemIds() {
return itemIds;
}
public void addItemIds(List<String> joinItemIds) {
for (String itemid : joinItemIds) {
this.addItemId(itemid);
}
}
public void addItemId(String itemId) {
if (!itemIds.contains(itemId)) {
itemIds.add(itemId);
}
}
public void deleteItemIds(List<String> deleteItemIds) {
Iterator<String> iterator = this.itemIds.iterator();
while (iterator.hasNext()) {
if (deleteItemIds.contains(iterator.next())) {
iterator.remove();
}
}
}
public void deleteItemId(String deleteItemId) {
this.itemIds.remove(deleteItemId);
}
public abstract boolean isMember(JavaClass javaClass);
protected boolean containPlace() {
if (itemIds.isEmpty()) {
return false;
} else {
return CandidateUtil.containPlace(itemIds.iterator().next());
}
}
public abstract ComponentConf clone() throws CloneNotSupportedException;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final ComponentConf other = (ComponentConf) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}