package org.goko.core.gcode.rs274ngcv3.instruction.builder; import java.util.List; import org.goko.core.common.exception.GkException; import org.goko.core.common.exception.GkTechnicalException; import org.goko.core.gcode.element.GCodeWord; import org.goko.core.gcode.rs274ngcv3.context.EnumUnit; import org.goko.core.gcode.rs274ngcv3.context.GCodeContext; import org.goko.core.gcode.rs274ngcv3.element.InstructionType; import org.goko.core.gcode.rs274ngcv3.instruction.UserLengthUnitsInstruction; import org.goko.core.gcode.rs274ngcv3.utils.GCodeWordUtils; public class UserLengthUnitsBuilder extends AbstractInstructionBuilder<UserLengthUnitsInstruction>{ public UserLengthUnitsBuilder() { super(InstructionType.USER_LENGTH_UNITS); } /** (inheritDoc) * @see org.goko.core.gcode.rs274ngcv3.instruction.IInstructionBuilder#match(org.goko.core.gcode.rs274ngcv3.context.GCodeContext, java.util.List) */ @Override public boolean match(GCodeContext context, List<GCodeWord> words) throws GkException { return GCodeWordUtils.containsWord("G20", words) || GCodeWordUtils.containsWord("G21", words); } /** (inheritDoc) * @see org.goko.core.gcode.rs274ngcv3.instruction.IInstructionBuilder#toInstruction(org.goko.core.gcode.rs274ngcv3.context.GCodeContext, java.util.List) */ @Override protected UserLengthUnitsInstruction getInstruction(GCodeContext context, List<GCodeWord> words) throws GkException { if(GCodeWordUtils.containsWord("G20", words)){ GCodeWordUtils.getAndRemoveWord("G20", words); return new UserLengthUnitsInstruction(EnumUnit.INCHES); }else if(GCodeWordUtils.containsWord("G21", words)){ GCodeWordUtils.getAndRemoveWord("G21", words); return new UserLengthUnitsInstruction(EnumUnit.MILLIMETERS); } throw new GkTechnicalException("No valid word for unit selection"); } }