Esempio n. 1
0
public class GroupList extends UserRecord<GroupList> {

  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------
  // SQL table definition below

  /* table name */
  public static final String _TABLE_NAME = "GroupList";

  public static String TABLE_NAME() {
    return DBProvider._translateTableName(_TABLE_NAME);
  }

  /* field definition */
  public static final String FLD_userID = User.FLD_userID;
  public static final String FLD_groupID = DeviceGroup.FLD_groupID;
  private static DBField FieldInfo[] = {
    // GroupList fields
    newField_accountID(true),
    newField_userID(true),
    new DBField(FLD_groupID, String.class, DBField.TYPE_GROUP_ID(), "Device Group ID", "key=true"),
    // Common fields
    // newField_lastUpdateTime(),
    // newField_lastUpdateUser(true),
    newField_creationTime(),
  };

  /* key class */
  public static class Key extends UserKey<GroupList> {
    public Key() {
      super();
    }

    public Key(String accountId, String userId, String groupId) {
      super.setFieldValue(FLD_accountID, ((accountId != null) ? accountId.toLowerCase() : ""));
      super.setFieldValue(FLD_userID, ((userId != null) ? userId.toLowerCase() : ""));
      super.setFieldValue(FLD_groupID, ((groupId != null) ? groupId.toLowerCase() : ""));
    }

    public DBFactory<GroupList> getFactory() {
      return GroupList.getFactory();
    }
  }

  /* factory constructor */
  private static DBFactory<GroupList> factory = null;

  public static DBFactory<GroupList> getFactory() {
    if (factory == null) {
      factory =
          DBFactory.createDBFactory(
              GroupList.TABLE_NAME(),
              GroupList.FieldInfo,
              DBFactory.KeyType.PRIMARY,
              GroupList.class,
              GroupList.Key.class,
              true /*editable*/,
              true /*viewable*/);
      factory.addParentTable(Account.TABLE_NAME());
      factory.addParentTable(User.TABLE_NAME());
      factory.addParentTable(DeviceGroup.TABLE_NAME());
    }
    return factory;
  }

  /* Bean instance */
  public GroupList() {
    super();
  }

  /* database record */
  public GroupList(GroupList.Key key) {
    super(key);
  }

  // ------------------------------------------------------------------------

  /* table description */
  public static String getTableDescription(Locale loc) {
    I18N i18n = I18N.getI18N(GroupList.class, loc);
    return i18n.getString(
        "GroupList.description",
        "This table defines " + "the authorized Groups that can be accessed by a given User.");
  }

  // SQL table definition above
  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------
  // Bean access fields below

  public String getGroupID() {
    String v = (String) this.getFieldValue(FLD_groupID);
    return StringTools.trim(v);
  }

  private void setGroupID(String v) {
    this.setFieldValue(FLD_groupID, StringTools.trim(v));
  }

  // Bean access fields above
  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------

  public String toString() {
    return this.getAccountID() + "/" + this.getUserID() + "/" + this.getGroupID();
  }

  // ------------------------------------------------------------------------

  /* overridden to set default values */
  public void setCreationDefaultValues() {
    // super.setRuntimeDefaultValues();
  }

  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------

  public static boolean exists(String acctID, String userID, String groupID)
      throws DBException // if error occurs while testing existance
      {
    if ((acctID != null) && (userID != null) && (groupID != null)) {
      GroupList.Key grpListKey = new GroupList.Key(acctID, userID, groupID);
      return grpListKey.exists();
    }
    return false;
  }

  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------

  /* get/create device list entry */
  public static GroupList getGroupList(User user, String groupID, boolean createOK)
      throws DBException {
    // does not return null, if 'createOK' is true

    /* User specified? */
    if (user == null) {
      throw new DBException("User not specified.");
    }
    String accountID = user.getAccountID();
    String userID = user.getUserID();

    /* group exists? */
    if (StringTools.isBlank(groupID)) {
      throw new DBException("DeviceGroup ID not specified.");
    } else if (!DeviceGroup.exists(accountID, groupID)) {
      throw new DBException("DeviceGroup does not exist: " + accountID + "/" + groupID);
    }

    /* create/save record */
    GroupList.Key grpListKey = new GroupList.Key(accountID, userID, groupID);
    if (grpListKey.exists()) { // may throw DBException
      // already exists
      GroupList listItem = grpListKey.getDBRecord(true);
      listItem.setUser(user);
      return listItem;
    } else if (createOK) {
      GroupList listItem = grpListKey.getDBRecord();
      listItem.setCreationDefaultValues();
      listItem.setUser(user);
      return listItem;
    } else {
      // record doesn't exist, and caller doesn't want us to create it
      return null;
    }
  }

  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------

  /* return the DBSelect statement for the specified account/group */
  protected static DBSelect _getUserListSelect(String acctId, String groupId) {

    /* empty/null account */
    if (StringTools.isBlank(acctId)) {
      return null;
    }

    /* empty/null user */
    if (StringTools.isBlank(groupId)) {
      return null;
    }

    /* get select */
    // DBSelect: SELECT * FROM GroupList WHERE ((accountID='acct') and (groupID='group')) ORDER BY
    // userID
    DBSelect<GroupList> dsel = new DBSelect<GroupList>(GroupList.getFactory());
    dsel.setSelectedFields(GroupList.FLD_userID);
    DBWhere dwh = dsel.createDBWhere();
    dsel.setWhere(
        dwh.WHERE_(
            dwh.AND(
                dwh.EQ(GroupList.FLD_accountID, acctId), dwh.EQ(GroupList.FLD_groupID, groupId))));
    dsel.setOrderByFields(GroupList.FLD_userID);
    return dsel;
  }

  /* return list of all Devices within the specified DeviceGroup (NOT SCALABLE BEYOND A FEW HUNDRED GROUPS) */
  public static java.util.List<String> getUsersForGroup(String acctId, String groupId)
      throws DBException {

    /* valid account/groupId? */
    if (StringTools.isBlank(acctId)) {
      return null;
    } else if (StringTools.isBlank(groupId)) {
      return null;
    }

    /* get db selector */
    DBSelect dsel = GroupList._getUserListSelect(acctId, groupId);
    if (dsel == null) {
      return null;
    }

    /* read users for group */
    java.util.List<String> usrList = new Vector<String>();
    DBConnection dbc = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
      dbc = DBConnection.getDefaultConnection();
      stmt = dbc.execute(dsel.toString());
      rs = stmt.getResultSet();
      while (rs.next()) {
        String usrId = rs.getString(GroupList.FLD_userID);
        usrList.add(usrId);
      }
    } catch (SQLException sqe) {
      throw new DBException("Get Group GroupeList", sqe);
    } finally {
      if (rs != null) {
        try {
          rs.close();
        } catch (Throwable t) {
        }
      }
      if (stmt != null) {
        try {
          stmt.close();
        } catch (Throwable t) {
        }
      }
      DBConnection.release(dbc);
    }

    /* return list */
    return usrList;
  }

  // ------------------------------------------------------------------------
  // ------------------------------------------------------------------------

}