/*
* 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 QlockEnglish implements Qlock {
private static final QlockTwo.Language LANGUAGE = QlockTwo.Language.ENGLISH;
private static final String[][] MATRIX = {
{"I", "T", "L", "I", "S", "A", "S", "T", "I", "M", "E"},
{"A", "C", "Q", "U", "A", "R", "T", "E", "R", "D", "C"},
{"T", "W", "E", "N", "T", "Y", "F", "I", "V", "E", "X"},
{"H", "A", "L", "F", "B", "T", "E", "N", "F", "T", "O"},
{"P", "A", "S", "T", "E", "R", "U", "N", "I", "N", "E"},
{"O", "N", "E", "S", "I", "X", "T", "H", "R", "E", "E"},
{"F", "O", "U", "R", "F", "I", "V", "E", "T", "W", "O"},
{"E", "I", "G", "H", "T", "E", "L", "E", "V", "E", "N"},
{"S", "E", "V", "E", "N", "T", "W", "E", "L", "V", "E"},
{"T", "E", "N", "S", "E", "O'", "C", "L", "O", "C", "K"}
};
private final ConcurrentHashMap<Integer, String> LOOKUP;
private List<QlockWord> timeList;
public QlockEnglish() {
LOOKUP = new ConcurrentHashMap<>();
LOOKUP.putAll(QlockTwo.Language.ENGLISH.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.IT);
timeList.add(QlockLanguage.IS);
switch (minute)
{
case 0:
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.OCLOCK);
break;
case 5:
timeList.add(QlockLanguage.FIVE1);
timeList.add(QlockLanguage.PAST);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 10:
timeList.add(QlockLanguage.TEN1);
timeList.add(QlockLanguage.PAST);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 15:
timeList.add(QlockLanguage.A);
timeList.add(QlockLanguage.QUARTER);
timeList.add(QlockLanguage.PAST);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 20:
timeList.add(QlockLanguage.TWENTY);
timeList.add(QlockLanguage.PAST);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 25:
timeList.add(QlockLanguage.TWENTYFIVE);
timeList.add(QlockLanguage.PAST);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 30:
timeList.add(QlockLanguage.HALF);
timeList.add(QlockLanguage.PAST);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 35:
timeList.add(QlockLanguage.TWENTYFIVE);
timeList.add(QlockLanguage.TO);
addHour(timeList, hour);
break;
case 40:
timeList.add(QlockLanguage.TWENTY);
timeList.add(QlockLanguage.TO);
addHour(timeList, hour);
break;
case 45:
timeList.add(QlockLanguage.A);
timeList.add(QlockLanguage.QUARTER);
timeList.add(QlockLanguage.TO);
addHour(timeList, hour);
break;
case 50:
timeList.add(QlockLanguage.TEN1);
timeList.add(QlockLanguage.TO);
addHour(timeList, hour);
break;
case 55:
timeList.add(QlockLanguage.FIVE1);
timeList.add(QlockLanguage.TO);
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.ONE);
} else if (HOUR == 10) {
timeList.add(QlockLanguage.TEN2);
} else {
timeList.add(QlockLanguage.valueOf(LOOKUP.get(HOUR + 1)));
}
}
private enum QlockLanguage implements QlockWord {
ONE(5, 0, 2),
TWO(6, 8, 10),
THREE(5, 6, 10),
FOUR(6, 0, 3),
FIVE(6, 4, 7),
FIVE1(2, 6, 9),
SIX(5, 3, 5),
SEVEN(8, 0, 4),
EIGHT(7, 0, 4),
NINE(4, 7, 10),
TEN(9, 0, 2),
TEN1(3, 5, 7),
TEN2(9, 0, 2),
ELEVEN(7, 5, 10),
TWELVE(8, 5, 10),
IT(0, 0, 1),
IS(0, 3, 4),
A(1,0,0),
TO(3, 9, 10),
PAST(4, 0, 3),
QUARTER(1, 2, 8),
HALF(3, 0, 3),
TWENTY(2, 0, 5),
TWENTYFIVE(2, 0, 9),
OCLOCK(9, 5, 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;
}
}
}