Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 28th, 2012  |  syntax: None  |  size: 7.32 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package io.jvz.eclipse;
  2.  
  3. /*******************************************************************************                                                                                                                                          
  4.  * Copyright (c) 2010-2011 Jason van Zyl                                                                                                                                                                                
  5.  * All rights reserved. This program and the accompanying materials                                                                                                                                                      
  6.  * are made available under the terms of the Eclipse Public License v1.0                                                                                                                                                  
  7.  * which accompanies this distribution, and is available at                                                                                                                                                              
  8.  *   http://www.eclipse.org/legal/epl-v10.html                                                                                                                                                                            
  9.  *******************************************************************************/    
  10.  
  11. import java.io.File;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import java.io.Writer;
  15. import java.util.List;
  16. import java.util.Properties;
  17.  
  18. import org.apache.maven.model.Dependency;
  19. import org.apache.maven.model.Model;
  20. import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
  21. import org.codehaus.plexus.component.annotations.Component;
  22. import org.codehaus.plexus.component.annotations.Requirement;
  23. import org.codehaus.plexus.logging.Logger;
  24. import org.codehaus.plexus.util.FileUtils;
  25. import org.eclipse.osgi.service.resolver.BundleDescription;
  26. import org.eclipse.osgi.service.resolver.State;
  27. import org.eclipse.osgi.service.resolver.StateObjectFactory;
  28. import org.eclipse.tycho.core.TargetEnvironment;
  29. import org.eclipse.tycho.core.osgitools.EquinoxResolver;
  30. import org.eclipse.tycho.core.osgitools.targetplatform.EclipseInstallationLayout;
  31. import org.eclipse.tycho.core.utils.ExecutionEnvironmentUtils;
  32. import org.eclipse.tycho.core.utils.PlatformPropertiesUtils;
  33. import org.osgi.framework.BundleException;
  34.  
  35. import copied.org.eclipse.tycho.core.osgitools.DependencyComputer;
  36. import copied.org.eclipse.tycho.core.osgitools.DependencyComputer.DependencyEntry;
  37.  
  38. @Component(role = EclipseInstallationToMavenRepositoryConverter.class)
  39. public class DefaultEclipseInstallationToMavenRepositoryConverter implements EclipseInstallationToMavenRepositoryConverter {
  40.  
  41.   @Requirement
  42.   private Logger logger;
  43.  
  44.   @Requirement
  45.   private EclipseInstallationLayout eclipseInstallation;
  46.  
  47.   @Requirement
  48.   private EquinoxResolver resolver;
  49.  
  50.   @Requirement
  51.   private DependencyComputer dependencyComputer;
  52.  
  53.   @Requirement(hint="eclipse")
  54.   private GroupIdSynthesizer groupIdSynthesizer;
  55.  
  56.   @Requirement(hint="eclipse")
  57.   private ArtifactIdSynthesizer artifactIdSynthesizer;
  58.  
  59.   @Requirement(hint="eclipse")
  60.   private VersionSynthesizer versionSynthesizer;
  61.  
  62.   private static StateObjectFactory factory = StateObjectFactory.defaultFactory;
  63.  
  64.   public static final String SYSTEM_BUNDLE_SYMBOLIC_NAME = "system.bundle";
  65.  
  66.   public void convert(File eclipseInstallationLocation, File mavenRepository) throws BundleException {
  67.  
  68.     eclipseInstallation.setLocation(eclipseInstallationLocation);
  69.     Properties properties = getPlatformProperties(new Properties(), null);
  70.     State state = factory.createState(true);
  71.     state.setPlatformProperties(properties);
  72.  
  73.     long id = 1;
  74.  
  75.     for (File bundle : eclipseInstallation.getPlugins(eclipseInstallationLocation)) {
  76.       logger.debug("Adding:  " + bundle);
  77.       resolver.addBundle(state, id++, bundle, false);
  78.     }
  79.  
  80.     state.resolve();
  81.     BundleDescription[] bundles = state.getBundles();
  82.     logger.info("Number of bundles: " + bundles.length);
  83.     MavenXpp3Writer mavenWriter = new MavenXpp3Writer();
  84.     for (BundleDescription bundleDescription : bundles) {
  85.      
  86.       //
  87.       // Right now we will only deal with bundles that are in the form of JARS. I'm not sure how to deal with
  88.       // bundles that are in exploded form.
  89.       //
  90.       File bundleLocation = new File(bundleDescription.getLocation());
  91.       if(bundleLocation.isDirectory()) {
  92.         continue;
  93.       }
  94.      
  95.       Model model = createMavenModel(state, bundleDescription);
  96.       try {
  97.         // groupId = org.eclipse.ant
  98.         // artifactId = org.eclipse.ant.core
  99.         // version = 1.0.0
  100.         //
  101.         // org/eclipse/ant/org.eclilpse.ant.core/1.0.0/org.eclipse.ant.core-1.0.0.pom
  102.         //
  103.         String baseName = model.getArtifactId() + "-" + model.getVersion();
  104.         File baseDirectory = new File(mavenRepository, model.getGroupId().replace('.', '/') + '/' + model.getArtifactId() + '/' + model.getVersion());
  105.         if (!baseDirectory.exists()) {
  106.           baseDirectory.mkdirs();
  107.         }
  108.         File modelFile = new File(baseDirectory, baseName + ".pom");
  109.         File artifactFile = new File(baseDirectory, baseName + ".jar");
  110.         //
  111.         // Write out the POM
  112.         //
  113.         Writer writer = new FileWriter(modelFile);
  114.         mavenWriter.write(writer, model);
  115.         //
  116.         // Write out the artifact
  117.         //
  118.         FileUtils.copyFile(bundleLocation, artifactFile);
  119.        
  120.       } catch (IOException e) {
  121.         logger.error("Error: "+e.getMessage());
  122.       }
  123.     }
  124.   }
  125.  
  126.   private Model createMavenModel(State state, BundleDescription bd) {
  127.     Model model = createModel(bd);
  128.     List<DependencyEntry> bundleDependencies = dependencyComputer.computeDependencies(state.getStateHelper(), bd, true);
  129.     for (DependencyEntry d : bundleDependencies) {
  130.       model.addDependency(dependency(d.desc));
  131.     }
  132.     return model;
  133.   }
  134.  
  135.   protected Model createModel(BundleDescription bd) {
  136.     Model model = new Model();
  137.     model.setModelVersion("4.0.0");
  138.     model.setGroupId(groupIdSynthesizer.convert(bd.getSymbolicName()));
  139.     model.setArtifactId(artifactIdSynthesizer.convert(bd.getSymbolicName()));
  140.     model.setVersion(versionSynthesizer.convert(bd.getVersion().toString()));
  141.     return model;
  142.   }
  143.  
  144.   protected Dependency dependency(BundleDescription bd) {    
  145.     Dependency d = new Dependency();
  146.     d.setGroupId(groupIdSynthesizer.convert(bd.getSymbolicName()));
  147.     d.setArtifactId(artifactIdSynthesizer.convert(bd.getSymbolicName()));
  148.     d.setVersion(versionSynthesizer.convert(bd.getVersion().toString()));
  149.     return d;
  150.   }
  151.  
  152.   //
  153.   //
  154.   //
  155.  
  156.   protected Properties getPlatformProperties(Properties properties, TargetEnvironment environment) {
  157.     if (environment != null) {
  158.       properties.put(PlatformPropertiesUtils.OSGI_OS, environment.getOs());
  159.       properties.put(PlatformPropertiesUtils.OSGI_WS, environment.getWs());
  160.       properties.put(PlatformPropertiesUtils.OSGI_ARCH, environment.getArch());
  161.     }
  162.  
  163.     ExecutionEnvironmentUtils.loadVMProfile(properties);
  164.     //
  165.     // Put Equinox OSGi resolver into development mode.
  166.     // See http://www.nabble.com/Re:-resolving-partially-p18449054.html
  167.     //
  168.     properties.put(org.eclipse.osgi.framework.internal.core.Constants.OSGI_RESOLVER_MODE, org.eclipse.osgi.framework.internal.core.Constants.DEVELOPMENT_MODE);
  169.     return properties;
  170.   }
  171. }