Added supported layers in the endpoint description.

Change-Id: I3cde116b5c21003a91d3bb14f0e10dd8a87a252d
diff --git a/pom.xml b/pom.xml
index 4f31fd3..346693a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,15 +66,17 @@
     	<groupId>org.apache.directory.studio</groupId>
     	<artifactId>org.apache.commons.lang</artifactId>
     	<version>2.6</version>
-    </dependency>
+    </dependency>   
   </dependencies> 
  
-  <!-- <repositories>
+  <repositories>
     <repository>
-      <id>CLARIN</id>
-      <url>https://nexus.clarin.eu/content/repositories/Clarin</url>
-      <url>http://catalog.clarin.eu/ds/nexus/content/repositories/Clarin/</url>
-      <layout>default</layout>
-    </repository>   
-  </repositories> -->
+			<id>CLARIN</id>
+			<name>CLARIN Repository</name>
+			<url>https://nexus.clarin.eu/content/repositories/Clarin</url>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
+  </repositories>
 </project>
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java b/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java
index 0776c56..fff2e5d 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapClient.java
@@ -29,7 +29,6 @@
 public class KorapClient {
 	
 	private static final String SERVICE_URI = "http://10.0.10.13:7070/api/v0.1/";
-	private String QUERY_LANGUAGE = "CQL";
 	private String CONTEXT_TYPE = "sentence";
 	
 	private int defaultNumOfRecords = 10;
@@ -87,9 +86,9 @@
 	}
 	
 	
-	public KorapResult query(String query, String version, int startRecord, 
-			int maximumRecords, String[] corpora) throws HttpResponseException,
-			IOException {
+	public KorapResult query(String query, QueryLanguage queryLanguage,
+			String version, int startRecord, int maximumRecords,
+			String[] corpora) throws HttpResponseException, IOException {
 		
 		checkQuery(query, startRecord, maximumRecords);
 		
@@ -118,7 +117,8 @@
 		else {*/
 		
 			try {
-				httpRequest = createRequest(query, version, startRecord-1, 
+			httpRequest = createRequest(query, queryLanguage, version,
+					startRecord - 1,
 						maximumRecords);
 			} catch (URISyntaxException e) {
 				throw new IOException("Failed creating http request.");
@@ -163,15 +163,26 @@
 			throws IOException{
 		InputStream is = response.getEntity().getContent(); 
 		JsonNode node = objectMapper.readTree(is);
-		String message = node.get("error").textValue();						
-		String[] errorItems = message.split(":",2);
-		errorItems[0] = errorItems[0].replace("SRU diagnostic ", "");
-		errorItems[1] = errorItems[1].trim();
+		String message = node.get("error").textValue();
+		String[] errorItems;
+		if (message.contains("SRU diagnostic")) {
+			errorItems = message.split(":", 2);
+			errorItems[0] = errorItems[0].replace("SRU diagnostic ", "");
+			errorItems[1] = errorItems[1].trim();
+		}
+		else if (message.contains("not a supported query language")){
+			errorItems = new String[]{"4",
+					"KorAP does not support the query language."};
+		}
+		else {
+			errorItems = new String[]{"1", message};
+		}
+		
 		return errorItems;						
 	}
 	
-	private HttpGet createRequest(String query, String version, int startRecord, 
-			int maximumRecords) 
+	private HttpGet createRequest(String query, QueryLanguage queryLanguage,
+			String version, int startRecord, int maximumRecords)
 			throws URISyntaxException {
 
 		if (maximumRecords <= 0) {
@@ -184,7 +195,7 @@
 		
 		List<NameValuePair> params = new ArrayList<NameValuePair>(); 
 		params.add(new BasicNameValuePair("q", query));
-		params.add(new BasicNameValuePair("ql", QUERY_LANGUAGE));
+		params.add(new BasicNameValuePair("ql", queryLanguage.toString()));
 		params.add(new BasicNameValuePair("v", version));
 		params.add(new BasicNameValuePair("context", CONTEXT_TYPE));
 		params.add(new BasicNameValuePair("count", String.valueOf(maximumRecords)));
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java b/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java
index 6762b63..76a36f6 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapEndpointDescription.java
@@ -1,13 +1,17 @@
 package de.mannheim.ids.korap.sru;
 
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.ServletContext;
+
 import com.fasterxml.jackson.databind.JsonNode;
 
 import eu.clarin.sru.server.SRUConfigException;
@@ -15,6 +19,7 @@
 import eu.clarin.sru.server.SRUException;
 import eu.clarin.sru.server.fcs.DataView;
 import eu.clarin.sru.server.fcs.DataView.DeliveryPolicy;
+import eu.clarin.sru.server.fcs.utils.SimpleEndpointDescriptionParser;
 import eu.clarin.sru.server.fcs.EndpointDescription;
 import eu.clarin.sru.server.fcs.Layer;
 import eu.clarin.sru.server.fcs.ResourceInfo;
@@ -26,24 +31,27 @@
 	private List<String> languages;
 	
 	private String defaultDataview = "hits";
+	private List<Layer> layers;
 
-	public KorapEndpointDescription() throws SRUConfigException {
-		dataviews = new ArrayList<DataView>();
-		dataviews.add(new DataView("hits", "application/x-clarin-fcs-hits+xml",
-				DeliveryPolicy.SEND_BY_DEFAULT));
-		dataviews.add(new DataView("kwic", "application/x-clarin-fcs-kwic+xml",
-				DeliveryPolicy.NEED_TO_REQUEST));
-
-		capabilities = new ArrayList<URI>();
+	public KorapEndpointDescription(ServletContext context)
+			throws SRUConfigException {
 		try {
-			capabilities.add(new URI(
-					"http://clarin.eu/fcs/capability/basic-search"));
-		} catch (URISyntaxException e) {
-			throw new SRUConfigException("Found an invalid capability URI.");
-		}
+			URL url = context.getResource("/WEB-INF/endpoint-description.xml");
+			EndpointDescription simpleEndpointDescription = SimpleEndpointDescriptionParser
+					.parse(url);
+			if (simpleEndpointDescription != null) {
+				setSupportedLayers(simpleEndpointDescription
+						.getSupportedLayers());
+				setSupportedDataViews(simpleEndpointDescription
+						.getSupportedDataViews());
+				setCapabilities(simpleEndpointDescription.getCapabilities());
+			}
 
-		languages = new ArrayList<String>();
-		languages.add("deu");
+		} catch (MalformedURLException e) {
+			throw new SRUConfigException(
+					"error initializing resource info inventory", e);
+		}
+		setLanguages();
 	}
 
 	@Override
@@ -53,16 +61,44 @@
 		languages.clear();
 	}
 
+	public void setLanguages() {
+		languages = new ArrayList<String>();
+		languages.add("deu");
+	}
+
 	@Override
 	public List<URI> getCapabilities() {
 		return capabilities;
 	}
 
+	public void setCapabilities(List<URI> list) throws SRUConfigException {
+		capabilities = list;
+//		new ArrayList<URI>();
+//		try {
+//			capabilities.add(new URI(
+//					"http://clarin.eu/fcs/capability/basic-search"));
+//		} catch (URISyntaxException e) {
+//			throw new SRUConfigException("Found an invalid capability URI.");
+//		}
+	}
+
 	@Override
 	public List<DataView> getSupportedDataViews() {
 		return dataviews;
 	}
 
+	public void setSupportedDataViews(List<DataView> list) {
+		dataviews = list;
+
+		// new ArrayList<DataView>();
+		// dataviews.add(new DataView("hits",
+		// "application/x-clarin-fcs-hits+xml",
+		// DeliveryPolicy.SEND_BY_DEFAULT));
+		// dataviews.add(new DataView("kwic",
+		// "application/x-clarin-fcs-kwic+xml",
+		// DeliveryPolicy.NEED_TO_REQUEST));
+	}
+
 	@Override
 	public List<ResourceInfo> getResourceList(String pid) throws SRUException {
 
@@ -105,9 +141,13 @@
 		this.defaultDataview = defaultDataview;
 	}
 
+	public void setSupportedLayers(List<Layer> list) {
+		this.layers = list;
+	}
+
 	@Override
 	public List<Layer> getSupportedLayers() {
-		return null;
+		return layers;
 	}
 
 }
diff --git a/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java b/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java
index 80e01af..f57f6f9 100644
--- a/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java
+++ b/src/main/java/de/mannheim/ids/korap/sru/KorapSRU.java
@@ -8,9 +8,7 @@
 import org.apache.http.client.HttpResponseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.z3950.zing.cql.CQLNode;
 
-import eu.clarin.sru.server.CQLQueryParser;
 import eu.clarin.sru.server.SRUConfigException;
 import eu.clarin.sru.server.SRUConstants;
 import eu.clarin.sru.server.SRUDiagnosticList;
@@ -19,7 +17,6 @@
 import eu.clarin.sru.server.SRURequest;
 import eu.clarin.sru.server.SRUSearchResultSet;
 import eu.clarin.sru.server.SRUServerConfig;
-import eu.clarin.sru.server.SRUVersion;
 import eu.clarin.sru.server.fcs.Constants;
 import eu.clarin.sru.server.fcs.DataView;
 import eu.clarin.sru.server.fcs.EndpointDescription;
@@ -28,55 +25,59 @@
 /**
  * @author margaretha
  * */
-public class KorapSRU extends SimpleEndpointSearchEngineBase{
+public class KorapSRU extends SimpleEndpointSearchEngineBase {
 
-	public static final String CLARIN_FCS_RECORD_SCHEMA =
-            "http://clarin.eu/fcs/resource";
-	public static final String KORAP_WEB_URL = 
-			"http://korap.ids-mannheim.de/kalamar";
-	
+	public static final String CLARIN_FCS_RECORD_SCHEMA = "http://clarin.eu/fcs/resource";
+	public static final String KORAP_WEB_URL = "http://korap.ids-mannheim.de/kalamar";
+
+	public static String redirectBaseURI;
 	public static KorapClient korapClient;
 	private KorapEndpointDescription korapEndpointDescription;
 	private SRUServerConfig serverConfig;
 
-	public static String redirectBaseURI;
-	
-	private Logger logger = (Logger) LoggerFactory.getLogger(KorapSRU.class);	
+	private Logger logger = (Logger) LoggerFactory.getLogger(KorapSRU.class);
 
 	@Override
 	protected EndpointDescription createEndpointDescription(
 			ServletContext context, SRUServerConfig config,
 			Map<String, String> params) throws SRUConfigException {
-		korapEndpointDescription = new KorapEndpointDescription();
+		korapEndpointDescription = new KorapEndpointDescription(context);
 		return korapEndpointDescription;
 	}
-	
+
 	@Override
 	protected void doInit(ServletContext context, SRUServerConfig config,
 			SRUQueryParserRegistry.Builder parserRegistryBuilder,
-			Map<String, String> params)
-			throws SRUConfigException {
+			Map<String, String> params) throws SRUConfigException {
 		serverConfig = config;
-		korapClient = new KorapClient(config.getNumberOfRecords(), 
+		korapClient = new KorapClient(config.getNumberOfRecords(),
 				config.getMaximumRecords());
-		
+
 		StringBuilder sb = new StringBuilder();
 		sb.append(config.getTransports());
 		sb.append("://");
-        sb.append(config.getHost());
-        if (config.getPort() != 80) {
-            sb.append(":").append(config.getPort());
-        }
-        sb.append("/").append(config.getDatabase());
-        sb.append("/").append("redirect/");
-        this.redirectBaseURI = sb.toString();
+		sb.append(config.getHost());
+		if (config.getPort() != 80) {
+			sb.append(":").append(config.getPort());
+		}
+		sb.append("/").append(config.getDatabase());
+		sb.append("/").append("redirect/");
+		this.redirectBaseURI = sb.toString();
+
+		// queryParser = new ThreadLocal<QueryParser>() {
+		// @Override
+		// protected QueryParser initialValue() {
+		// return new QueryParser("text", new StandardAnalyzer(
+		// CharArraySet.EMPTY_SET));
+		// }
+		// };
 	}
 
 	@Override
 	public SRUSearchResultSet search(SRUServerConfig config,
 			SRURequest request, SRUDiagnosticList diagnostics)
 			throws SRUException {
-				
+
 		checkRequestRecordSchema(request);
 
 		String dataview = korapEndpointDescription.getDefaultDataView();
@@ -85,107 +86,111 @@
 					request.getExtraRequestData("x-fcs-dataviews"), diagnostics);
 		}
 
-		if (!request.isQueryType(Constants.FCS_QUERY_TYPE_CQL)) {
+		String queryType = request.getQueryType();
+		logger.info("Query language: " + queryType);
+		QueryLanguage queryLanguage;
+		if (request.isQueryType(Constants.FCS_QUERY_TYPE_CQL)) {
+			queryLanguage = QueryLanguage.CQL;
+		} else if (request.isQueryType(Constants.FCS_QUERY_TYPE_FCS)) {
+			queryLanguage = QueryLanguage.FCSQL;
+		} else {
 			throw new SRUException(
 					SRUConstants.SRU_CANNOT_PROCESS_QUERY_REASON_UNKNOWN,
 					"Queries with queryType '"
 							+ request.getQueryType()
 							+ "' are not supported by this CLARIN-FCS Endpoint.");
 		}
-		CQLQueryParser.CQLQuery cqlQuery = request
-				.getQuery(CQLQueryParser.CQLQuery.class);
-		
-		String korapQuery = translateCQLtoKorapQuery(cqlQuery.getParsedQuery());
-        String version = null;
-        if (request.isVersion(SRUVersion.VERSION_1_1)){
-        	 version = "1.1";
-        }
-        else if (request.isVersion(SRUVersion.VERSION_1_2)){
-        	version = "1.2";
-        }
-        else {
-        	serverConfig.getDefaultVersion();
-        }
+		logger.info("Query language: " + queryLanguage);
+
+		String queryStr = null;
+		queryStr = request.getQuery().getRawQuery();
+		if ((queryStr == null) || queryStr.isEmpty()) {
+			throw new SRUException(SRUConstants.SRU_EMPTY_TERM_UNSUPPORTED,
+					"An empty term is not supported.");
+		}
+		logger.info("korapsru query: " + queryStr);
+
+		String version = null;
+		switch (request.getVersion()) {
+			case VERSION_1_1 :
+				version = "1.1";
+			case VERSION_1_2 :
+				version = "1.2";
+			case VERSION_2_0 :
+				version = "2.0";
+			default :
+				serverConfig.getDefaultVersion();
+		}
 
 		KorapResult korapResult = new KorapResult();
 		try {
-			korapResult = korapClient.query(
-					korapQuery,
-					version,
-					request.getStartRecord(), 
-					request.getMaximumRecords(),
-					getCorporaList(request)
-			);
-		}
-		catch (HttpResponseException e) {
-			logger.warn("HttpResponseException: " +e.getStatusCode()+" "+e.getMessage());
+			korapResult = korapClient.query(queryStr, queryLanguage, version,
+					request.getStartRecord(), request.getMaximumRecords(),
+					getCorporaList(request));
+		} catch (HttpResponseException e) {
+			logger.warn("HttpResponseException: " + e.getStatusCode() + " "
+					+ e.getMessage());
 			switch (e.getStatusCode()) {
-			case 16:
-				throw new SRUException(SRUConstants.SRU_UNSUPPORTED_INDEX, 
-						e.getMessage());
-			case 19:
-				throw new SRUException(SRUConstants.SRU_UNSUPPORTED_RELATION, 
-						e.getMessage());	
-			case 20: 
-				throw new SRUException(SRUConstants.SRU_UNSUPPORTED_RELATION_MODIFIER,
-						e.getMessage());			
-			case 27: 
-				throw new SRUException(SRUConstants.SRU_EMPTY_TERM_UNSUPPORTED,
-						e.getMessage());
-			case 48 :
-				throw new SRUException(SRUConstants.SRU_QUERY_FEATURE_UNSUPPORTED, 
-						e.getMessage());
-			default: 
+				case 16 :
+					throw new SRUException(SRUConstants.SRU_UNSUPPORTED_INDEX,
+							e.getMessage());
+				case 19 :
+					throw new SRUException(
+							SRUConstants.SRU_UNSUPPORTED_RELATION,
+							e.getMessage());
+				case 20 :
+					throw new SRUException(
+							SRUConstants.SRU_UNSUPPORTED_RELATION_MODIFIER,
+							e.getMessage());
+				case 27 :
+					throw new SRUException(
+							SRUConstants.SRU_EMPTY_TERM_UNSUPPORTED,
+							e.getMessage());
+				case 48 :
+					throw new SRUException(
+							SRUConstants.SRU_QUERY_FEATURE_UNSUPPORTED,
+							e.getMessage());
+				default :
 					throw new SRUException(
 							SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
 							e.getMessage());
 			}
-			
-		}
-		catch (IOException e) {
+
+		} catch (IOException e) {
 			throw new SRUException(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
 					e.getMessage());
-		}		
-		
+		}
+
 		return new KorapSRUSearchResultSet(diagnostics, korapResult, dataview);
 	}
-	
-	private String[] getCorporaList(SRURequest request){
-		try { 
+
+	private String[] getCorporaList(SRURequest request) {
+		try {
 			String corpusPids = request.getExtraRequestData("x-fcs-context");
-			if (!corpusPids.isEmpty() && corpusPids != null){
-				if (corpusPids.contains(",")){
+			if (!corpusPids.isEmpty() && corpusPids != null) {
+				if (corpusPids.contains(",")) {
 					return corpusPids.split(",");
 				}
 				return new String[]{corpusPids};
 			}
 			return null;
-		}
-		catch (NullPointerException e) {
+		} catch (NullPointerException e) {
 			return null;
 		}
 	}
-	
-	private String translateCQLtoKorapQuery(CQLNode query) throws SRUException {
-		String queryStr = query.toString();
-		if ((queryStr == null) || queryStr.isEmpty()) {
-            throw new SRUException(SRUConstants.SRU_EMPTY_TERM_UNSUPPORTED,
-                    "An empty term is not supported.");
-        }
-		return queryStr;
-	}
-	
-	private void checkRequestRecordSchema(SRURequest request) throws SRUException{
-		final String recordSchemaIdentifier =
-	            request.getRecordSchemaIdentifier();
-	        if ((recordSchemaIdentifier != null) &&
-	                !recordSchemaIdentifier.equals(CLARIN_FCS_RECORD_SCHEMA)) {
-	            throw new SRUException(
-	                    SRUConstants.SRU_UNKNOWN_SCHEMA_FOR_RETRIEVAL,
-	                    recordSchemaIdentifier, "Record schema \"" +
-	                    recordSchemaIdentifier +
-	                    "\" is not supported by this endpoint.");
-	        }
+
+	private void checkRequestRecordSchema(SRURequest request)
+			throws SRUException {
+		final String recordSchemaIdentifier = request
+				.getRecordSchemaIdentifier();
+		if ((recordSchemaIdentifier != null)
+				&& !recordSchemaIdentifier.equals(CLARIN_FCS_RECORD_SCHEMA)) {
+			throw new SRUException(
+					SRUConstants.SRU_UNKNOWN_SCHEMA_FOR_RETRIEVAL,
+					recordSchemaIdentifier, "Record schema \""
+							+ recordSchemaIdentifier
+							+ "\" is not supported by this endpoint.");
+		}
 	}
 
 	private String getRequestDataView(String requestDataview,
@@ -205,6 +210,4 @@
 		}
 		return korapEndpointDescription.getDefaultDataView();
 	}
-
-		
 }
diff --git a/src/main/java/de/mannheim/ids/korap/sru/QueryLanguage.java b/src/main/java/de/mannheim/ids/korap/sru/QueryLanguage.java
new file mode 100644
index 0000000..98d2d28
--- /dev/null
+++ b/src/main/java/de/mannheim/ids/korap/sru/QueryLanguage.java
@@ -0,0 +1,5 @@
+package de.mannheim.ids.korap.sru;
+
+public enum QueryLanguage {
+	CQL, FCSQL;
+}
diff --git a/src/main/webapp/WEB-INF/endpoint-description.xml b/src/main/webapp/WEB-INF/endpoint-description.xml
new file mode 100644
index 0000000..1bd2b25
--- /dev/null
+++ b/src/main/webapp/WEB-INF/endpoint-description.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+    This file has the same format as the XML serialization of endpoint

+    description from the CLARIN-FCS specification.

+-->

+<EndpointDescription xmlns="http://clarin.eu/fcs/endpoint-description"

+    version="2">

+    <Capabilities>

+        <Capability>http://clarin.eu/fcs/capability/basic-search</Capability>

+        <Capability>http://clarin.eu/fcs/capability/advanced-search</Capability>

+    </Capabilities>

+    <SupportedDataViews>

+        <SupportedDataView id="hits" delivery-policy="send-by-default">application/x-clarin-fcs-hits+xml</SupportedDataView>

+        <SupportedDataView id="adv" delivery-policy="send-by-default">application/x-clarin-fcs-adv+xml</SupportedDataView>

+        <SupportedDataView id="kwic" delivery-policy="need-to-request">application/x-clarin-fcs-kwic+xml</SupportedDataView>

+    </SupportedDataViews>

+    <SupportedLayers>

+        <SupportedLayer id="l1" result-id="http://clarin.ids-mannheim.de/korapsru/layers/text">text</SupportedLayer>

+        <SupportedLayer id="l2" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos1" qualifier="cnx"

+        	alt-value-info="based on STTS tagset"

+        	alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>

+        <SupportedLayer id="l3" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos2" qualifier="tt"

+            alt-value-info="based on STTS tagset"

+            alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>

+        <SupportedLayer id="l4" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos3" qualifier="opennlp"

+            alt-value-info="based on STTS tagset"

+            alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>

+       <SupportedLayer id="l5" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos4" qualifier="mate"

+            alt-value-info="based on STTS tagset"

+            alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>        

+        <SupportedLayer id="l6" result-id="http://clarin.ids-mannheim.de/korapsru/layers/pos5" qualifier="xip"

+            alt-value-info="based on STTS tagset"

+            alt-value-info-uri="http://www.ims.uni-stuttgart.de/forschung/ressourcen/lexika/TagSets/stts-table.html">pos</SupportedLayer>       

+        <SupportedLayer id="l7" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma1" qualifier="cnx">lemma</SupportedLayer>

+        <SupportedLayer id="l8" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma2" qualifier="tt">lemma</SupportedLayer>

+        <SupportedLayer id="l9" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma3" qualifier="mate">lemma</SupportedLayer>

+        <SupportedLayer id="l10" result-id="http://clarin.ids-mannheim.de/korapsru/layers/lemma4" qualifier="xip">lemma</SupportedLayer>

+    </SupportedLayers>

+    <Resources>

+     	<Resource pid="dummy pid">

+           <Title xml:lang="en">dummy resource</Title>

+           <Languages>

+               <Language>deu</Language>

+           </Languages>

+           <AvailableDataViews ref="hits"/>

+        </Resource>

+    </Resources>

+</EndpointDescription>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 6f63574..d651b31 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -9,7 +9,11 @@
   <servlet>
     <display-name>KorAP SRU/CQL Service (HTTP Interface)</display-name>
     <servlet-name>KorapSRU</servlet-name>
-    <servlet-class>eu.clarin.sru.server.utils.SRUServerServlet</servlet-class>    
+    <servlet-class>eu.clarin.sru.server.utils.SRUServerServlet</servlet-class>
+    <!-- <init-param>
+        <param-name>de.mannheim.ids.korap.sru.indexDir</param-name>
+        <param-value>/usr/local/java/apps/korapsru/index</param-value>
+    </init-param>     -->
     <init-param>
         <param-name>eu.clarin.sru.server.numberOfRecords</param-name>
         <param-value>25</param-value>
@@ -50,10 +54,10 @@
     	<param-name>eu.clarin.sru.server.legacyNamespaceMode</param-name>
     	<param-value>loc</param-value>
     </init-param>
-    <!-- <init-param>
+    <init-param>
     	<param-name>eu.clarin.sru.server.sruSupportedVersionMax</param-name>
     	<param-value>2.0</param-value>
-    </init-param> -->
+    </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
diff --git a/src/test/java/de/mannheim/ids/korap/test/KorapClientTest.java b/src/test/java/de/mannheim/ids/korap/test/KorapClientTest.java
index 845a288..83b8d5d 100644
--- a/src/test/java/de/mannheim/ids/korap/test/KorapClientTest.java
+++ b/src/test/java/de/mannheim/ids/korap/test/KorapClientTest.java
@@ -7,6 +7,7 @@
 
 import de.mannheim.ids.korap.sru.KorapClient;
 import de.mannheim.ids.korap.sru.KorapResult;
+import de.mannheim.ids.korap.sru.QueryLanguage;
 
 
 public class KorapClientTest {
@@ -16,7 +17,8 @@
 		KorapClient c = new KorapClient(25,50);
 		
 //		prox Kuh
-		KorapResult result = c.query("Haus", "1.2", 1, 5, null);
+		KorapResult result = c.query("Haus", QueryLanguage.CQL, "1.2", 1, 5,
+				null);
 		//System.out.println(result.getMatches().size());
 		
 	}