/* * 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 QlockFrench implements Qlock { private static final QlockTwo.Language LANGUAGE = QlockTwo.Language.FRENCH; private static final String[][] MATRIX = { {"I", "L", "N", "E", "S", "T", "O", "D", "E", "U", "X"}, {"Q", "U", "A", "T", "R", "E", "T", "R", "O", "I", "S"}, {"N", "E", "U", "F", "U", "N", "E", "S", "E", "P", "T"}, {"H", "U", "I", "T", "S", "I", "X", "C", "I", "N", "Q"}, {"M", "I", "D", "I", "X", "M", "I", "N", "U", "I", "T"}, {"O", "N", "Z", "E", "R", "H", "E", "U", "R", "E", "S"}, {"M", "O", "I", "N", "S", "O", "L", "E", "D", "I", "X"}, {"E", "T", "R", "Q", "U", "A", "R", "T", "P", "M", "D"}, {"V", "I", "N", "G", "T", "-", "C", "I", "N", "Q", "U"}, {"E", "T", "S", "D", "E", "M", "I", "E", "P", "A", "M"} }; private final ConcurrentHashMap<Integer, String> LOOKUP; private List<QlockWord> timeList; public QlockFrench() { LOOKUP = new ConcurrentHashMap<>(); LOOKUP.putAll(QlockTwo.Language.FRENCH.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.IL); timeList.add(QlockLanguage.EST); switch (minute) { case 0: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } break; case 5: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.CINQ1); break; case 10: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.DIX1); break; case 15: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.ET); timeList.add(QlockLanguage.QUART); break; case 20: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.VINGT); break; case 25: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.VINGT_CINQ); break; case 30: if (hour == 12) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour))); timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.ET1); timeList.add(QlockLanguage.DEMIE); break; case 35: addHour(timeList, hour); if (hour != 11) { timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.MOINS); timeList.add(QlockLanguage.VINGT_CINQ); break; case 40: addHour(timeList, hour); if (hour != 11) { timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.MOINS); timeList.add(QlockLanguage.VINGT); break; case 45: addHour(timeList, hour); if (hour != 11) { timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.MOINS); timeList.add(QlockLanguage.LE); timeList.add(QlockLanguage.QUART); break; case 50: addHour(timeList, hour); if (hour != 11) { timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.MOINS); timeList.add(QlockLanguage.DIX1); break; case 55: addHour(timeList, hour); if (hour != 11) { timeList.add(hour == 1 ? QlockLanguage.HEURE : QlockLanguage.HEURES); } timeList.add(QlockLanguage.MOINS); timeList.add(QlockLanguage.CINQ1); 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.UNE); } else if (HOUR == 5) { timeList.add(QlockLanguage.CINQ1); } else if (HOUR == 11) { timeList.add(QlockLanguage.MIDI); } else { timeList.add(QlockLanguage.valueOf(LOOKUP.get(HOUR + 1))); } } private enum QlockLanguage implements QlockWord { UNE(2, 4, 6), DEUX(0, 7, 10), TROIS(1, 6, 10), QUATRE(1, 0, 5), CINQ(3, 7, 10), CINQ1(8, 6, 9), SIX(3, 4, 6), SEPT(2, 7, 10), HUIT(3, 0, 3), NEUF(2, 0, 3), DIX(4, 2, 4), DIX1(6, 8, 10), ONZE(5, 0, 3), IL(0, 0, 1), EST(0, 3, 5), ET(7, 0, 1), HEURE(5, 5, 9), HEURES(5, 5, 10), LE(6, 6, 7), QUART(7, 3, 7), VINGT(8, 0, 4), MIDI(4, 0, 3), VINGT_CINQ(8, 0, 9), MOINS(6, 0, 4), ET1(9, 0, 1), DEMI(9, 3, 6), DEMIE(9, 3, 7); 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; } } }