Updated Branches:
  refs/heads/master f57d54194 -> 4d387c682

NO JIRA:
- Made the SDKGenerator process all found air and flex sdks in the right order 
by sorting the conversions according to the version information found in the 
sdks themselves.


Project: http://git-wip-us.apache.org/repos/asf/flex-utilities/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-utilities/commit/1845ac53
Tree: http://git-wip-us.apache.org/repos/asf/flex-utilities/tree/1845ac53
Diff: http://git-wip-us.apache.org/repos/asf/flex-utilities/diff/1845ac53

Branch: refs/heads/master
Commit: 1845ac53b6dcc3e5cf37975b1a283b2550f965bb
Parents: f57d541
Author: Christofer Dutz <christofer.d...@c-ware.de>
Authored: Sun Nov 3 15:37:42 2013 +0100
Committer: Christofer Dutz <christofer.d...@c-ware.de>
Committed: Sun Nov 3 15:37:42 2013 +0100

----------------------------------------------------------------------
 mavenizer/src/main/java/SDKGenerator.java       | 91 +++++++++++---------
 .../src/main/java/common/ConversionPlan.java    | 57 ++++++++++++
 2 files changed, 107 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/1845ac53/mavenizer/src/main/java/SDKGenerator.java
----------------------------------------------------------------------
diff --git a/mavenizer/src/main/java/SDKGenerator.java 
b/mavenizer/src/main/java/SDKGenerator.java
index 401367c..c69eda6 100644
--- a/mavenizer/src/main/java/SDKGenerator.java
+++ b/mavenizer/src/main/java/SDKGenerator.java
@@ -15,11 +15,10 @@
  * limitations under the License.
  */
 import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
 import javax.xml.parsers.*;
 
 import air.AirCompilerGenerator;
+import common.ConversionPlan;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
@@ -37,7 +36,21 @@ import flex.FlexRuntimeGenerator;
  */
 public class SDKGenerator {
 
-    protected List<String> generatedAirVersions = new ArrayList<String>();
+    protected void buildAirConversionPlan(ConversionPlan plan, File 
sdkSourceDirectory) {
+        final File sdkDirectories[] = sdkSourceDirectory.listFiles(new 
FileFilter() {
+            public boolean accept(File pathname) {
+                return pathname.isDirectory();
+            }
+        });
+        if (sdkDirectories != null) {
+            for (final File sdkDirectory : sdkDirectories) {
+                final String sdkVersion = getAirSdkVersion(sdkDirectory);
+                if(sdkVersion != null) {
+                    plan.addVersion(sdkVersion, sdkDirectory, false);
+                }
+            }
+        }
+    }
 
     /**
      * All this little helper does is list up all directories in the given 
base directory and
@@ -45,34 +58,19 @@ public class SDKGenerator {
      * is identical to that of an ordinary air sdk. Therefore the import works 
if a flex sdk or
      * an air sdk directory is passed to this method.
      *
-     * @param sdkSourceDirectory source directory containing the air content
+     * @param plan conversion plan for converting the air sdks containing the 
air content
      * @param sdkTargetDirectory directory where to copy the content
      * @throws Exception
      */
-    public void generateAllAir(File sdkSourceDirectory, File 
sdkTargetDirectory) throws Exception {
-        final File sdkDirectories[] = sdkSourceDirectory.listFiles(new 
FileFilter() {
-            public boolean accept(File pathname) {
-                return pathname.isDirectory();
-            }
-        });
-        if (sdkDirectories != null) {
-            
System.out.println("---------------------------------------------");
-            for (final File sdkDirectory : sdkDirectories) {
-                String sdkVersion = getAirSdkVersion(sdkDirectory);
-
-                // As we are eventually generating the air sdks first, a flex 
sdk processed
-                // later could contain the same version of air, in this case 
we skip that.
-                if((sdkVersion != null) && 
!generatedAirVersions.contains(sdkVersion)) {
-                    System.out.println("-- Generating Air SDK version: " + 
sdkVersion);
-                    
System.out.println("---------------------------------------------");
-
-                    generateAir(sdkDirectory, sdkTargetDirectory, sdkVersion);
+    public void generateAllAir(ConversionPlan plan, File sdkTargetDirectory) 
throws Exception {
+        for(final String airVersion : plan.getVersionIterator()) {
+            final File airDirectory = plan.getDirectory(airVersion);
 
-                    
System.out.println("---------------------------------------------");
+            
System.out.println("---------------------------------------------");
+            System.out.println("-- Generating Air SDK version: " + airVersion);
+            
System.out.println("---------------------------------------------");
 
-                    generatedAirVersions.add(sdkVersion);
-                }
-            }
+            generateAir(airDirectory, sdkTargetDirectory, airVersion);
         }
     }
 
@@ -87,31 +85,38 @@ public class SDKGenerator {
         new AirRuntimeGenerator().process(sdkSourceDirectory, false, 
sdkTargetDirectory, sdkVersion, false);
     }
 
-    public void generateAllFlex(File sdkSourceDirectory, File 
sdkTargetDirectory, boolean useApache) throws Exception {
+    protected void buildFlexConversionPlan(ConversionPlan plan, File 
sdkSourceDirectory) {
         final File sdkDirectories[] = sdkSourceDirectory.listFiles(new 
FileFilter() {
             public boolean accept(File pathname) {
                 return pathname.isDirectory();
             }
         });
         if (sdkDirectories != null) {
-            
System.out.println("---------------------------------------------");
+            // Build a sorted set of versions as well as maps for the 
additional information
+            // to allow sorted conversion of the Flex SDKs.
             for (final File sdkDirectory : sdkDirectories) {
-                String sdkVersion = getFlexSdkVersion(sdkDirectory);
-
-                // Apache FDKs (ok ... the only one available) have the 
version prefix "Apache-"
+                String fdkVersion = getFlexSdkVersion(sdkDirectory);
+                // Apache FDKs have the version prefix "Apache-"
                 // So this is what we use in order to determine what type of 
FDK it is.
-                final boolean isApache = sdkVersion.startsWith("Apache-");
+                final boolean isApache = fdkVersion.startsWith("Apache-");
                 if (isApache) {
-                    sdkVersion = sdkVersion.substring("Apache-".length());
+                    fdkVersion = fdkVersion.substring("Apache-".length());
                 }
+                plan.addVersion(fdkVersion, sdkDirectory, isApache);
+            }
+        }
+    }
 
-                System.out.println("-- Generating Flex SDK version: " + 
sdkVersion);
-                
System.out.println("---------------------------------------------");
+    public void generateAllFlex(ConversionPlan plan, File sdkTargetDirectory, 
boolean useApache) throws Exception {
+        for(final String fdkVersion : plan.getVersionIterator()) {
+            final File fdkDirectory = plan.getDirectory(fdkVersion);
+            final boolean isApache = plan.getApacheFlag(fdkVersion);
 
-                generateFlex(sdkDirectory, isApache, sdkTargetDirectory, 
sdkVersion, useApache);
+            
System.out.println("---------------------------------------------");
+            System.out.println("-- Generating Flex SDK version: " + 
fdkVersion);
+            
System.out.println("---------------------------------------------");
 
-                
System.out.println("---------------------------------------------");
-            }
+            generateFlex(fdkDirectory, isApache, sdkTargetDirectory, 
fdkVersion, useApache);
         }
     }
 
@@ -146,11 +151,15 @@ public class SDKGenerator {
         // hashes has to be created first. Therefore the Generator generates 
air artifacts by processing air
         // sdk directories and then by extracting the needed artifacts from 
the flex fdks.
         final SDKGenerator generator = new SDKGenerator();
-        generator.generateAllAir(new File(sdkSourceDirectory, "air"), 
sdkTargetDirectory);
-        generator.generateAllAir(new File(sdkSourceDirectory, "flex"), 
sdkTargetDirectory);
+        final ConversionPlan airPlan = new ConversionPlan();
+        generator.buildAirConversionPlan(airPlan, new File(sdkSourceDirectory, 
"air"));
+        generator.buildAirConversionPlan(airPlan, new File(sdkSourceDirectory, 
"flex"));
+        generator.generateAllAir(airPlan, sdkTargetDirectory);
 
         // After the air artifacts are generated and
-        generator.generateAllFlex(new File(sdkSourceDirectory, "flex"), 
sdkTargetDirectory, useApache);
+        final ConversionPlan flexPlan = new ConversionPlan();
+        generator.buildFlexConversionPlan(flexPlan, new 
File(sdkSourceDirectory, "flex"));
+        generator.generateAllFlex(flexPlan, sdkTargetDirectory, useApache);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/1845ac53/mavenizer/src/main/java/common/ConversionPlan.java
----------------------------------------------------------------------
diff --git a/mavenizer/src/main/java/common/ConversionPlan.java 
b/mavenizer/src/main/java/common/ConversionPlan.java
new file mode 100644
index 0000000..ec83ecf
--- /dev/null
+++ b/mavenizer/src/main/java/common/ConversionPlan.java
@@ -0,0 +1,57 @@
+package common;
+
+import java.io.File;
+import java.util.*;
+
+/**
+ * Created by cdutz on 01.11.13.
+ */
+public class ConversionPlan {
+
+    private final Set<String> versions;
+    private final Map<String, File> directories;
+    private final Map<String, Boolean> apacheFlags;
+
+    public ConversionPlan() {
+        final Comparator<String> versionComparator = new Comparator<String>() {
+            public int compare(String o1, String o2) {
+                final String[] versionSegments1 = o1.split("\\.");
+                final String[] versionSegments2 = o2.split("\\.");
+                final int length = Math.min(versionSegments1.length, 
versionSegments2.length);
+                // Compare each of the segments.
+                for(int i = 0; i < length; i++) {
+                    final int result = new 
Integer(versionSegments1[i]).compareTo(Integer.parseInt(versionSegments2[i]));
+                    if(result != 0) {
+                        return result;
+                    }
+                }
+                // If all segments were equal, the string that has more 
segments wins.
+                return Integer.compare(versionSegments1.length, 
versionSegments2.length);
+            }
+        };
+        versions = new TreeSet<String>(versionComparator);
+        directories = new HashMap<String, File>();
+        apacheFlags = new HashMap<String, Boolean>();
+    }
+
+    public void addVersion(String version, File directory, Boolean apacheFlag) 
{
+        if(!versions.contains(version)) {
+            versions.add(version);
+            directories.put(version, directory);
+            apacheFlags.put(version, apacheFlag);
+        }
+    }
+
+    public Set<String> getVersionIterator() {
+        return versions;
+    }
+
+    public File getDirectory(String version) {
+        return directories.get(version);
+    }
+
+    public Boolean getApacheFlag(String version) {
+        return apacheFlags.get(version);
+    }
+
+}

Reply via email to