// :mode=groovy:
/*******************************************************************************
 * Copyright (c) 07.04.2011 Aaron Digulla.
 * 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:
 *    Aaron Digulla - initial API and implementation and/or initial documentation
 *******************************************************************************/
/**
Patches for Eclipse 3.7.0

Created on Apr 7, 2011

@author: Aaron Digulla <digulla@hepe.com>
*/

defaultProfile('m4e.orbit')
profile('m4e.maven-central')
orbitRename()

replace('ch.qos.logback:ch.qos.logback.classic:[0.9.27,)', 'ch.qos.logback:logback-classic:0.9.27')
replace('ch.qos.logback:ch.qos.logback.core:[0.9.27,)', 'ch.qos.logback:logback-core:0.9.27')
// From the Orbit site: The SLF4J Logger is usually part of the Logback Classic Module but was extracted for bundling flexibility reasons.
replace('ch.qos.logback:ch.qos.logback.slf4j:[0.9.27,)', 'ch.qos.logback:logback-classic:0.9.27')
replace('com.google.collect:com.google.collect:[1.0.0,)', 'com.google.collections:google-collections:1.0')
replace('com.google.inject:com.google.inject:[2.0.0,)', 'com.google.inject:guice:2.0')

replace('com.jcraft.jsch:com.jcraft.jsch:[0.1.41,)', 'com.jcraft:jsch:0.1.41')
replace('com.lowagie.text:com.lowagie.text:[2.1.7,)', 'com.lowagie:itext:2.1.7')

// Pretty old on Maven Central :-/
replace('com.sun.jna:com.sun.jna:[3.2.7,)', 'com.sun.jna:jna:3.0.9')
//replace('', '')

// Not sure about this one
replace('java_cup.runtime:java_cup.runtime:[0.10.0,)', 'edu.princeton.cup:java-cup:10k')
replace('javax.activation:javax.activation:[1.1.0,)', 'javax.activation:activation:1.1')
// Nothing suitable on central: javax.annotation:javax.annotation:1.1.1
replace('javax.mail:javax.mail:[1.4.0,)', 'javax.mail:mail:1.4')
replace('javax.persistence:javax.persistence:[2.0.1,)', 'javax.persistence:persistence-api:1.0')
replace('javax.servlet.jsp:javax.servlet.jsp:[2.0.0,)', 'javax.servlet:jsp-api:2.0')
replace('javax.servlet:javax.servlet:[2.5.0,)', 'javax.servlet:servlet-api:2.5')
// Not sure about this one
replace('javax.transaction:javax.transaction:[1.1.1,)', 'javax.transaction:jta:1.1')
replace('javax.wsdl:javax.wsdl:[1.5.1,)', 'wsdl4j:wsdl4j:1.5.1')
replace('javax.xml.bind:javax.xml.bind:[2.1.9,)', 'javax.xml.bind:jaxb-api:2.1')
replace('javax.xml.bind:javax.xml.bind:[2.2.0,)', 'javax.xml.bind:jaxb-api:2.2.4')
replace('javax.xml.rpc:javax.xml.rpc:[1.1.0,)', 'javax.xml:jaxrpc-api:1.1')
replace('javax.xml.soap:javax.xml.soap:[1.2.0,)', 'javax.xml:saaj-api:1.2')
replace('javax.xml.stream:javax.xml.stream:[1.0.1,)', 'javax.xml:jsr173:1.0')
replace('javax.xml:javax.xml:[1.3.4,)', 'xml-apis:xml-apis:1.3.04')
// Does not exist on Central
//replace('lpg.runtime.java:lpg.runtime.java:[2.0.17,)', '')
//replace('net.sourceforge.lpg:net.sourceforge.lpg.lpgjavaruntime:[1.1.0,)', '')
replace('org.apache.ant:org.apache.ant:[1.7.1,)', 'org.apache.ant:ant:1.7.1')
replace('org.apache.axis:org.apache.axis:[1.4.0,)', 'org.apache.axis:axis:1.4')
replace('org.apache.batik:org.apache.batik.bridge:[1.6.0,)', 'batik:batik-bridge:1.6')
replace('org.apache.batik:org.apache.batik.css:[1.6.0,)', 'batik:batik-css:1.6')
replace('org.apache.batik:org.apache.batik.dom:[1.6.0,)', 'batik:batik-dom:1.6')
replace('org.apache.batik:org.apache.batik.dom.svg:[1.6.0,)', 'batik:batik-svg:1.6')
replace('org.apache.batik:org.apache.batik.ext.awt:[1.6.0,)', 'batik:batik-awt-util:1.6')
replace('org.apache.batik:org.apache.batik.parser:[1.6.0,)', 'batik:batik-parser:1.6')
replace('org.apache.batik:org.apache.batik.pdf:[1.6.0,)', 'batik:batik-rasterizer:1.6')
replace('org.apache.batik:org.apache.batik.svggen:[1.6.0,)', 'batik:batik-svggen:1.6')
replace('org.apache.batik:org.apache.batik.transcoder:[1.6.0,)', 'batik:batik-transcoder:1.6')
replace('org.apache.batik:org.apache.batik.util:[1.6.0,)', 'batik:batik-util:1.6')
replace('org.apache.batik:org.apache.batik.util.gui:[1.6.0,)', 'batik:batik-gui-util:1.6')
replace('org.apache.batik:org.apache.batik.xml:[1.6.0,)', 'batik:batik-xml:1.6')
replace('org.apache.bcel:org.apache.bcel:[5.2.0,)', 'org.apache.bcel:bcel:5.2')
replace('org.apache.commons:org.apache.commons.codec:[1.3.0,)', 'commons-codec:commons-codec:1.3')
replace('org.apache.commons:org.apache.commons.collections:[3.2.0,)', 'commons-collections:commons-collections:3.2')
replace('org.apache.commons:org.apache.commons.discovery:[0.2.0,)', 'commons-discovery:commons-discovery:0.2')
replace('org.apache.commons:org.apache.commons.el:[1.0.0,)', 'commons-el:commons-el:1.0')
replace('org.apache.commons:org.apache.commons.httpclient:[3.1.0,)', 'commons-httpclient:commons-httpclient:3.1')
replace('org.apache.commons:org.apache.commons.lang:[2.3.0,)', 'commons-lang:commons-lang:2.3')
replace('org.apache.commons:org.apache.commons.logging:[1.1.1,)', 'commons-logging:commons-logging:1.1.1')
replace('org.apache.commons:org.apache.commons.net:[2.0.0,)', 'commons-net:commons-net:2.0')
replace('org.apache.derby:org.apache.derby:[10.5.1,)', 'org.apache.derby:derby:10.5.3.0_1')
// Does not exist on Central
//replace('org.apache.derby.core:[10.5.1,)', '')
replace('org.apache.jasper:org.apache.jasper:[5.5.17,)', 'tomcat:jasper-compiler:5.5.23')
replace('org.apache.log4j:org.apache.log4j:[1.2.15,)', 'log4j:log4j:1.2.15')
replace('org.apache.lucene:org.apache.lucene:[1.9.1,)', 'org.apache.lucene:lucene-core:1.9.1')
replace('org.apache.lucene:org.apache.lucene.analysis:[1.9.1,)', 'org.apache.lucene:lucene-analyzers:1.9.1')
replace('org.apache.oro:org.apache.oro:[2.0.8,)', 'oro:oro:2.0.8')
replace('org.apache.velocity:org.apache.velocity:[1.5.0,)', 'velocity:velocity:1.5')
// What's this???
//replace('org.apache.ws:org.apache.ws.commons.util:[1.0.0,)', '')
// What's this???
//replace('org.apache.wsil4j:org.apache.wsil4j:[1.0.0,)', '')
replace('org.apache.xalan:org.apache.xalan:[2.7.1,)', 'xalan:xalan:2.7.1')
replace('org.apache.xerces:org.apache.xerces:[2.9.0,)', 'xerces:xercesImpl:2.9.0')
replace('org.apache.xml:org.apache.xml.resolver:[1.2.0,)', 'xml-resolver:xml-resolver:1.2')
replace('org.apache.xml:org.apache.xml.serializer:[2.7.1,)', 'xalan:serializer:2.7.1')
replace('org.apache.xmlrpc:org.apache.xmlrpc:[3.0.0,)', 'xmlrpc:xmlrpc:3.0')
replace('org.h2:org.h2:[1.1.117,)', 'com.h2database:h2database:1.1.117')
replace('org.hamcrest.core:org.hamcrest.core:[1.1.0,)', 'org.hamcrest:hamcrest-core:1.1')
replace('org.jdom:org.jdom:[1.0.0,)', 'jdom:jdom:1.0')
replace('org.junit4:org.junit4:[4.8.1,)', 'junit:junit:4.8.1')
replace('org.junit:org.junit:[3.8.2,)', 'junit:junit:3.8.2')
replace('org.mortbay.jetty:org.mortbay.jetty.server:[6.1.23,)', 'org.mortbay.jetty:jetty:6.1.23')
replace('org.mortbay.jetty:org.mortbay.jetty.util:[6.1.23,)', 'org.mortbay.jetty:jetty-util:6.1.23')
replace('org.mozilla.javascript:org.mozilla.javascript:[1.6.0,2.0.0)', 'rhino:js:1.7R2')
replace('org.objectweb.asm:org.objectweb.asm:[3.2.0,)', 'asm:asm:3.2')
replace('org.sat4j.core:org.sat4j.core:[2.2.0,)', 'org.sat4j:org.sat4j.core:2.2.3')
replace('org.sat4j.pb:org.sat4j.pb:[2.2.0,)', 'org.sat4j:org.sat4j.pb:2.2.3')
// Does not exist on Central
//replace('org.uddi4j:org.uddi4j:[2.0.5,)', '')
replace('org.w3c.css:org.w3c.css.sac:[1.3.0,)', 'org.w3c.css:sac:1.3')
// Does not exist on Central
//replace('org.w3c.dom:org.w3c.dom.events:[3.0.0,)', '')
// Does not exist on Central
//replace('org.w3c.dom:org.w3c.dom.smil:[1.0.1,)', '')
// Does not exist on Central
//replace('org.w3c.dom:org.w3c.dom.svg:[1.1.0,)', '')
replace('org.w3c.sac:org.w3c.sac:[1.3.0,)', 'org.w3c.css:sac:1.3')

deleteDependency('system.bundle:system.bundle:[0,)')

deleteArtifact('javax.xml.bind:javax.xml.bind:2.1.9')

// org.apache.batik.pdf is tainted with code from commons-io and commons-logging
deleteClasses( 'org.apache.batik:org.apache.batik.pdf:1.6.0*', [ 'org/apache/commons/*' ])
