/** * Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.tools.aesh.core.internal.ansi; public class DefaultCommandFactory implements CommandFactory { public static final DefaultCommandFactory INSTANCE = new DefaultCommandFactory(); private DefaultCommandFactory() {} public Command create(String controlSequence) { int last = controlSequence.length() - 1; char c = controlSequence.charAt(last); CommandType type = CommandType.fromCharacter(c); if (type == null) { return null; } else { String arguments = controlSequence.substring(2, last); return create(type, arguments); } } private static Command create( CommandType type, String arguments) { switch (type) { case CURSOR_UP: return new CursorUp(arguments); case CURSOR_DOWN: return new CursorDown(arguments); case CURSOR_FORWARD: return new CursorForward(arguments); case CURSOR_BACK: return new CursorBack(arguments); case CURSOR_NEXT_LINE: return new CursorNextLine(arguments); case CURSOR_PREVIOUS_LINE: return new CursorPreviousLine(arguments); case CURSOR_HORIZONTAL_ABSOLUTE: return new CursorHorizontalAbsolute(arguments); case CURSOR_POSITION: return new CursorPosition(arguments); case ERASE_DATA: return new EraseData(arguments); case ERASE_IN_LINE: return new EraseInLine(arguments); case SCROLL_UP: return new ScrollUp(arguments); case SCROLL_DOWN: return new ScrollDown(arguments); case HORIZONTAL_AND_VERTICAL_POSITION: return new HorizontalAndVerticalPosition(arguments); case SELECT_GRAPHIC_RENDITION: return new SelectGraphicRendition(arguments); case DEVICE_STATUS_REPORT: return new DeviceStatusReport(arguments); case SAVE_CURSOR_POSITION: return new SaveCursorPosition(arguments); case RESTORE_CURSOR_POSITION: return new RestoreCursorPosition(arguments); case HIDE_CURSOR: return new HideCursor(arguments); case SHOW_CURSOR: return new ShowCursor(arguments); default: throw new RuntimeException("Unknown Ansi Control Sequence"); } } }