/* * Copyright (c) 2013 by Gerrit Grunwald * * 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 eu.hansolo.enzo.qlocktwo; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; /** * Created by * User: hansolo * Date: 27.02.13 * Time: 15:44 */ public class QlockDutch implements Qlock { private static final QlockTwo.Language LANGUAGE = QlockTwo.Language.DUTCH; private static final String[][] MATRIX = { {"H","E", "T", "K", "I", "S", "A", "V", "I", "I", "F"}, {"T", "I", "E", "N", "B", "T", "Z", "V", "O", "O","R"}, {"O", "V", "E", "R","M", "E", "K", "W", "A", "R", "T"}, {"H", "A", "L", "F", "S", "P", "W", "O", "V", "E", "R"}, {"V", "O", "O", "R", "T", "H", "G", "É", "É", "N", "S"}, {"T", "W", "E", "E", "P", "V", "C", "D", "R", "I", "E"}, {"V", "I", "E", "R", "V", "I", "I", "F", "Z", "E", "S"}, {"Z", "E", "V", "E", "N", "O", "N", "E", "G", "E", "N"}, {"A", "C", "H", "T", "T", "I", "E", "N", "E", "L", "F"}, {"T", "W", "A", "A", "L", "F", "B", "F", "U", "U", "R"} }; private final ConcurrentHashMap<Integer, String> LOOKUP; private List<QlockWord> timeList; public QlockDutch() { LOOKUP = new ConcurrentHashMap<>(); LOOKUP.putAll(QlockTwo.Language.DUTCH.getLookup()); timeList = new ArrayList<>(10); } @Override public String[][] getMatrix() { return MATRIX; } @Override public List<QlockWord> getTime(int minute, int hour) { if (hour > 12) { hour -= 12; } if (hour <= 0) { hour += 12; } if (minute > 60) { minute -= 60; hour++; } if (minute < 0) { minute += 60; hour--; } minute -= minute % 5; timeList.clear(); timeList.add(QlockLanguage.HET); timeList.add(QlockLanguage.IS); switch (minute) { case 0: timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(QlockLanguage.UUR); break; case 5: timeList.add(QlockLanguage.VIJF1); timeList.add(QlockLanguage.OVER); timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); break; case 10: timeList.add(QlockLanguage.TIEN); timeList.add(QlockLanguage.OVER); timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); break; case 15: timeList.add(QlockLanguage.KWART); timeList.add(QlockLanguage.OVER1); timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); break; case 20: timeList.add(QlockLanguage.TIEN); timeList.add(QlockLanguage.VOOR); timeList.add(QlockLanguage.HALF); addHour(timeList, hour); break; case 25: timeList.add(QlockLanguage.VIJF1); timeList.add(QlockLanguage.VOOR); timeList.add(QlockLanguage.HALF); addHour(timeList, hour); break; case 30: timeList.add(QlockLanguage.HALF); addHour(timeList, hour); break; case 35: timeList.add(QlockLanguage.VIJF1); timeList.add(QlockLanguage.OVER); timeList.add(QlockLanguage.HALF); addHour(timeList, hour); break; case 40: timeList.add(QlockLanguage.TIEN); timeList.add(QlockLanguage.OVER); timeList.add(QlockLanguage.HALF); addHour(timeList, hour); break; case 45: timeList.add(QlockLanguage.KWART); timeList.add(QlockLanguage.VOOR1); addHour(timeList, hour); break; case 50: timeList.add(QlockLanguage.TIEN); timeList.add(QlockLanguage.VOOR); addHour(timeList, hour); break; case 55: timeList.add(QlockLanguage.VIJF1); timeList.add(QlockLanguage.VOOR); addHour(timeList, hour); break; } return timeList; } @Override public QlockTwo.Language getLanguage() { return LANGUAGE; } private void addHour(List<QlockWord> timeList, final int HOUR) { if (HOUR == 12) { timeList.add(QlockLanguage.EEN); } else if (HOUR == 10 || HOUR + 1 == 10) { timeList.add(QlockLanguage.TIEN1); } else if (HOUR + 1 == 5) { timeList.add(QlockLanguage.VIJF); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(HOUR + 1))); } } private enum QlockLanguage implements QlockWord { EEN(4, 7, 9), TWEE(5, 0, 3), DRIE(5, 7, 10), VIER(6, 0, 3), VIJF1(0, 7, 10), VIJF(6, 4, 7), ZES(6, 8, 10), ZEVEN(7, 0, 4), ACHT(8, 0, 3), NEGEN(7, 6, 10), TIEN(1, 0, 3), TIEN1(8, 4, 7), ELF(8, 9, 10), TWAALF(9, 0, 5), HET(0, 0, 2), IS(0, 4, 5), OVER(2, 0, 3), OVER1(3, 7, 10), KWART(2, 6, 10), VOOR(1, 7, 10), VOOR1(4, 0, 3), HALF(3, 0, 3), UUR(9, 8, 10); private final int ROW; private final int START; private final int STOP; private QlockLanguage(final int ROW, final int START, final int STOP) { this.ROW = ROW; this.START = START; this.STOP = STOP; } @Override public int getRow() { return ROW; } @Override public int getStart() { return START; } @Override public int getStop() { return STOP; } } }