package org.openpnp.spi.base;
import java.util.Collections;
import java.util.List;
import javax.swing.Icon;
import org.openpnp.gui.support.Icons;
import org.openpnp.model.AbstractModelObject;
import org.openpnp.model.Configuration;
import org.openpnp.model.Part;
import org.openpnp.spi.Head;
import org.openpnp.spi.Nozzle;
import org.openpnp.spi.NozzleTip;
import org.openpnp.util.IdentifiableList;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
public abstract class AbstractNozzle extends AbstractModelObject implements Nozzle {
@ElementList(required = false)
protected IdentifiableList<NozzleTip> nozzleTips = new IdentifiableList<>();
@Attribute
protected String id;
@Attribute(required = false)
protected String name;
protected Head head;
protected Part part;
public AbstractNozzle() {
this.id = Configuration.createId("NOZ");
this.name = getClass().getSimpleName();
}
@Override
public List<NozzleTip> getNozzleTips() {
return Collections.unmodifiableList(nozzleTips);
}
@Override
public String getId() {
return id;
}
@Override
public Head getHead() {
return head;
}
@Override
public void setHead(Head head) {
this.head = head;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
firePropertyChange("name", null, name);
}
@Override
public Part getPart() {
return part;
}
@Override
public Icon getPropertySheetHolderIcon() {
return Icons.captureTool;
}
@Override
public void addNozzleTip(NozzleTip nozzleTip) throws Exception {
nozzleTips.add(nozzleTip);
fireIndexedPropertyChange("nozzleTips", nozzleTips.size() - 1, null, nozzleTip);
}
@Override
public void removeNozzleTip(NozzleTip nozzleTip) {
int index = nozzleTips.indexOf(nozzleTip);
if (nozzleTips.remove(nozzleTip)) {
fireIndexedPropertyChange("nozzleTips", index, nozzleTip, null);
}
}
}