target "Collaborative Modeling Target Platform"

location "http://download.eclipse.org/releases/oxygen/" eclipse-oxygen {
 org.eclipse.sdk.feature.group
}

/** Manual dependencies */

//manualUpdate
location papyrusOxygenN "http://download.eclipse.org/modeling/mdt/papyrus/updates/nightly/oxygen" {
	 org.eclipse.papyrus.sdk.feature.feature.group lazy
	 org.eclipse.papyrus.views.properties.toolsmiths lazy
}

//manualUpdate
location papyrusOxygenDevN "https://hudson.eclipse.org/papyrus/job/Papyrus-Oxygen-Developer/lastSuccessfulBuild/artifact/repository/" {
	org.eclipse.papyrus.junit.utils lazy
	org.eclipse.papyrus.junit.framework lazy
}

//required for Compare test ProfileMigrationTest 
//manualUpdate
location sysml "http://download.eclipse.org/modeling/mdt/papyrus/components/sysml14/oxygen" {
	org.eclipse.papyrus.sysml14.feature.feature.group lazy
}

//manualUpdate 
location emfCompare "http://download.eclipse.org/modeling/emf/compare/updates/logical/emf.compare/nightly/latest/" {
	org.eclipse.emf.compare.source.feature.group lazy
	org.eclipse.emf.compare.diagram.gmf.source.feature.group lazy
	org.eclipse.emf.compare.uml2.source.feature.group lazy
	org.eclipse.emf.compare.egit.source.feature.group lazy
	org.eclipse.emf.compare.ide.ui.source.feature.group lazy
	org.eclipse.emf.compare.rcp.ui.source.feature.group	lazy
	org.eclipse.emf.compare.tests.source.feature.group lazy
}

//manualUpdate
with requirements
location orbit "http://download.eclipse.org/tools/orbit/downloads/drops/R20170307180635/repository" {
	org.apache.commons.io lazy
	org.apache.commons.io.source lazy
	com.google.inject lazy
	com.google.guava [21.0.0,22.0.0)
	com.google.guava.source [21.0.0,22.0.0)
	/* Egit/Jgit */
	javaewah lazy
	org.apache.commons.compress lazy
	org.kohsuke.args4j lazy
	org.mockito [1.9.0,2.0.0)
	org.hamcrest lazy
	org.hamcrest.library lazy
	org.hamcrest.integration lazy
	org.hamcrest.text lazy
	org.objenesis [1.0.0,2.0.0)
}

/** Automatic dependencies */

//updateFrom("Eclipse OCL 6.3",0) 
location ocl "http://download.eclipse.org/modeling/mdt/ocl/updates/releases/6.3.0" {
 	org.eclipse.ocl.core.sdk.feature.group lazy
	org.eclipse.ocl.examples.classic.feature.group lazy
	org.eclipse.ocl.examples.feature.group lazy
}

//updateFrom("EMF CDO",0) 
location cdo "http://download.eclipse.org/modeling/emf/cdo/drops/R20170614-0227" {
	org.eclipse.emf.cdo.sdk.feature.group lazy
	org.eclipse.emf.cdo.dawn.sdk.feature.group lazy 
	org.eclipse.emf.cdo.dawn.feature.group lazy
}

//updateFrom("EMFT MWE",0)
location mwe2 "http://download.eclipse.org/modeling/emft/mwe/updates/releases/2.9.1/"{
	org.eclipse.emf.mwe.sdk.feature.group lazy
}

//updateFrom("EMF (Core)",0)
location emf "http://download.eclipse.org/modeling/emf/emf/updates/2.13/" {
	org.eclipse.emf.sdk.feature.group lazy
	org.eclipse.xsd.sdk.feature.group lazy
}

//updateFrom("EGit", 0)
location "http://download.eclipse.org/egit/updates-4.9.2" EGit {
 org.eclipse.egit.feature.group [4.9.0,6.0.0)
 org.eclipse.jgit.feature.group [4.9.0,6.0.0)
}

//updateFrom("XWT", 0)
location xwt "http://download.eclipse.org/xwt/updates/" {
	org.eclipse.xwt [1.3.1,2.0.0)
}