14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)package org.chromium.chrome.browser.infobar;
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)import java.util.Arrays;
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)import java.util.Collections;
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)import java.util.List;
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/**
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * A class that keeps the state of the different translation options and
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * languages.
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)public class TranslateOptions {
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // This would be an enum but they are not good for mobile.
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // The checkBoundaries method below needs to be updated if new options are added.
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private static final int NEVER_LANGUAGE = 0;
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private static final int NEVER_DOMAIN = 1;
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private static final int ALWAYS_LANGUAGE = 2;
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private final String[] mAllLanguages;
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // Will reflect the state before the object was ever modified
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private final boolean[] mOriginalOptions;
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private final int mOriginalSourceLanguageIndex;
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private final int mOriginalTargetLanguageIndex;
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    private final boolean[] mOptions;
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private int mSourceLanguageIndex;
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private int mTargetLanguageIndex;
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private final boolean mTriggeredFromMenu;
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private TranslateOptions(int sourceLanguageCode, int targetLanguageCode, String[] allLanguages,
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            boolean neverLanguage, boolean neverDomain, boolean alwaysLanguage,
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            boolean triggeredFromMenu, boolean[] originalOptions) {
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mAllLanguages = allLanguages;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mSourceLanguageIndex = sourceLanguageCode;
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mTargetLanguageIndex = targetLanguageCode;
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        mTriggeredFromMenu = triggeredFromMenu;
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOptions = new boolean[3];
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOptions[NEVER_LANGUAGE] = neverLanguage;
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOptions[NEVER_DOMAIN] = neverDomain;
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOptions[ALWAYS_LANGUAGE] = alwaysLanguage;
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (originalOptions == null) {
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            mOriginalOptions = mOptions.clone();
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        } else {
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            mOriginalOptions = originalOptions.clone();
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOriginalSourceLanguageIndex = mSourceLanguageIndex;
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOriginalTargetLanguageIndex = mTargetLanguageIndex;
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public TranslateOptions(int sourceLanguageCode, int targetLanguageCode, String[] allLanguages,
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           boolean alwaysTranslate, boolean triggeredFromMenu) {
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        this(sourceLanguageCode, targetLanguageCode, allLanguages, false, false, alwaysTranslate,
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                triggeredFromMenu, null);
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /**
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * Copy constructor
684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     */
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public TranslateOptions(TranslateOptions other) {
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        this(other.mSourceLanguageIndex, other.mTargetLanguageIndex, other.mAllLanguages,
714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                other.mOptions[NEVER_LANGUAGE], other.mOptions[NEVER_DOMAIN],
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                other.mOptions[ALWAYS_LANGUAGE], other.mTriggeredFromMenu,
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                other.mOriginalOptions);
744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public String sourceLanguage() {
774ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch        if (checkLanguageBoundaries(mSourceLanguageIndex))
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            return mAllLanguages[mSourceLanguageIndex];
794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return "";
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public String targetLanguage() {
834ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch        if (checkLanguageBoundaries(mTargetLanguageIndex))
844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            return mAllLanguages[mTargetLanguageIndex];
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return "";
864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public int sourceLanguageIndex() {
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return checkLanguageBoundaries(mSourceLanguageIndex) ? mSourceLanguageIndex : 0;
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public int targetLanguageIndex() {
934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return checkLanguageBoundaries(mTargetLanguageIndex) ? mTargetLanguageIndex : 0;
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    public boolean triggeredFromMenu() {
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        return mTriggeredFromMenu;
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean optionsChanged() {
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return (mSourceLanguageIndex != mOriginalSourceLanguageIndex) ||
1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                (mTargetLanguageIndex != mOriginalTargetLanguageIndex) ||
1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                (mOptions[NEVER_LANGUAGE] != mOriginalOptions[NEVER_LANGUAGE]) ||
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                (mOptions[NEVER_DOMAIN] != mOriginalOptions[NEVER_DOMAIN]) ||
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAGE]);
1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public List<String> allLanguages() {
1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return Collections.unmodifiableList(Arrays.asList(mAllLanguages));
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean neverTranslateLanguageState() {
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return mOptions[NEVER_LANGUAGE];
1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean alwaysTranslateLanguageState() {
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return mOptions[ALWAYS_LANGUAGE];
1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean neverTranslateDomainState() {
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return mOptions[NEVER_DOMAIN];
1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean setSourceLanguage(int languageIndex) {
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        boolean canSet = canSetLanguage(languageIndex, mTargetLanguageIndex);
1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (canSet) {
1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            mSourceLanguageIndex = languageIndex;
1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return canSet;
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean setTargetLanguage(int languageIndex) {
1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        boolean canSet = canSetLanguage(mSourceLanguageIndex, languageIndex);
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (canSet) {
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            mTargetLanguageIndex = languageIndex;
1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return canSet;
1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /**
1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * Sets the new state of never translate domain.
1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     *
1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * @return true if the toggling was possible
1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     */
1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean toggleNeverTranslateDomainState(boolean value) {
1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return toggleState(NEVER_DOMAIN, value);
1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /**
1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * Sets the new state of never translate language.
1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     *
1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * @return true if the toggling was possible
1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     */
1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean toggleNeverTranslateLanguageState(boolean value) {
1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        // Do not toggle if we are activating NeverLanguge but AlwaysTranslate
1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        // for a language pair with the same source language is already active.
1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (mOptions[ALWAYS_LANGUAGE] && value) {
1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            return false;
1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return toggleState(NEVER_LANGUAGE, value);
1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /**
1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * Sets the new state of never translate a language pair.
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     *
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * @return true if the toggling was possible
1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     */
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public boolean toggleAlwaysTranslateLanguageState(boolean value) {
1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        // Do not toggle if we are activating AlwaysLanguge but NeverLanguage is active already.
1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (mOptions[NEVER_LANGUAGE] && value) {
1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            return false;
1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        }
1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return toggleState(ALWAYS_LANGUAGE, value);
1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private boolean toggleState(int element, boolean newValue) {
1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (!checkElementBoundaries(element))
1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            return false;
1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        mOptions[element] = newValue;
1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return true;
1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private boolean checkLanguageBoundaries(int index) {
1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return index >= 0 && index < mAllLanguages.length;
1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private boolean canSetLanguage(int sourceIndex, int targetIndex) {
1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        if (sourceIndex == targetIndex)
1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            return false;
1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return checkLanguageBoundaries(sourceIndex) && checkLanguageBoundaries(targetIndex);
1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    private static boolean checkElementBoundaries(int element) {
1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return element >= NEVER_LANGUAGE && element <= ALWAYS_LANGUAGE;
1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    @Override
2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public String toString() {
2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return new StringBuilder()
2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(sourceLanguage())
2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(" -> ")
2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(targetLanguage())
2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(" - ")
2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append("Never Language:")
2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(mOptions[NEVER_LANGUAGE])
2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(" Always Language:")
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(mOptions[ALWAYS_LANGUAGE])
2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(" Never Domain:")
2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .append(mOptions[NEVER_DOMAIN])
2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                .toString();
2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
217