/**
   * Method execute
   *
   * @param mapping
   * @param form
   * @param request
   * @param response
   * @return ActionForward
   */
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
    // TODO Auto-generated method stub
    HMaster master = (HMaster) getServlet().getServletContext().getAttribute(HMaster.MASTER);

    authorityOperation ao = new authorityOperation();

    String userType = (String) request.getSession().getAttribute("usertype");
    boolean ifAdmin = userType.equals("admin");
    String username = (String) request.getSession().getAttribute("username");

    if (ifAdmin) {
      try {
        Map<byte[], ACLField> tables = ao.getAllTable(master);

        request.setAttribute("tables", tables);
      } catch (MasterNotRunningException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (ZooKeeperConnectionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    } else {
      try {
        Map<byte[], ACLField> tables = ao.getUserTable(master, username);

        request.setAttribute("tables", tables);
      } catch (MasterNotRunningException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (ZooKeeperConnectionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }

    return mapping.findForward("success");
  }
  private void populateTableCombo(boolean force) {

    if (m_configProducer == null) {
      return;
    }

    if (m_connectionProblem) {
      if (!m_currentConfiguration.equals(m_configProducer.getCurrentConfiguration())) {
        // try again - perhaps the user has corrected connection information
        m_connectionProblem = false;
        m_currentConfiguration = m_configProducer.getCurrentConfiguration();
      }
    }

    if ((m_existingTableNamesCombo.getItemCount() == 0 || force) && !m_connectionProblem) {
      String existingName = m_existingTableNamesCombo.getText();
      m_existingTableNamesCombo.removeAll();
      // m_existingMappingNamesCombo.removeAll();
      try {
        Configuration conf = m_configProducer.getHBaseConnection();
        MappingAdmin.checkHBaseAvailable(conf);

        m_admin = new MappingAdmin();
        m_admin.setConnection(conf);

        HBaseAdmin admin = new HBaseAdmin(conf);
        HTableDescriptor[] tables = admin.listTables();

        for (int i = 0; i < tables.length; i++) {
          String currentTableName = tables[i].getNameAsString();
          m_existingTableNamesCombo.add(currentTableName);
        }
        // restore any previous value
        if (!Const.isEmpty(existingName)) {
          m_existingTableNamesCombo.setText(existingName);
        }
      } catch (MasterNotRunningException m) {
        System.err.println("HBase master does not seem to be running.");
        m.printStackTrace();
        m_connectionProblem = true;
        showConnectionErrorDialog(m);
      } catch (ZooKeeperConnectionException z) {
        System.err.println("Unable to connect to zookeeper.");
        z.printStackTrace();
        m_connectionProblem = true;
        showConnectionErrorDialog(z);
      } catch (Exception ex) {
        ex.printStackTrace();
        m_connectionProblem = true;
        showConnectionErrorDialog(ex);
      }
    }
  }
  // Does a Put, Get and a Scan against an hbase table.
  @Test
  public void exampleTest() {

    Configuration config = HBaseConfiguration.create();
    config.set("hbase.zookeeper.quorum", "mulisch");
    HBaseAdmin admin = null;
    try {
      admin = new HBaseAdmin(config);
    } catch (MasterNotRunningException e) {
      e.printStackTrace();
    } catch (ZooKeeperConnectionException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    try {
      // You need a configuration object to tell the client where to connect.
      // When you create a HBaseConfiguration, it reads in whatever you've set
      // into your hbase-site.xml and in hbase-default.xml, as long as these can
      // be found on the CLASSPATH
      // HBaseConfiguration config = new HBaseConfiguration();

      // This instantiates an HTable object that connects you to
      // the "myLittleHBaseTable" table.

      HTableDescriptor ext = new HTableDescriptor("testtable");
      HColumnDescriptor c1 = new HColumnDescriptor("c1");
      HColumnDescriptor c2 = new HColumnDescriptor("c2");

      ext.addFamily(c1);
      ext.addFamily(c2);

      if (!admin.tableExists("testtable")) {
        admin.createTable(ext);
      }

      HTable table = new HTable(config, "testtable");

      // To add to a row, use Put. A Put constructor takes the name of the row
      // you want to insert into as a byte array. In HBase, the Bytes class has
      // utility for converting all kinds of java types to byte arrays. In the
      // below, we are converting the String "myLittleRow" into a byte array to
      // use as a row key for our update. Once you have a Put instance, you can
      // adorn it by setting the names of columns you want to update on the row,
      // the timestamp to use in your update, etc.If no timestamp, the server
      // applies current time to the edits.
      Put p = new Put(Bytes.toBytes("row1"));

      // To set the value you'd like to update in the row 'myLittleRow', specify
      // the column family, column qualifier, and value of the table cell you'd
      // like to update. The column family must already exist in your table
      // schema. The qualifier can be anything. All must be specified as byte
      // arrays as hbase is all about byte arrays. Lets pretend the table
      // 'myLittleHBaseTable' was created with a family 'myLittleFamily'.
      p.add(Bytes.toBytes("c1"), Bytes.toBytes("someQualifier"), Bytes.toBytes("Some Value"));
      p.add(
          Bytes.toBytes("c2"),
          Bytes.toBytes("someOtherQualifier"),
          Bytes.toBytes("Some Other Value"));
      // Once you've adorned your Put instance with all the updates you want to
      // make, to commit it do the following (The HTable#put method takes the
      // Put instance you've been building and pushes the changes you made into
      // hbase)
      table.put(p);

      // Now, to retrieve the data we just wrote. The values that come back are
      // Result instances. Generally, a Result is an object that will package up
      // the hbase return into the form you find most palatable.
      Get g = new Get(Bytes.toBytes("row1"));
      Result r = table.get(g);
      byte[] value = r.getValue(Bytes.toBytes("c1"), Bytes.toBytes("someQualifier"));
      // If we convert the value bytes, we should get back 'Some Value', the
      // value we inserted at this location.
      String valueStr = Bytes.toString(value);
      System.out.println("GET: " + valueStr);

      // Sometimes, you won't know the row you're looking for. In this case, you
      // use a Scanner. This will give you cursor-like interface to the contents
      // of the table. To set up a Scanner, do like you did above making a Put
      // and a Get, create a Scan. Adorn it with column names, etc.
      Scan s = new Scan();
      s.addColumn(Bytes.toBytes("c1"), Bytes.toBytes("someQualifier"));
      ResultScanner scanner = table.getScanner(s);
      try {
        // Scanners return Result instances.
        // Now, for the actual iteration. One way is to use a while loop like so:
        for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
          // print out the row we found and the columns we were looking for
          System.out.println("Found row: " + rr);
        }

        // The other approach is to use a foreach loop. Scanners are iterable!
        // for (Result rr : scanner) {
        // System.out.println("Found row: " + rr);
        // }
      } finally {
        // Make sure you close your scanners when you are done!
        // Thats why we have it inside a try/finally clause
        scanner.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
      fail("failed with IOException");
    }

    try {
      if (admin.tableExists("testtable")) {
        admin.disableTable("testtable");
        admin.deleteTable("testtable");
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  /**
   * Method execute
   *
   * @param mapping
   * @param form
   * @param request
   * @param response
   * @return ActionForward
   */
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
    // TODO Auto-generated method stub
    HMaster master = (HMaster) getServlet().getServletContext().getAttribute(HMaster.MASTER);

    tableOperation to = new tableOperation();
    authorityOperation ao = new authorityOperation();

    Configuration conf = master.getConfiguration();
    boolean security = conf.getBoolean("hbase.server.security", false);

    HTableDescriptor[] adminTables = null;
    Map<byte[], ACLField> userTables = null;
    List<String> tableList = new ArrayList<String>();

    if (security) {
      String username = (String) request.getSession().getAttribute("username");
      String usertype = (String) request.getSession().getAttribute("usertype");
      try {
        if (usertype.equals("admin")) {
          adminTables = to.getAllTable(master);
          for (HTableDescriptor tableDesc : adminTables) {
            tableList.add(tableDesc.getNameAsString());
          }
        } else {
          userTables = ao.getUserVisibleTable(master, username);
          for (Map.Entry<byte[], ACLField> entry : userTables.entrySet()) {
            tableList.add(Bytes.toString(entry.getKey()));
          }
        }
      } catch (MasterNotRunningException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (ZooKeeperConnectionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    } else {
      try {
        adminTables = to.getAllTable(master);
      } catch (MasterNotRunningException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (ZooKeeperConnectionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      for (HTableDescriptor tableDesc : adminTables) {
        tableList.add(tableDesc.getNameAsString());
      }
    }

    request.setAttribute("tableList", tableList);

    return mapping.findForward("success");
  }