001 // This file is part of AceWiki.
002 // Copyright 2008-2012, AceWiki developers.
003 //
004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006 // the License, or (at your option) any later version.
007 //
008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010 // Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013 // not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.base;
016
017 import java.util.*;
018
019 import ch.uzh.ifi.attempto.ape.ACEParser;
020 import ch.uzh.ifi.attempto.ape.APESocket;
021 import ch.uzh.ifi.attempto.ape.APELocal;
022 import ch.uzh.ifi.attempto.ape.APEWebservice;
023
024 /**
025 * This class is used to get an instance of ACEParser by parameters.
026 *
027 * Following parameters are recognized:
028 * - apetype
029 * Specify the type of APE, should be one of "local", "socket" and "webservice".
030 * - apecommand
031 * Location of ape.exe, used by APELocal when apetype is "local".
032 * - apehost
033 * Host name of APE socket server, used by APESocket when apetype is "socket".
034 * - apeport
035 * Port number of APE socket server, used by APESocket whe apetype is "socket".
036 * - apewebservice
037 * APE webservice URL, use by APEWebservice when apetype is "webservice".
038 *
039 * @author Yu Changyuan
040 */
041
042 public class APE {
043
044 private static Map<String, String> parameters = new HashMap<String, String>();
045
046 /**
047 * Get a ACEParser instance by parameters.
048 *
049 * @param parameters The parameters set in servlet web.xml.
050 * @return The ACEParser instance.
051 */
052 public static ACEParser getParser(Map<String, String> parameters) {
053 String apeType = parameters.get("context:apetype");
054 if (apeType == null) apeType = "local";
055
056 if (apeType.equals("socket")) {
057 String host = parameters.get("context:apehost");
058 if (host == null) host = "127.0.0.1";
059 int port;
060 try {
061 port = Integer.parseInt(parameters.get("context:apeport"));
062 }
063 catch (NumberFormatException e) {
064 port = 0xace;
065 }
066
067 return getAPESocket(host, port);
068 }
069
070 if (apeType.equals("webservice")) {
071 String url = parameters.get("context:apewebservice");
072 if (url == null) url = "http://127.0.0.1:8000/";
073
074 return getAPEWebservice(url);
075 }
076
077 String apeCommand = parameters.get("context:apecommand");
078 if (apeCommand == null) apeCommand = "ape.exe";
079
080 return getAPELocal(apeCommand);
081 }
082
083 /**
084 * Get a ACEParser instance with default parameters.
085 *
086 * @return The ACEParser instance.
087 */
088 public static ACEParser getParser() {
089 return getParser(parameters);
090 }
091
092 /**
093 * Set default parameters.
094 *
095 * @param parameters The parameters to set.
096 */
097 public static void setParameters(Map<String, String> parameters) {
098 APE.parameters = parameters;
099 }
100
101 /**
102 * Get a APELocal instance with specified ape.exe location
103 *
104 * @param apeCommand The location of ape.exe.
105 * @return The APELocal instance.
106 */
107 public static ACEParser getAPELocal(String apeCommand) {
108 if (!APELocal.isInitialized()) {
109 APELocal.init(apeCommand);
110 }
111 return APELocal.getInstance();
112 }
113
114 /**
115 * Get a APESocket instance with specified host and port
116 *
117 * @param host The host of APE socket server.
118 * @param port The port of APE socket server.
119 * @return The APESocket instance.
120 */
121 public static ACEParser getAPESocket(String host, int port) {
122 return new APESocket(host, port);
123 }
124
125 /**
126 * Get a APEWebservice instance with specified host and port
127 *
128 * @param url The URL of APE webservice.
129 * @return The APEWebservice instance.
130 */
131 public static ACEParser getAPEWebservice(String url) {
132 return new APEWebservice(url);
133 }
134
135 }