001 /*
002 * Copyright (C) 2006-2010 Enrique Lara (k957@68k.org)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package net.sf.jmorse;
018
019 import net.sf.jmorse.util.logging.Logger;
020
021 import java.util.Locale;
022 import java.util.MissingResourceException;
023 import java.util.ResourceBundle;
024
025 /**
026 * @author <a href="mailto:k957@68k.org">Enrique Lara</a>
027 */
028 public abstract class AbstractMorseWriter implements MorseWriter {
029 private static final Logger s_log = Logger.getLogger(AbstractMorseWriter.class);
030 private static final boolean DEBUG_ENABLED = s_log.isDebugEnabled();
031 ResourceBundle morseResBundle;
032
033 // --------------------------------------------------- Instance Variables
034 protected int wpm = MorseUtil.DEFAULT_WPM;
035
036 public int getWpm() {
037 return this.wpm;
038 }
039
040 public void setWpm(int wpm) {
041 this.wpm = wpm;
042 }
043
044 public synchronized void setLocale(Locale locale) {
045 try {
046 morseResBundle = ResourceBundle.getBundle("net.sf.jmorse.morse", locale);
047 } catch (Exception e) {
048 s_log.fatal("Problems Loading Morse Resource Bundle.", e);
049 }
050 }
051
052 public AbstractMorseWriter() {
053 try {
054 morseResBundle = ResourceBundle.getBundle("net.sf.jmorse.morse");
055 } catch (Exception e) {
056 s_log.fatal("Problems Loading Morse Resource Bundle.", e);
057 }
058 }
059
060 public AbstractMorseWriter(Locale locale) {
061 setLocale(locale);
062 }
063
064 protected String toMorse(char c) throws MissingResourceException {
065 String rval = "= ";
066
067 if (Character.isWhitespace(c)) {
068 rval = "R ";
069 } else {
070 rval = morseResBundle.getString(Character.toString(c).toUpperCase()) + " ";
071 }
072
073 return rval;
074 }
075
076 protected String toMorse(char[] msg, int len) throws MissingResourceException {
077 StringBuffer morseTxt = new StringBuffer();
078
079 for (int i = 0; i < len; i++) {
080 char c = msg[i];
081 morseTxt.append(toMorse(c));
082 }
083
084 String rval = morseTxt.toString();
085
086 if (DEBUG_ENABLED) {
087 s_log.debug("morseTxt=" + rval);
088 }
089
090 return rval;
091 }
092
093 public void write(String msg) {
094 if (msg == null) {
095 throw new IllegalArgumentException("Message may not be null.");
096 }
097
098 write(msg.toCharArray(), msg.length());
099 }
100
101 public void write(char[] msg, int len) {
102 if (DEBUG_ENABLED) {
103 s_log.debug("msg=" + new String(msg, 0, len));
104 s_log.debug("wpm=" + wpm);
105 }
106
107 String morseTxt = toMorse(msg, len);
108 writeMorse(morseTxt.toCharArray(), morseTxt.length());
109 }
110
111 protected abstract void writeMorse(char[] msg, int len);
112 }