public static IndividualAttributeMaps readUserAttributeFile(String filename) {
        File xmlFile = new File(filename);
        if (!xmlFile.exists() || xmlFile.isDirectory())
            return null;
        
        IndividualAttributeMaps iam = new IndividualAttributeMaps(filename);
        
        try {
          Document doc = PositionalXMLReader.readXML(filename);
  
          doc.getDocumentElement().normalize();
          
          // parse the colors
          NodeList colors = ((Element)doc.getElementsByTagName(XML_COLORS).item(0)).getElementsByTagName(XML_COLOR);
          HashMap<String, Color> colorMap = new HashMap<String, Color>();
          for (int i = 0; i < colors.getLength(); i++) {
              Node node = colors.item(i);
              if (node.getNodeType() == Node.ELEMENT_NODE) {
                  parseColor((Element) node, colorMap);
              }
          }
          iam.attributeColorMap = colorMap;
          
          // parse the criteria
          NodeList crits = (doc.getElementsByTagName(XML_CRITERIA).item(0)).getChildNodes();
          for (int i = 0; i < crits.getLength(); i++) {
              Node node = crits.item(i);
              if (node.getNodeType() == Node.ELEMENT_NODE) {
                  parseCriteriaUser((Element) node, iam);
              }
          }
          

      } catch (
    Exception ex) {
          ex.printStackTrace();
//          UserDialog.showError("Error in line " + ex.getMessage(), "File Error", vc.getFrame());
      }
      
      return iam;
    }