blob: 45743c79c1dc9401418f3c811855f01cd25f3b0f [file] [log] [blame]
/*
*
* 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 {
}
}