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

#
# Add more configurations here.
# key = config file, value = title
#

alfresco-3.4-atompub.properties=Alfresco 3.4 AtomPub
alfresco-3.4-webservices.properties=Alfresco 3.4 Web Services
alfresco-4-atompub.properties=Alfresco 4.0 AtomPub
alfresco-4-webservices.properties=Alfresco 4.0 Web Services
alfresco-4.2-1.0-atompub.properties=Alfresco 4.2 AtomPub (1.0)
alfresco-4.2-1.1-atompub.properties=Alfresco 4.2 AtomPub (1.1)
alfresco-4.2-1.1-browser.properties=Alfresco 4.2 Browser (1.1)
alfresco-cloud-1.0-atompub.properties=Alfresco in the cloud AtomPub (1.0)
alfresco-cloud-1.1-atompub.properties=Alfresco in the cloud AtomPub (1.1)
alfresco-cloud-1.1-browser.properties=Alfresco in the cloud Browser (1.1)

sharepoint-2010-atompub.properties=SharePoint 2010 AtomPub
sharepoint-2010-webservices.properties=SharePoint 2010 Web Services
sharepoint-2013-atompub.properties=SharePoint 2013 AtomPub
sharepoint-2013-webservices.properties=SharePoint 2013 Web Services

opentext-els-10.2.0-atompub.properties=Open Text ELS 10.2.0 AtomPub
opentext-els-10.2.0-webservices.properties=Open Text ELS 10.2.0 Web Services

nuxeo-browser.properties=Nuxeo Browser
nuxeo-atompub.properties=Nuxeo AtomPub (1.1)
nuxeo-atompub-1.0.properties=Nuxeo AtomPub (1.0)
nuxeo-webservices.properties=Nuxeo Web Services

ibm-filenet-p8-atompub.properties=IBM FileNet P8 AtomPub
ibm-filenet-p8-webservices.properties=IBM FileNet P8 Web Services

lotus-live-files-atompub.properties=Lotus Live Files AtomPub
lotus-quickr-domino-atompub.properties=Lotus Quickr Domino AtomPub

opencmis-fileshare-atompub.properties=OpenCMIS FileShare AtomPub
opencmis-fileshare-webservices.properties=OpenCMIS FileShare Web Services
opencmis-fileshare-browser.properties=OpenCMIS FileShare Browser

sap-hana-cloud-atompub.properties=SAP HANA Cloud Document Service AtomPub
sap-hana-cloud-browser.properties=SAP HANA Cloud Document Service Browser

sap-mobile-documents-browser.properties=SAP Mobile Documents