signet.save(subjectType);
private void processFile(Signet signet, SubjectFileLoader loader, BufferedReader in)  throws IOException, ObjectNotFoundException, SQLException {    try {    String lineData = "";    String lineData2 = "";    String lineData3 = "";    String keyword = "";    String value = "";    String subjectSourceID = "";    String subjectTypeID = "";    String subjectID = "";    String subjectName = "";    int    lineNumber = 0;    while ((lineData = in.readLine()) != null) {      lineNumber++;      // System.out.println(lineNumber + ": " + lineData);      if (lineData.startsWith("/"))      {         // skip      }               else if (lineData.equals(""))      {         //skip      }              else {         System.out.println(lineNumber + ": " + lineData);         StringTokenizer st = new StringTokenizer(lineData);            if (st.hasMoreTokens()) {            keyword = st.nextToken();            if (!keyword.equals("source"))            {               throw new IOException               ("Error in line " + lineNumber + ": Initial keyword must be 'source'");            }         }            if (st.hasMoreTokens()) {            subjectSourceID = st.nextToken();            if (!subjectSourceID.equals("person"))            {               throw new IOException               ("Error in line " + lineNumber + ": Only source of type 'person' currently allowed");            }         }            if (st.hasMoreTokens()) {            value = st.nextToken();            throw new IOException            ("Error in line " + lineNumber + ": Extraneous data: " + value);         }                  if (!subjectSourceID.equals("")) {            break;         }      }    }    // SubjectType subjectType = signet.getSubjectType(subjectSourceID);    removeSubjects();    // Temporary -- add back the required SubjectType row...    signet.beginTransaction();    SubjectType subjectType = signet.newSubjectType("person", "Person");    signet.commit();    Subject subject = null;    String  currAttributeName = "";    String  prevAttributeName = "";    String  attributeName = "";    int     attributeInstance = 0;        while ((lineData = in.readLine()) != null) {      lineNumber++;      System.out.println(lineNumber + ": " + lineData);      if (lineData.startsWith("/"))      {         // skip      }               else if (lineData.equals(""))      {         //skip      }              else {         if (lineData.startsWith("+")) {                        // Get the subject header line            lineData = lineData.substring(1);                        // Get the description (required, must be next)            lineNumber++;            lineData2 = in.readLine();            if (lineData2 == "") {               throw new IOException ("No Description row found");            }            System.out.println(lineNumber + ": " + lineData2);                        // Get the LoginID (required for now, must be next)            lineNumber++;            lineData3 = in.readLine();            if (lineData3 == "") {               throw new IOException ("No LoginID row found");            }            System.out.println(lineNumber + ": " + lineData3);                       subject = loader.processAddSubject(loader, subjectType, lineData, lineData2, lineData3);               currAttributeName = "";            prevAttributeName = "";            attributeInstance = 1;            } else {               currAttributeName = loader.processSubjectAttribute(loader, subject, lineData, prevAttributeName, attributeInstance);            if (currAttributeName.equals(prevAttributeName) ) {               attributeInstance++;            } else {               prevAttributeName = currAttributeName;               attributeInstance = 2;            }         }       }    }    } catch (Exception e) {        System.err.println("Exception caught: " + e.getMessage());    }//    } catch (ObjectNotFoundException e) {//         throw new ObjectNotFoundException(e.getMessage());//    }  }