/*
* 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: 28.02.13
* Time: 07:53
*/
public class QlockSpanish implements Qlock {
private static final QlockTwo.Language LANGUAGE = QlockTwo.Language.SPANISH;
private static final String[][] MATRIX = {
{"E", "S", "O", "N", "E", "L", "A", "S", "U", "N", "A"},
{"D", "O", "S", "I", "T", "R", "E", "S", "O", "R", "E"},
{"C", "U", "A", "T", "R", "O", "C", "I", "N", "C", "O"},
{"S", "E", "I", "S", "A", "S", "I", "E", "T", "E", "N"},
{"O", "C", "H", "O", "N", "U", "E", "V", "E", "Y", "O"},
{"L", "A", "D", "I", "E", "Z", "S", "O", "N", "C", "E"},
{"D", "O", "C", "E", "L", "Y", "M", "E", "N", "O", "S"},
{"O", "V", "E", "I", "N", "T", "E", "D", "I", "E", "Z"},
{"V", "E", "I", "N", "T", "I", "C", "I", "N", "C", "O"},
{"M", "E", "D", "I", "A", "C", "U", "A", "R", "T", "O"}
};
private final ConcurrentHashMap<Integer, String> LOOKUP;
private List<QlockWord> timeList;
public QlockSpanish() {
LOOKUP = new ConcurrentHashMap<>();
LOOKUP.putAll(QlockTwo.Language.SPANISH.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();
switch (minute)
{
case 0:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
break;
case 5:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.Y);
timeList.add(QlockLanguage.CINCO1);
break;
case 10:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.Y);
timeList.add(QlockLanguage.DIEZ1);
break;
case 15:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.Y);
timeList.add(QlockLanguage.CUARTO);
break;
case 20:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.Y);
timeList.add(QlockLanguage.VEINTE);
break;
case 25:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.Y);
timeList.add(QlockLanguage.VEINTICINCO);
break;
case 30:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.valueOf(LOOKUP.get(hour)));
timeList.add(QlockLanguage.Y);
timeList.add(QlockLanguage.MEDIA);
break;
case 35:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.MENOS);
timeList.add(QlockLanguage.VEINTICINCO);
addHour(timeList, hour);
break;
case 40:
timeList.add(hour == 1 ? QlockLanguage.ES : QlockLanguage.SON);
timeList.add(hour == 1 ? QlockLanguage.LA : QlockLanguage.LAS);
timeList.add(QlockLanguage.MENOS);
timeList.add(QlockLanguage.VEINTE);
addHour(timeList, hour);
break;
case 45:
timeList.add(QlockLanguage.SON);
timeList.add(QlockLanguage.LAS);
timeList.add(QlockLanguage.MENOS);
timeList.add(QlockLanguage.CUARTO);
addHour(timeList, hour);
break;
case 50:
// ES LA UNA MENOS DIEZ
timeList.add(QlockLanguage.SON);
timeList.add(QlockLanguage.LAS);
timeList.add(QlockLanguage.MENOS);
timeList.add(QlockLanguage.DIEZ1);
addHour(timeList, hour);
break;
case 55:
timeList.add(QlockLanguage.SON);
timeList.add(QlockLanguage.LAS);
timeList.add(QlockLanguage.MENOS);
timeList.add(QlockLanguage.CINCO1);
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.UNA);
} else if (HOUR == 10) {
timeList.add(QlockLanguage.DIEZ1);
} else {
timeList.add(QlockLanguage.valueOf(LOOKUP.get(HOUR + 1)));
}
}
private enum QlockLanguage implements QlockWord {
UNA(0, 8, 10),
DOS(1, 0, 2),
TRES(1, 4, 7),
CUATRO(2, 0, 5),
CINCO(2, 6, 10),
CINCO1(8, 6, 10),
SEIS(3, 0, 3),
SIETE(3, 5, 9),
OCHO(4, 0, 3),
NUEVE(4, 4, 8),
DIEZ(5, 2, 5),
DIEZ1(7, 7, 10),
ONCE(7, 5, 10),
DOCE(6, 0, 3),
SON(0, 1, 3),
ES(0, 0, 1),
LA(0, 5, 6),
LAS(0, 5, 7),
Y(6, 5, 5),
MENOS(6, 6, 10),
CUARTO(9, 5, 10),
VEINTE(7, 1, 6),
VEINTICINCO(8, 0, 10),
MEDIA(9, 0, 4);
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;
}
}
}