package railo.runtime.tag.util; import railo.commons.lang.StringUtil; import railo.runtime.exp.ApplicationException; public class FileUtil { public static final int NAMECONFLICT_UNDEFINED = 1; // can't start at 0 because we need to be able to do a bitmask test public static final int NAMECONFLICT_ERROR = 2; public static final int NAMECONFLICT_SKIP = 4; // same as IGNORE public static final int NAMECONFLICT_OVERWRITE = 8; // same as MERGE public static final int NAMECONFLICT_MAKEUNIQUE = 16; // public static final int NAMECONFLICT_CLOSURE = 32; // FUTURE public static int toNameConflict( String nameConflict ) throws ApplicationException { if(StringUtil.isEmpty(nameConflict,true)) return NAMECONFLICT_UNDEFINED; nameConflict = nameConflict.trim().toLowerCase(); if("error".equals( nameConflict) ) return NAMECONFLICT_ERROR; if("skip".equals(nameConflict) || "ignore".equals(nameConflict)) return NAMECONFLICT_SKIP; if("merge".equals(nameConflict) || "overwrite".equals(nameConflict)) return NAMECONFLICT_OVERWRITE; if("makeunique".equals(nameConflict) || "unique".equals(nameConflict)) return NAMECONFLICT_MAKEUNIQUE; throw new ApplicationException("Invalid value for attribute nameConflict ["+nameConflict+"]", "valid values are [" + fromNameConflictBitMask( Integer.MAX_VALUE ) + "]"); } /** * * @param nameConflict * @param allowedValuesMask * @return * @throws ApplicationException */ public static int toNameConflict( String nameConflict, int allowedValuesMask ) throws ApplicationException { int result = toNameConflict( nameConflict ); if ( ( allowedValuesMask & result ) == 0 ) { throw new ApplicationException("Invalid value for attribute nameConflict ["+nameConflict+"]", "valid values are [" + fromNameConflictBitMask( allowedValuesMask ) + "]"); } return result; } /** * * @param nameConflict * @param allowedValuesMask * @param defaultValue * @return * @throws ApplicationException */ public static int toNameConflict( String nameConflict, int allowedValuesMask, int defaultValue ) throws ApplicationException { int result = toNameConflict( nameConflict, allowedValuesMask ); if ( result == NAMECONFLICT_UNDEFINED ) return defaultValue; return result; } public static String fromNameConflictBitMask( int bitmask ) { StringBuilder sb = new StringBuilder(); if ( (bitmask & NAMECONFLICT_ERROR) > 0 ) sb.append( "error" ).append(','); if ( (bitmask & NAMECONFLICT_MAKEUNIQUE) > 0 ) sb.append( "makeunique (unique)" ).append(','); if ( (bitmask & NAMECONFLICT_OVERWRITE) > 0 ) sb.append( "overwrite (merge)" ).append(','); if ( (bitmask & NAMECONFLICT_SKIP) > 0 ) sb.append( "skip (ignore)" ).append(','); if ( sb.length() > 0 ) sb.setLength( sb.length() - 1 ); // remove last , return sb.toString(); } }