public void setFields(Node node, NodeModel model) {
    for (Iterator i = fieldComponents.keySet().iterator(); i.hasNext(); ) {
      String fieldId = (String) i.next();
      Field field = Configuration.getFieldFromId(fieldId);
      Object value = field.getValue(node, model, null);

      String stringValue = "";
      if (value != null) stringValue = FieldConverter.toString(value);
      Object textComp = fieldComponents.get(fieldId);
      if (textComp instanceof JLabel) ((JLabel) textComp).setText(stringValue);
      else {
        ((ChangeAwareTextField) textComp).setText(stringValue);
        ((ChangeAwareComponent) textComp).resetChange();
      }
    }
  }
  public List getChange() {
    ArrayList change = new ArrayList();
    for (Iterator i = fieldComponents.keySet().iterator(); i.hasNext(); ) {
      String fieldId = (String) i.next();
      Object component = fieldComponents.get(fieldId);
      if (component instanceof ChangeAwareComponent
          && ((ChangeAwareComponent) component).hasChanged()) {
        String stringValue;
        if (component instanceof JTextField) stringValue = ((JTextField) component).getText();
        // hangle other components here
        else continue;

        Field field = Configuration.getFieldFromId(fieldId);
        try {
          Object value = FieldConverter.fromString(stringValue, field.getDisplayType());
          change.add(new FieldChange(field, value));
        } catch (Exception e) {
          Alert.error(e.getMessage());
        }
      }
    }
    return change;
  }
  public static void clear(boolean graphic) {
    ProjectFactory.getInstance()
        .setPromptDisabled(true); // prevent remove projects job from prompting to save
    Job job =
        ProjectFactory.getInstance().getPortfolio().getRemoveAllProjectsJob(null, false, null);
    SessionFactory.getInstance().getLocalSession().schedule(job);
    try {
      job.waitResult();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if (graphic) {
      GraphicManager gm = GraphicManager.getInstance();
      if (gm != null) ((DefaultFrameManager) gm.getFrameManager()).cleanUp(false);
    }
    ProjectFactory.getInstance().getPortfolio().getObjectEventManager().removeAll();
    ProjectFactory.getInstance().setPromptDisabled(false); // enable prompting again

    // Singletons, most of them can cause problems when it re-used.
    // Other singletons shouldn't be problem but have a cleanUp method just in case
    SessionFactory.cleanUp();
    ProjectFactory.cleanUp();
    ResourcePoolFactory.cleanUp();
    UniqueIdPool.cleanUp();
    MainFrame.cleanUp();
    GraphicManager.cleanUpStatic();
    StartupFactory.cleanUpStatic();

    CalendarCatalog.cleanUp();
    CalendarDefinition.cleanUp();
    CalendarService.cleanUp();
    WorkingCalendar.cleanUp();

    AdvancedOption.cleanUp();
    CalculationOption.cleanUp();
    CalendarOption.cleanUp();
    EditOption.cleanUp();
    GanttOption.cleanUp();
    GeneralOption.cleanUp();
    ScheduleOption.cleanUp();
    TimesheetOption.cleanUp();

    FieldConverter.cleanUp();

    ActionLists.cleanUp();
    CellStyles.cleanUp();
    Configuration.cleanUp();
    Dictionary.cleanUp();

    Factory.cleanUp();
    ImportedCalendarService.cleanUp(); // remove dep
    NotAssignmentFilter.cleanUp();
    NotVoidFilter.cleanUp();
    HelpUtil.cleanUp();
    ZeroFunctor.cleanUp();
    NameCellComponent.cleanUp();
    ScheduleService.cleanUp();
    PageSizes.cleanUp();
    ContextStore.cleanUp();
    CustomFieldsMapper.cleanUp(); // remove dep
  }