/* * An object representing a single GcodeCommand. The only tricky part about this * class is the commandNum, which is used in the GUI for indexing a table of * these objects. * * TODO: Get rid of the commandNum member. */ /* Copywrite 2012-2016 Will Winder This file is part of Universal Gcode Sender (UGS). UGS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. UGS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with UGS. If not, see <http://www.gnu.org/licenses/>. */ package com.willwinder.universalgcodesender.types; import com.willwinder.universalgcodesender.gcode.GcodePreprocessorUtils; /** * * @author wwinder */ public class GcodeCommand { private static final String ERROR = "error"; private String command; private String originalCommand; private String response; private String responseType; private Boolean sent = false; private Boolean done = false; private Boolean isOk = false; private Boolean isError = false; private Integer commandNum = -1; private Boolean isSkipped = false; private boolean isComment = false; private boolean hasComment = false; private String comment; private boolean isTemporaryParserModalChange = false; public GcodeCommand(String command) { this(command, -1); } public GcodeCommand(String command, int num) { this.command = command; this.commandNum = num; this.comment = GcodePreprocessorUtils.parseComment(command); if (this.hasComment()) { this.command = GcodePreprocessorUtils.removeComment(command); if (this.command.trim().length() == 0) this.isComment = true; } } public GcodeCommand(String command, String originalCommand, String comment, int num) { this.command = command; this.originalCommand = originalCommand; this.comment = comment; this.commandNum = num; } /** Setters. */ public void setCommand(String command) { this.command = command; } public void setCommandNumber(int i) { this.commandNum = i; } public void setResponse(String response) { this.response = response; this.parseResponse(); this.done = this.isDone(); } public void setSent(Boolean sent) { this.sent = sent; } public void setSkipped(Boolean skipped) { this.isSkipped = skipped; } /** Getters. */ @Override public String toString() { return getCommandString() + "("+commandNum+")"; } public String getCommandString() { return this.command; } public String getOriginalCommandString() { return this.originalCommand == null ? this.command : this.originalCommand; } public int getCommandNumber() { return this.commandNum; } public String getResponse() { return this.response; } public Boolean isSent() { return this.sent; } public Boolean isOk() { return this.isOk; } public Boolean isError() { return this.isError; } public Boolean isSkipped() { return this.isSkipped; } public boolean isComment() { return this.isComment; } public boolean hasComment() { return this.comment != null && this.comment.length() != 0; } public String getComment() { return this.comment; } /** * True for things like Jogging, false for commands from a gcode file */ public boolean isTemporaryParserModalChange() { return isTemporaryParserModalChange; } /** * True for things like Jogging, false for commands from a gcode file */ public void setTemporaryParserModalChange(boolean isGUICommand) { this.isTemporaryParserModalChange = isGUICommand; } public Boolean parseResponse() { // No response? Set it to false. if (response.length() < 0) { this.isOk = false; this.isError = false; } // Command complete, can be 'ok' or 'error'. if (response.toLowerCase().equals("ok")) { this.isOk = true; this.isError = false; } else if (response.toLowerCase().startsWith(ERROR)) { this.isOk = false; this.isError = true; } return this.isOk; } public String responseString() { String returnString = ""; String number = ""; if (this.commandNum != -1) { number = this.commandNum.toString(); } if (this.isOk) { returnString = "ok" + number; } else if (this.isError) { returnString = ERROR+number+"["+response.substring("error: ".length()) + "]"; } return returnString; } public Boolean isDone() { return (this.response != null); } public static Boolean isOkErrorResponse(String response) { if (response.toLowerCase().equals("ok")) { return true; } else if (response.toLowerCase().startsWith(ERROR)) { return true; } return false; } }