package org.openpnp.machine.reference;
import javax.swing.Action;
import org.openpnp.ConfigurationListener;
import org.openpnp.gui.support.PropertySheetWizardAdapter;
import org.openpnp.gui.support.Wizard;
import org.openpnp.machine.reference.wizards.ReferencePasteDispenserConfigurationWizard;
import org.openpnp.model.Configuration;
import org.openpnp.model.Length;
import org.openpnp.model.LengthUnit;
import org.openpnp.model.Location;
import org.openpnp.spi.PropertySheetHolder;
import org.openpnp.spi.base.AbstractPasteDispenser;
import org.pmw.tinylog.Logger;
import org.simpleframework.xml.Element;
public class ReferencePasteDispenser extends AbstractPasteDispenser
implements ReferenceHeadMountable {
@Element
private Location headOffsets;
@Element(required = false)
protected Length safeZ = new Length(0, LengthUnit.Millimeters);
protected ReferenceMachine machine;
protected ReferenceDriver driver;
public ReferencePasteDispenser() {
Configuration.get().addListener(new ConfigurationListener.Adapter() {
@Override
public void configurationLoaded(Configuration configuration) throws Exception {
machine = (ReferenceMachine) configuration.getMachine();
driver = machine.getDriver();
}
});
}
@Override
public Location getHeadOffsets() {
return headOffsets;
}
@Override
public void setHeadOffsets(Location headOffsets) {
this.headOffsets = headOffsets;
}
@Override
public void dispense(Location startLocation, Location endLocation,
long dispenseTimeMilliseconds) throws Exception {
Logger.debug("{}.dispense()", getName());
Thread.sleep(dispenseTimeMilliseconds);
driver.dispense(this, startLocation, endLocation, dispenseTimeMilliseconds);
machine.fireMachineHeadActivity(head);
}
@Override
public void moveTo(Location location, double speed) throws Exception {
Logger.debug("{}.moveTo({}, {})", getName(), location, speed);
driver.moveTo(this, location, speed);
machine.fireMachineHeadActivity(head);
}
@Override
public void moveToSafeZ(double speed) throws Exception {
Logger.debug("{}.moveToSafeZ({})", getName(), speed);
Length safeZ = this.safeZ.convertToUnits(getLocation().getUnits());
Location l = new Location(getLocation().getUnits(), Double.NaN, Double.NaN,
safeZ.getValue(), Double.NaN);
driver.moveTo(this, l, speed);
machine.fireMachineHeadActivity(head);
}
@Override
public Location getLocation() {
return driver.getLocation(this);
}
@Override
public Wizard getConfigurationWizard() {
return new ReferencePasteDispenserConfigurationWizard(this);
}
@Override
public String getPropertySheetHolderTitle() {
return getClass().getSimpleName() + " " + getName();
}
@Override
public PropertySheetHolder[] getChildPropertySheetHolders() {
return null;
}
@Override
public PropertySheet[] getPropertySheets() {
return new PropertySheet[] {new PropertySheetWizardAdapter(getConfigurationWizard())};
}
@Override
public Action[] getPropertySheetHolderActions() {
// TODO Auto-generated method stub
return null;
}
@Override
public String toString() {
return getName();
}
public Length getSafeZ() {
return safeZ;
}
public void setSafeZ(Length safeZ) {
this.safeZ = safeZ;
}
@Override
public void moveTo(Location location) throws Exception {
moveTo(location, getHead().getMachine().getSpeed());
}
@Override
public void moveToSafeZ() throws Exception {
moveToSafeZ(getHead().getMachine().getSpeed());
}
}