/* * Copyright (c) 2018-2019. Developed by Hedgecode. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.hedgecode.chess.qrcode; import org.hedgecode.chess.Parsers; import org.hedgecode.chess.game.Game; import org.hedgecode.chess.position.ParseException; import org.hedgecode.chess.position.Parser; import org.hedgecode.chess.position.Position; /** * Result storage for chess-specific QR Codes data. * * @author Dmitry Samoshin aka gotty */ public class ChessQRResult { private ChessQRCodeMode mode; private String contents; private Position position; private Game game; public ChessQRResult(ChessQRCodeMode mode, String contents) { this.mode = mode; this.contents = contents; } /* ChessQRResult(Position position) { this.position = position; } ChessQRResult(Game game) { this.game = game; } */ public ChessQRCodeMode getMode() { return mode; } public String getContents() { return contents; } public Position getPosition() throws ChessQRCodeException { if (position == null) { if (mode != null && mode.isPosition()) { try { position = getPositionParser().parse(contents); } catch (ParseException e) { throw new ChessQRCodeException( ChessQRCodeException.Type.PARSE, null, e.getMessage() ); } } } return position; } public Game getGame() { // todo return game; } private Parser getPositionParser() throws ChessQRCodeException { switch (mode) { case FEN: return Parsers.FEN.parser(); case TCD: return Parsers.TCD.parser(); default: throw new ChessQRCodeException( ChessQRCodeException.Type.PARSE, "parse.unknown.position.format" ); } } public static ChessQRCodeMode getMode(String contents) { return ChessQRCodeMode.byCode( contents.substring(0, ChessQRCodeMode.CODE_LENGTH) ); } public static String getContents(String contents) { return contents.substring(ChessQRCodeMode.CODE_LENGTH); } }