| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| package utils; |
| import java.io.*; |
| import java.util.*; |
| |
| /** |
| * Creates compile commands given a list of files, |
| * basically: searches .mxml files for a testSWF="val" and |
| * returns the set of includes for that testSWF |
| * the assumption is that we're in the current directory to do the compile. |
| * descrube: |
| */ |
| public class MustellaDirs { |
| |
| public static final String testProp = "testSWF="; |
| |
| /** |
| * find the testSWF and return what it references. |
| */ |
| public static String getTestSwf(String name) { |
| |
| String ret = null; |
| |
| try { |
| |
| String line = null; |
| BufferedReader br = new BufferedReader (new FileReader (name)); |
| /// we will not go far into a file to get this |
| int count = 0 ; |
| |
| int loc = -1; |
| |
| while ( (line=br.readLine()) != null) { |
| |
| if ((loc = line.indexOf(testProp)) != -1) { |
| |
| ret = line.substring (loc+testProp.length()+1, line.indexOf ("\"", loc + testProp.length()+2)); |
| break; |
| |
| } |
| } |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| |
| |
| String dir = null; |
| |
| |
| if (ret != null) |
| dir=getSwfDir (name); |
| |
| if (dir != null) |
| return dir + File.separator + ret; |
| else { |
| |
| |
| return ret; |
| |
| } |
| |
| |
| } |
| |
| |
| public static String getSwfDir (String file) { |
| |
| |
| // bust off the back. |
| |
| String dir = null; |
| |
| dir = file.substring (0, file.lastIndexOf(File.separator)); |
| // System.out.println ("dir1: " + dir); |
| dir = dir.substring (0, dir.lastIndexOf(File.separator)); |
| // System.out.println ("dir1: " + dir); |
| |
| |
| String copy1 = dir + File.separator + "SWFs"; |
| |
| // System.out.println ("TRYING: " + copy1); |
| |
| if ( new File(copy1).exists()) { |
| // System.out.println ("FOUND IT!"); |
| return copy1; |
| } |
| |
| |
| String copy2 = dir + File.separator + "swfs"; |
| // System.out.println ("TRYING: " + copy2); |
| |
| if ( new File(copy2).exists()) { |
| // System.out.println ("FOUND IT!"); |
| return copy2; |
| } |
| |
| |
| return null; |
| |
| } |
| |
| |
| |
| public static void printAsCommands(HashMap hm) { |
| |
| // getCommands (hm); |
| |
| String test = null; |
| Iterator it = hm.entrySet().iterator(); |
| Map.Entry me = null; |
| ArrayList tmp = null; |
| String tmps = null; |
| while (it.hasNext()) { |
| |
| me = (Map.Entry) it.next(); |
| test= (String)me.getKey(); |
| tmp = (ArrayList) me.getValue(); |
| |
| System.out.print (test); |
| System.out.print (" "); |
| |
| for (int i=0;i<tmp.size();i++) { |
| System.out.print (tmp.get(i)); |
| System.out.print (" "); |
| } |
| |
| System.out.println (""); |
| } |
| |
| |
| |
| } |
| |
| |
| public static void getCommands (HashMap hm) { |
| |
| |
| Iterator it = hm.entrySet().iterator(); |
| ArrayList ret = new ArrayList(); |
| ArrayList tmp = null; |
| |
| |
| StringBuffer sb = null; |
| String test = null; |
| String tmps = null; |
| |
| Map.Entry me = null; |
| while (it.hasNext()) { |
| |
| me = (Map.Entry) it.next(); |
| test= (String)me.getKey(); |
| tmp = (ArrayList) me.getValue(); |
| |
| ArrayList tmpr = new ArrayList(); |
| |
| if (tmp == null) |
| continue; |
| |
| sb = new StringBuffer(); |
| |
| for (int i=0;i<tmp.size();i++) { |
| |
| sb.append (" -includes="); |
| sb.append ( (String)tmp.get(i) ); |
| tmpr.add (sb.toString()); |
| |
| } |
| |
| |
| hm.put (test, tmpr); |
| |
| } |
| |
| |
| // return ret; |
| |
| } |
| |
| |
| public static boolean contains (String target, String toSplit) { |
| |
| String [] args = toSplit.split (";"); |
| |
| |
| for (int i=0;i<args.length;i++) { |
| if (args[i].equals (target)) { |
| return true; |
| } |
| } |
| |
| return false; |
| |
| |
| |
| |
| |
| } |
| |
| /** |
| the bug is that swfs maps testSwfs to fq path to testSwf |
| |
| but it could be a dupe in the test swf name, |
| |
| which would fail. |
| |
| **/ |
| |
| public static void genHashMap (String file, HashMap includes, HashMap swfs, String survivor) { |
| |
| if (!file.endsWith (".mxml")) |
| System.out.println ("not an mxml file, returning"); |
| |
| |
| HashMap map = new HashMap (); |
| |
| String testSwf = null; |
| testSwf = getTestSwf (file); |
| |
| |
| // System.out.println ("have this file and test swf: " + file + " " + testSwf); |
| |
| |
| ArrayList al = null; |
| |
| Iterator it = null; |
| |
| String tmp = null; |
| |
| String path = null; |
| |
| int count = 0; |
| |
| |
| /// It references a testSwf, ergo, it goes on the -include line |
| if (testSwf != null) { |
| al = (ArrayList)includes.get (testSwf); |
| // first test seen for this swf |
| if (al == null) { |
| /// create a list for the line |
| al = new ArrayList(); |
| includes.put (testSwf, al); |
| } |
| |
| |
| |
| if (swfs.get (testSwf) == null) |
| swfs.put (testSwf, null); |
| |
| /// I think we'll have to clean this up |
| try { |
| path = new File(file).getParent(); |
| file = new File(file).getName(); |
| /// if survivor is non null, we're only adding the file it points to |
| if (survivor != null) { |
| // if (file.equals (survivor)) { |
| if (contains(file, survivor)) { |
| // System.out.println ("genHash - survivor file: adding path, file: " + path + " " + file + " for key: " + testSwf); |
| al.add (" -includes=" + cleanFile(file)); |
| if (path != null && path.length() > 0) |
| al.add (" -source-path+=" + path); |
| } |
| } else { |
| // System.out.println ("genHash - file: adding path, file: " + path + " " + file + " for key: " + testSwf); |
| al.add (" -includes=" + cleanFile(file)); |
| // this could get too long. We should really only add this once |
| // ie, get rid of duplicates |
| if (path != null && path.length() > 0) { |
| al.add (" -source-path+=" + path); |
| // System.out.println ("genHash - Adding path: " + path); |
| } |
| /* |
| if (swfs.get (testSwf) == null) { |
| System.out.println ("genHash - Still null for " + testSwf + " Making a guess" ); |
| addGuessSwfPath (swfs, testSwf, path); |
| } |
| */ |
| } |
| } catch (Exception e) { |
| System.out.println ("Exception dealing with the path/Name there"); |
| e.printStackTrace(); |
| } |
| } else { |
| /// in this half, we have an mxml file that does not reference |
| /// a testswf itself, potentially. |
| /// let's yank the end of it off and figure out the key it goes with |
| /// swfs creates an association of simple names, like main.mxml, |
| /// to their path + file name |
| tmp = new File ( file ).getPath() ; |
| // tmp = new File ( file ).getName() ; |
| // System.out.println ("genHash - file: non referent: "+ tmp + " " + file); |
| if ( swfs.get(tmp) == null) { |
| // System.out.println ("genHash - file: non referent: "+ tmp + " " + file); |
| swfs.put (file, tmp); |
| } |
| } |
| |
| // System.out.println (swfs); |
| |
| } |
| |
| |
| /** |
| * make a guess about the right path + test swf |
| */ |
| public static void addGuessSwfPath (HashMap swfs, String testSwf, String path) { |
| |
| |
| /// return the guess about where this stuff lives if it's not already there |
| try { |
| testSwf = new File (testSwf).getName(); |
| // System.out.println ("addGuess with tweaked testSwf: " + testSwf); |
| if (new File (transform1(testSwf, path)).exists()) { |
| // System.out.println ("genHash - putting on a new swf for " + testSwf); |
| |
| swfs.put (testSwf, transform1(testSwf,path)); |
| } |
| } catch (NullPointerException npe) { |
| System.out.println ("genHash - putting a null on for " + testSwf); |
| swfs.put (testSwf, null); |
| |
| } |
| |
| |
| } |
| |
| |
| /** |
| * walk the path to guess about the right path + test swf |
| */ |
| public static String transform1 (String file, String path) { |
| |
| // System.out.println ("genHash - transform with : " + file + " " + path); |
| |
| if (path.indexOf (File.separator) != -1) { |
| path = path.substring (0, path.lastIndexOf (File.separator)); |
| // System.out.println ("path now: " + path); |
| if (new File(path + File.separator + "SWFs").exists()) { |
| path=path + File.separator + "SWFs"; |
| } else if (new File(path + File.separator + "swfs").exists()) { |
| path=path + File.separator + "swfs"; |
| } |
| if (new File(path + File.separator + file).exists()) |
| path=path + File.separator + file; |
| else { |
| path = null; |
| } |
| |
| } else if (path.indexOf ("/") != -1) { |
| path = path.substring (0, path.lastIndexOf ("/")); |
| // System.out.println ("path now: " + path); |
| if (new File(path + "/"+ "SWFs").exists()) { |
| path=path + "/"+ "SWFs"; |
| } else if (new File(path + "/"+ "swfs").exists()) { |
| path=path + "/"+ "swfs"; |
| } |
| |
| if (new File(path + "/" + file).exists()) |
| path=path + "/"+ file; |
| else { |
| path = null; |
| } |
| |
| } |
| |
| |
| return path ; |
| |
| } |
| |
| public static void printFiles (String dir) { |
| |
| try { |
| System.out.println ("Begin list"); |
| |
| String [] s = new File (dir).list(); |
| |
| for (int i=0;i<s.length;i++) |
| System.out.println (s[i]); |
| |
| |
| |
| } catch (Exception e) { |
| } |
| |
| System.out.println ("END list"); |
| } |
| |
| |
| public static String cleanFile (String f) { |
| |
| if (f.indexOf (".mxml") != -1) |
| return f.substring (0, f.indexOf (".mxml")); |
| |
| return f; |
| |
| |
| } |
| public static void main (String [] args) throws Exception { |
| |
| |
| } |
| |
| } |