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); + } + +}