###############################################################################
# Copyright (c) 2009, 2010 Mia-Software.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     Nicolas Bros (Mia-Software) - initial API and implementation
###############################################################################
# NLS_MESSAGEFORMAT_VAR
bin.includes = feature.xml,\
               feature.properties,\
               epl-v10.html,\
               modeling32.png,\
               license.html
src.includes = feature.xml,\
               epl-v10.html,\
               feature.properties,\
               license.html,\
               modeling32.png,\
               build.properties
               
# categories for the features on the update site, in a format understood by Buckminster
category.id.org.eclipse.modisco.categories.infra=MoDisco Infrastructure
category.description.org.eclipse.modisco.categories.infra=Generic components independent from any legacy technology.
category.members.org.eclipse.modisco.categories.infra=org.eclipse.gmt.modisco.infrastructure,\
                                                      org.eclipse.gmt.modisco.infra.cdo.derby,\
                                                      org.eclipse.gmt.modisco.infra.omg

category.id.org.eclipse.modisco.categories.techno=MoDisco Technology
category.description.org.eclipse.modisco.categories.techno=Components dedicated to one legacy technology but independent from any specific modernization use case.
category.members.org.eclipse.modisco.categories.techno=org.eclipse.gmt.modisco.xml,\
                                                       org.eclipse.gmt.modisco.java,\
                                                       org.eclipse.gmt.modisco.java.cdo,\
                                                       org.eclipse.modisco.jee

category.id.org.eclipse.modisco.categories.examples=MoDisco Examples
category.description.org.eclipse.modisco.categories.examples=MoDisco examples features
category.members.org.eclipse.modisco.categories.examples=org.eclipse.gmt.modisco.examples

category.id.org.eclipse.modisco.categories.dev=Only for MoDisco developers
category.description.org.eclipse.modisco.categories.dev=Useful only if you want to work on MoDisco itself (as opposed to merely using it).
category.members.org.eclipse.modisco.categories.dev=org.eclipse.gmt.modisco.java.discoverer.benchmark

category.id.org.eclipse.modisco.categories.usecases=MoDisco Use Cases
category.description.org.eclipse.modisco.categories.usecases=Tools providing a solution for a specific modernization use-case.
category.members.org.eclipse.modisco.categories.usecases=org.eclipse.gmt.modisco.usecase.modelfilter,\
                                                         org.eclipse.gmt.modisco.usecase.simpletransformationschain

category.id.org.eclipse.modisco.categories.default=MoDisco
category.description.org.eclipse.modisco.categories.default=MoDisco

category.default=org.eclipse.modisco.categories.default