docs: public String getPath(CodeType codeType, boolean bPackagePath)
      {
          String strSrcPath = DBConstants.BLANK;
          if (!bPackagePath)
              strSrcPath = this.getField(ClassProject.NAME).toString();
          String pathChar = bPackagePath ? "." : "/";
          switch (codeType)
          {
          case THICK:
              if (!bPackagePath) if (!this.getField(ClassProject.PROJECT_PATH).isNull())
                  strSrcPath = this.getField(ClassProject.PROJECT_PATH).toString();
              if (bPackagePath) if (!this.getField(ClassProject.PACKAGE_NAME).isNull())
                  strSrcPath = this.getField(ClassProject.PACKAGE_NAME).toString();
              break;
          case THIN:
              if (!bPackagePath) if (!this.getField(ClassProject.THIN_PROJECT_PATH).isNull())
                  strSrcPath = this.getField(ClassProject.THIN_PROJECT_PATH).toString();
              if (bPackagePath) if (!this.getField(ClassProject.THIN_PACKAGE).isNull())
                  strSrcPath = this.getField(ClassProject.THIN_PACKAGE).toString();
              break;
          case RESOURCE_PROPERTIES:
          case RESOURCE_CODE:
              if (!bPackagePath) if (!this.getField(ClassProject.RES_PROJECT_PATH).isNull())
                  strSrcPath = this.getField(ClassProject.RES_PROJECT_PATH).toString();
              if (bPackagePath) if (!this.getField(ClassProject.RESOURCE_PACKAGE).isNull())
                  strSrcPath = this.getField(ClassProject.RESOURCE_PACKAGE).toString();
              break;
          case INTERFACE:
              if (!bPackagePath) if (!this.getField(ClassProject.INTERFACE_PROJECT_PATH).isNull())
                  strSrcPath = this.getField(ClassProject.INTERFACE_PROJECT_PATH).toString();
              if (bPackagePath) if (!this.getField(ClassProject.INTERFACE_PACKAGE).isNull())
                  strSrcPath = this.getField(ClassProject.INTERFACE_PACKAGE).toString();
              break;
          }
          
          if (strSrcPath == null)
              strSrcPath = DBConstants.BLANK;
          
          if (this.getField(ClassProject.PARENT_FOLDER_ID).getValue() != 0)
          { // Continue up the chain
              ClassProject classProject = (ClassProject)((ReferenceField)this.getField(ClassProject.PARENT_FOLDER_ID)).getReference();
              if (classProject != null)
                  if ((classProject.getEditMode() == DBConstants.EDIT_CURRENT) || (classProject.getEditMode() == DBConstants.EDIT_IN_PROGRESS))
              {
                  String basePath = classProject.getPath(codeType, bPackagePath);
                  if (basePath != null) if (basePath.length() > 0)
                  {
                      if (".".equals(pathChar))
                          if ((strSrcPath.length() > 0) && (!strSrcPath.startsWith(".")))
                              basePath = DBConstants.BLANK; // The src path is not relative, start at the root
                      if ((basePath.endsWith(pathChar)) || (basePath.length() == 0))
                          pathChar = DBConstants.BLANK;
                      if (pathChar.length() > 0)
                      {
                          if (strSrcPath.startsWith(pathChar))
                              strSrcPath = strSrcPath.substring(1);
                          if (basePath.endsWith(pathChar))
                              basePath = basePath.substring(0, basePath.length() - 1);
                      }
                      if ((strSrcPath.length() == 0) || (basePath.length() == 0))
                          pathChar = DBConstants.BLANK;
                      strSrcPath = basePath + pathChar + strSrcPath;
                  }
              }
          }
          
          if (!bPackagePath)
          {
              strSrcPath = Utility.replaceResources(strSrcPath, null, null, this.getRecordOwner());
              try {
                  strSrcPath = Utility.replaceResources(strSrcPath, null, Utility.propertiesToMap(System.getProperties()), null);
              } catch (SecurityException e) {
                  // Ignore
              }
              strSrcPath = Utility.normalizePath(strSrcPath);
          }
          
          return strSrcPath;
      }