<?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.
-->

<catalog>
    <name>Simple catalogue</name>
    <template name="Basic App" type="org.apache.brooklyn.entity.stock.BasicApplication" />
    <template name="Basic App" type="org.apache.brooklyn.entity.stock.BasicApplication" version="2.0" />
    <template name="Basic App" type="org.apache.brooklyn.entity.stock.BasicApplication">
        <symbolicName>BasicApp</symbolicName>
    </template>
    <template name="Basic App" type="org.apache.brooklyn.entity.stock.BasicApplication" version="2.0">
        <symbolicName>BasicApp</symbolicName>
    </template>
    <template name="Custom App" type="org.apache.brooklyn.entity.stock.BasicApplication">
        <symbolicName>org.apache.brooklyn.camp.brooklyn.catalog.TestBasicApp</symbolicName>
        <!-- Tests that "java:" prefix won't load an old-style catalog item with the same id -->
    </template>
    <template name="Osgi App" type="org.apache.brooklyn.test.osgi.entities.SimpleApplication">
        <symbolicName>OsgiApp</symbolicName>
        <libraries>
            <bundle>${osgi-entities-path}</bundle>
        </libraries>
    </template>
    <catalog>
        <template name="Simple App" type="org.apache.brooklyn.test.osgi.entities.SimpleApplication" />
        <classpath>
            <entry>${osgi-entities-path}</entry>
        </classpath>
    </catalog>
</catalog>
