public static boolean basicValidateFiles(
     ActionErrors actionErrors,
     Number fieldId,
     ActionForm form,
     IGTEntity entity,
     String[] extensions)
     throws GTClientException {
   try {
     boolean newEntity = entity.isNewEntity();
     if (!(form instanceof GTActionFormBase)) {
       throw new java.lang.UnsupportedOperationException(
           "Form must be a subclass of GTActionFormBase");
     }
     IGTFieldMetaInfo fmi = entity.getFieldMetaInfo(fieldId);
     if (fmi == null) {
       throw new java.lang.NullPointerException(
           "No fieldMetaInfo for field:" + fieldId + " of entity " + entity);
     }
     if ((!fmi.isDisplayable(newEntity)) || (!fmi.isEditable(newEntity))) {
       return true;
     }
     String fieldName = fmi.getFieldName(); // 20030410AH
     FormFileElement[] elements =
         ((GTActionFormBase) form).getFormFileElements(fieldName); // 20030410AH
     if (fmi.isMandatory(newEntity)) {
       if ((elements == null) || (elements.length == 0)) {
         addFieldError(actionErrors, fieldName, entity.getType(), REQUIRED, null); // 20021220AH
         return false;
       }
     }
     if (extensions != null) { // 20030410AH - Check file extensions are of those allowed
       boolean allOk = true;
       if (elements != null) {
         for (int i = 0; i < elements.length; i++) {
           String filename = elements[i].getFileName();
           if (filename == null)
             throw new NullPointerException("Internal assertion failure: filename is null");
           String extension = StaticUtils.getFileExtension(filename);
           if (StaticUtils.findValueInArray(extensions, extension, false) == -1) {
             String[] params = new String[] {filename};
             addFieldError(actionErrors, fieldName, entity.getType(), INVALID_EXTENSION, params);
             return false;
           }
         }
       }
     }
     return true;
   } catch (Throwable t) {
     throw new GTClientException("Error validating file field:" + fieldId, t);
   }
 }