<?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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  
  <modelVersion>4.0.0</modelVersion>
  
  <parent>
    <groupId>org.apache.stanbol</groupId>
    <artifactId>org.apache.stanbol.enhancer.parent</artifactId>
    <version>0.10.0-SNAPSHOT</version>
    <relativePath>../../parent</relativePath>
  </parent>
  
  <groupId>org.apache.stanbol</groupId>
  <artifactId>org.apache.stanbol.enhancer.weightedjobmanager</artifactId>
  <version>0.10.0-SNAPSHOT</version>
  <packaging>bundle</packaging>
  
  <name>Apache Stanbol Enhancer Weighted Job Manager</name>
  <description>Basic EnhancementJobManager implementation :
    This implementation takes all active EnhancementEngines, orders them by weight (see ServiceProperties interface for details) and executes the Engines synchronously.
    If an Engine becomes available and an other is disabled or a property is changed (e.g. the weight) this jobmanager is updated dynamically.
  </description>
  
  <inceptionYear>2010</inceptionYear>
  
  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/enhancer/jobmanager/weightedjobmanager/
    </developerConnection>
    <url>http://stanbol.apache.org/</url>
  </scm>
  
  <build>
    <plugins>
      <plugin>
      	<groupId>org.apache.felix</groupId>
      	<artifactId>maven-bundle-plugin</artifactId>
      	<extensions>true</extensions>
      	<configuration>
      	  <instructions>
      	    <Private-Package>
      	      org.apache.stanbol.enhancer.jobmanager.impl.*;version=${project.version}
            </Private-Package>
      	  </instructions>
      	</configuration>
      </plugin>
      <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-scr-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
  
  <dependencies>
    <dependency>
      <groupId>org.apache.stanbol</groupId>
      <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
      <version>0.9.0-incubating</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.scr.annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.clerezza</groupId>
      <artifactId>rdf.core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
  </dependencies>
  
</project>
