<?xml version="1.0" encoding="UTF-8"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.    
-->

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

	<bean id="en-sentence-model"
		 class="opennlp.tools.sentdetect.SentenceModel">
		<argument type="java.net.URL" value="file:///home/xyz/models/en-sent.bin"/>
	</bean>

	<service id="en-sentence-model-service" ref="en-sentence-model"
		interface="opennlp.tools.sentdetect.SentenceModel">
		<service-properties>
			<entry key="MODEL_NAME" value="en-sentence"/>
		</service-properties>
	</service>
	
	<bean id="en-token-model"
		 class="opennlp.tools.tokenize.TokenizerModel">
		<argument type="java.net.URL" value="file:///home/xyz/models/en-token.bin"/>
	</bean>

	<service id="en-token-model-service" ref="en-token-model"
		interface="opennlp.tools.tokenize.TokenizerModel">
		<service-properties>
			<entry key="MODEL_NAME" value="en-token"/>
		</service-properties>
	</service>

	<bean id="en-ner-person-model"
		 class="opennlp.tools.namefind.TokenNameFinderModel">
		<argument type="java.net.URL" value="file:///home/xyz/models/en-ner-person.bin"/>
	</bean>

	<service id="en-ner-person-model-service" ref="en-ner-person-model"
		interface="opennlp.tools.namefind.TokenNameFinderModel">
		<service-properties>
			<entry key="MODEL_NAME" value="en-person"/>
		</service-properties>
	</service>

	<bean id="en-ner-rawtext-person-model"
		 class="org.apache.opennlp.tagging_server.namefind.DefaultRawTextNameFinderFactory">
		<argument ref="en-sentence-model"/>
		<argument ref="en-token-model"/>
		<argument ref="en-ner-person-model"/>
	</bean>
	
	<service id="en-ner-rawtext-person-model-service" ref="en-ner-rawtext-person-model"
		interface="org.apache.opennlp.tagging_server.namefind.RawTextNameFinderFactory">
		<service-properties>
			<entry key="MODEL_NAME" value="en-rawtext-person"/>
		</service-properties>
	</service>
</blueprint>

