001: /*
002: * The contents of this file are subject to the terms
003: * of the Common Development and Distribution License
004: * (the "License"). You may not use this file except
005: * in compliance with the License.
006: *
007: * You can obtain a copy of the license at
008: * https://jwsdp.dev.java.net/CDDLv1.0.html
009: * See the License for the specific language governing
010: * permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL
013: * HEADER in each file and include the License file at
014: * https://jwsdp.dev.java.net/CDDLv1.0.html If applicable,
015: * add the following below this CDDL HEADER, with the
016: * fields enclosed by brackets "[]" replaced with your
017: * own identifying information: Portions Copyright [yyyy]
018: * [name of copyright owner]
019: */
020: /*
021: * $Id: TranslationService.java,v 1.2 2007/07/16 16:41:18 ofung Exp $
022: * $Revision: 1.2 $
023: * $Date: 2007/07/16 16:41:18 $
024: */
025:
026: /*
027: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
028: *
029: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
030: *
031: * The contents of this file are subject to the terms of either the GNU
032: * General Public License Version 2 only ("GPL") or the Common Development
033: * and Distribution License("CDDL") (collectively, the "License"). You
034: * may not use this file except in compliance with the License. You can obtain
035: * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
036: * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
037: * language governing permissions and limitations under the License.
038: *
039: * When distributing the software, include this License Header Notice in each
040: * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
041: * Sun designates this particular file as subject to the "Classpath" exception
042: * as provided by Sun in the GPL Version 2 section of the License file that
043: * accompanied this code. If applicable, add the following below the License
044: * Header, with the fields enclosed by brackets [] replaced by your own
045: * identifying information: "Portions Copyrighted [year]
046: * [name of copyright owner]"
047: *
048: * Contributor(s):
049: *
050: * If you wish your version of this file to be governed by only the CDDL or
051: * only the GPL Version 2, indicate your decision by adding "[Contributor]
052: * elects to include this software in this distribution under the [CDDL or GPL
053: * Version 2] license." If you don't indicate a single choice of license, a
054: * recipient has the option to distribute your version of this file under
055: * either the CDDL, the GPL Version 2 or to extend the choice of license to
056: * its licensees as provided above. However, if you add GPL Version 2 code
057: * and therefore, elected the GPL Version 2 license, then the option applies
058: * only if the new code is made subject to such option by the copyright
059: * holder.
060: */
061: package translator;
062:
063: import java.io.BufferedReader;
064: import java.io.InputStreamReader;
065: import java.net.*;
066: import java.util.Properties;
067:
068: import javax.swing.text.MutableAttributeSet;
069: import javax.swing.text.html.HTML;
070: import javax.swing.text.html.HTMLEditorKit;
071: import javax.swing.text.html.parser.ParserDelegator;
072:
073: /**
074: * Translation Service that talks to Babelfish.altavista.com and gets back translations.
075: *
076: * @author Manveen Kaur (manveen.kaur@sun.com)
077: *
078: */
079:
080: public class TranslationService {
081:
082: private String translation = "";
083: private String proxyHost = "";
084: private String proxyPort = "";
085:
086: public static final String ENGLISH_TO_GERMAN = "en_de";
087: public static final String ENGLISH_TO_FRENCH = "en_fr";
088: public static final String ENGLISH_TO_ITALIAN = "en_it";
089: public static final String ENGLISH_TO_SPANISH = "en_es";
090:
091: public TranslationService() {
092:
093: }
094:
095: public TranslationService(String host, String port) {
096: this .proxyHost = host;
097: this .proxyPort = port;
098: Properties props = System.getProperties();
099: props.put("http.proxyHost", host);
100: props.put("http.proxyPort", port);
101: }
102:
103: public String translate(String translate_text, String toLanguage) {
104:
105: // Open a connection with the BabelFish URL.
106: // Get the encoded String back.
107: try {
108:
109: String text = URLEncoder.encode(translate_text);
110:
111: //HTTP Get.
112: URL url = new URL(
113: "http://babelfish.altavista.com/babelfish/tr"
114: + "?urltext=" + text + "&lp=" + toLanguage);
115:
116: URLConnection con = url.openConnection();
117:
118: BufferedReader in = new BufferedReader(
119: new InputStreamReader(con.getInputStream()));
120:
121: ParserDelegator parser = new ParserDelegator();
122:
123: HTMLEditorKit.ParserCallback callback = new HTMLEditorKit.ParserCallback() {
124:
125: // the translation will be in the div tag
126: private boolean end_search = false;
127: private boolean found_first_textarea = false;
128:
129: public void handleText(char[] data, int pos) {
130: if (found_first_textarea) {
131: translation = new String(data);
132: }
133: }
134:
135: public void handleStartTag(HTML.Tag tag,
136: MutableAttributeSet attrSet, int pos) {
137: if (tag == HTML.Tag.DIV && end_search != true) {
138: found_first_textarea = true;
139: }
140: }
141:
142: public void handleEndTag(HTML.Tag t, int pos) {
143: if (t == HTML.Tag.DIV && end_search != true) {
144: end_search = true;
145: found_first_textarea = false;
146: }
147: }
148: };
149:
150: parser.parse(in, callback, true);
151: in.close();
152:
153: } catch (UnknownHostException uhe) {
154: System.out.println("Exception: " + uhe.getMessage());
155: System.out.println("If using proxy, please make sure "
156: + "your proxy settings are correct.");
157: System.out.println("Proxy Host = " + proxyHost
158: + "\nProxy Port = " + proxyPort);
159: uhe.printStackTrace();
160: } catch (Exception me) {
161: System.out.println("Exception: " + me.getMessage());
162: me.printStackTrace();
163: }
164: return translation;
165: }
166: }
|