docs: public Object doRemoteAction(String strCommand, Map<String, Object> properties) throws DBException, RemoteException
      {
          if ((MenuConstants.CHANGE_PASSWORD.equalsIgnoreCase(strCommand)) && (properties != null))
          {
              Record recUserInfo = Record.makeRecordFromClassName(UserInfoModel.USER_INFO_FILE, this);
              Object objErrorCode = null;
              try {
                  String strUserName = (String)properties.get(Params.USER_NAME);
                  if (strUserName == null)
                      strUserName = (String)properties.get(Params.USER_ID);
                  String strCurrentPassword = (String)properties.get(Params.PASSWORD);
                  String strNewPassword = (String)properties.get("newPassword");
                  if (((UserInfoModel)recUserInfo).getUserInfo(strUserName, false) == false)
                      throw new RemoteException(this.getString("Error, user name is incorrect."));
                  if ((recUserInfo.getField(UserInfoModel.PASSWORD).isNull()) || (!recUserInfo.getField(UserInfo.PASSWORD).toString().equals(strCurrentPassword)))
                      throw new RemoteException(this.getString("Error, current password was incorrect."));
                  if ((strNewPassword == null) || (strNewPassword.length() == 0))
                      throw new RemoteException(this.getString("Error, new password can't be empty."));
                  recUserInfo.edit();
                  recUserInfo.getField(UserInfoModel.PASSWORD).setString(strNewPassword);
                  recUserInfo.set();
                  objErrorCode = new Integer(DBConstants.NORMAL_RETURN);  // Success!
              } catch (DBException ex) {
                  throw ex;
              } finally {
                  recUserInfo.free();
              }
              return objErrorCode;
          }
          else if ((MenuConstants.CREATE_NEW_USER.equalsIgnoreCase(strCommand)) && (properties != null))
          {
              Record recUserInfo = Record.makeRecordFromClassName(UserInfoModel.THICK_CLASS, this);
              ((UserInfoModel)recUserInfo).setupNewUserHandler();
              Object objErrorCode = null;
              try {
                  String strUserName = (String)properties.get(Params.USER_NAME);
                  String strPassword = (String)properties.get(Params.PASSWORD);
                  if (((UserInfoModel)recUserInfo).getUserInfo(strUserName, false) == true)
                      throw new RemoteException(this.getString("Error, user name already exists."));
                  recUserInfo.addNew();
                  recUserInfo.getField(UserInfoModel.USER_NAME).setString(strUserName);
                  recUserInfo.getField(UserInfoModel.PASSWORD).setString(strPassword);
                  recUserInfo.add();
                  objErrorCode = new Integer(DBConstants.NORMAL_RETURN);  // Success!
              } catch (DBException ex) {
                  throw ex;
              } finally {
                  recUserInfo.free();
              }
              return objErrorCode;
          }
          else if ((DBParams.TABLE_PATH.equalsIgnoreCase(strCommand)) && (properties != null))
          {
              //String dataType = (String)properties.get(YDatabase.DATA_TYPE);
              String recordClass = (String)properties.get(YDatabase.RECORD_CLASS);
              String tableName = (String)properties.get(YDatabase.TABLE_NAME);
              String language = (String)properties.get(Params.LANGUAGE);
          	
              try {
              	ByteArrayOutputStream ostream = new ByteArrayOutputStream();
  				NetUtility.getNetTable(recordClass, tableName, language, this, this, this, ostream);
  				return ostream.toByteArray();
  			} catch (IOException e) {
  				e.printStackTrace();
  			}
          }
          return super.doRemoteAction(strCommand, properties);
      }