<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.isis.extensions</groupId>
        <artifactId>isis-extensions</artifactId>
        <version>2.0.0-M8</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>isis-extensions-fullcalendar</artifactId>
    <name>Apache Isis Ext - FullCalendar (parent)</name>
    <packaging>pom</packaging>

    <description>
        A component for Apache Isis' Wicket viewer, displaying collections of objects that have a date on a fullcalendar.io (JavaScript widget).
    </description>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.isis.extensions</groupId>
                <artifactId>isis-extensions-fullcalendar-applib</artifactId>
                <version>2.0.0-M8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.isis.extensions</groupId>
                <artifactId>isis-extensions-fullcalendar-wicket</artifactId>
                <version>2.0.0-M8</version>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.apache.isis.extensions</groupId>
                <artifactId>isis-extensions-fullcalendar-wicket-integration</artifactId>
                <version>2.0.0-M8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.isis.extensions</groupId>
                <artifactId>isis-extensions-fullcalendar-wicket-ui</artifactId>
                <version>2.0.0-M8</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <modules>
        <module>applib</module>
        <module>wicket</module>
    </modules>

</project>
