You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2010/03/29 21:15:20 UTC

svn commit: r928876 [4/13] - in /hadoop/hbase/trunk: ./ contrib/stargate/ contrib/stargate/conf/ contrib/stargate/core/ contrib/stargate/core/src/ contrib/stargate/core/src/main/ contrib/stargate/core/src/main/java/ contrib/stargate/core/src/main/java/...

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterStatusModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterStatusModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterStatusModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterStatusModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,620 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.hadoop.hbase.stargate.ProtobufMessageHandler;
+import org.apache.hadoop.hbase.stargate.protobuf.generated.StorageClusterStatusMessage.StorageClusterStatus;
+import org.apache.hadoop.hbase.util.Bytes;
+
+import com.google.protobuf.ByteString;
+
+/**
+ * Representation of the status of a storage cluster:
+ * <p>
+ * <ul>
+ * <li>regions: the total number of regions served by the cluster</li>
+ * <li>requests: the total number of requests per second handled by the
+ * cluster in the last reporting interval</li>
+ * <li>averageLoad: the average load of the region servers in the cluster</li>
+ * <li>liveNodes: detailed status of the live region servers</li>
+ * <li>deadNodes: the names of region servers declared dead</li>
+ * </ul>
+ * 
+ * <pre>
+ * &lt;complexType name="StorageClusterStatus"&gt;
+ *   &lt;sequence&gt;
+ *     &lt;element name="liveNode" type="tns:Node"
+ *       maxOccurs="unbounded" minOccurs="0"&gt;
+ *     &lt;/element&gt;
+ *     &lt;element name="deadNode" type="string" maxOccurs="unbounded"
+ *       minOccurs="0"&gt;
+ *     &lt;/element&gt;
+ *   &lt;/sequence&gt;
+ *   &lt;attribute name="regions" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="requests" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="averageLoad" type="float"&gt;&lt;/attribute&gt;
+ * &lt;/complexType&gt;
+ *
+ * &lt;complexType name="Node"&gt;
+ *   &lt;sequence&gt;
+ *     &lt;element name="region" type="tns:Region" 
+ *       maxOccurs="unbounded" minOccurs="0"&gt;&lt;/element&gt;
+ *   &lt;/sequence&gt;
+ *   &lt;attribute name="name" type="string"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="startCode" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="requests" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="heapSizeMB" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="maxHeapSizeMB" type="int"&gt;&lt;/attribute&gt;
+ * &lt;/complexType&gt;
+ *
+ * &lt;complexType name="Region"&gt;
+ *   &lt;attribute name="name" type="base64Binary"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="stores" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="storefiles" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="storefileSizeMB" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="memstoreSizeMB" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="storefileIndexSizeMB" type="int"&gt;&lt;/attribute&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ */
+@XmlRootElement(name="ClusterStatus")
+public class StorageClusterStatusModel 
+    implements Serializable, ProtobufMessageHandler {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Represents a region server.
+	 */
+	public static class Node {
+	  
+	  /**
+	   * Represents a region hosted on a region server.
+	   */
+	  public static class Region {
+	    private byte[] name;
+	    private int stores;
+	    private int storefiles;
+	    private int storefileSizeMB;
+	    private int memstoreSizeMB;
+	    private int storefileIndexSizeMB;
+
+	    /**
+	     * Default constructor
+	     */
+	    public Region() {}
+
+	    /**
+	     * Constructor
+	     * @param name the region name
+	     */
+	    public Region(byte[] name) {
+	      this.name = name;
+	    }
+
+	    /**
+	     * Constructor
+	     * @param name the region name
+	     * @param stores the number of stores
+	     * @param storefiles the number of store files
+	     * @param storefileSizeMB total size of store files, in MB
+	     * @param memstoreSizeMB total size of memstore, in MB
+	     * @param storefileIndexSizeMB total size of store file indexes, in MB
+	     */
+	    public Region(byte[] name, int stores, int storefiles,
+          int storefileSizeMB, int memstoreSizeMB, int storefileIndexSizeMB) {
+        this.name = name;
+        this.stores = stores;
+        this.storefiles = storefiles;
+        this.storefileSizeMB = storefileSizeMB;
+        this.memstoreSizeMB = memstoreSizeMB;
+        this.storefileIndexSizeMB = storefileIndexSizeMB;
+      }
+
+      /**
+	     * @return the region name
+	     */
+	    @XmlAttribute
+	    public byte[] getName() {
+	      return name;
+	    }
+
+	    /**
+	     * @return the number of stores 
+	     */
+	    @XmlAttribute
+	    public int getStores() {
+        return stores;
+      }
+
+      /**
+       * @return the number of store files 
+       */
+      @XmlAttribute
+      public int getStorefiles() {
+        return storefiles;
+      }
+
+      /**
+       * @return the total size of store files, in MB
+       */
+      @XmlAttribute
+      public int getStorefileSizeMB() {
+        return storefileSizeMB;
+      }
+
+      /**
+       * @return memstore size, in MB
+       */
+      @XmlAttribute
+      public int getMemstoreSizeMB() {
+        return memstoreSizeMB;
+      }
+
+      /**
+       * @return the total size of store file indexes, in MB
+       */
+      @XmlAttribute
+      public int getStorefileIndexSizeMB() {
+        return storefileIndexSizeMB;
+      }
+
+      /**
+	     * @param name the region name
+	     */
+	    public void setName(byte[] name) {
+	      this.name = name;
+	    }
+
+	    /**
+	     * @param stores the number of stores
+	     */
+      public void setStores(int stores) {
+        this.stores = stores;
+      }
+
+      /**
+       * @param storefiles the number of store files
+       */
+      public void setStorefiles(int storefiles) {
+        this.storefiles = storefiles;
+      }
+
+      /**
+       * @param storefileSizeMB total size of store files, in MB
+       */
+      public void setStorefileSizeMB(int storefileSizeMB) {
+        this.storefileSizeMB = storefileSizeMB;
+      }
+
+      /**
+       * @param memstoreSizeMB memstore size, in MB
+       */
+      public void setMemstoreSizeMB(int memstoreSizeMB) {
+        this.memstoreSizeMB = memstoreSizeMB;
+      }
+
+      /**
+       * @param storefileIndexSizeMB total size of store file indexes, in MB
+       */
+      public void setStorefileIndexSizeMB(int storefileIndexSizeMB) {
+        this.storefileIndexSizeMB = storefileIndexSizeMB;
+      }
+	  }
+
+	  private String name;
+    private long startCode;
+    private int requests;
+    private int heapSizeMB;
+    private int maxHeapSizeMB;
+    private List<Region> regions = new ArrayList<Region>();
+
+    /**
+     * Add a region name to the list
+     * @param name the region name
+     */
+    public void addRegion(byte[] name, int stores, int storefiles,
+        int storefileSizeMB, int memstoreSizeMB, int storefileIndexSizeMB) {
+      regions.add(new Region(name, stores, storefiles, storefileSizeMB,
+        memstoreSizeMB, storefileIndexSizeMB));
+    }
+
+    /**
+     * @param index the index
+     * @return the region name
+     */
+    public Region getRegion(int index) {
+      return regions.get(index);
+    }
+
+    /**
+     * Default constructor
+     */
+    public Node() {}
+
+    /**
+     * Constructor
+     * @param name the region server name
+     * @param startCode the region server's start code
+     */
+    public Node(String name, long startCode) {
+      this.name = name;
+      this.startCode = startCode;
+    }
+
+    /**
+     * @return the region server's name
+     */
+    @XmlAttribute
+    public String getName() {
+      return name;
+    }
+
+    /**
+     * @return the region server's start code
+     */
+    @XmlAttribute
+    public long getStartCode() {
+      return startCode;
+    }
+
+    /**
+     * @return the current heap size, in MB
+     */
+    @XmlAttribute
+    public int getHeapSizeMB() {
+      return heapSizeMB;
+    }
+
+    /**
+     * @return the maximum heap size, in MB
+     */
+    @XmlAttribute
+    public int getMaxHeapSizeMB() {
+      return maxHeapSizeMB;
+    }
+
+    /**
+     * @return the list of regions served by the region server
+     */
+    @XmlElement(name="Region")
+    public List<Region> getRegions() {
+      return regions;
+    }
+
+    /**
+     * @return the number of requests per second processed by the region server
+     */
+    @XmlAttribute
+    public int getRequests() {
+      return requests;
+    }
+
+    /**
+     * @param name the region server's hostname
+     */
+    public void setName(String name) {
+      this.name = name;
+    }
+
+    /**
+     * @param startCode the region server's start code
+     */
+    public void setStartCode(long startCode) {
+      this.startCode = startCode;
+    }
+
+    /**
+     * @param heapSizeMB the current heap size, in MB
+     */
+    public void setHeapSizeMB(int heapSizeMB) {
+      this.heapSizeMB = heapSizeMB;
+    }
+
+    /**
+     * @param maxHeapSizeMB the maximum heap size, in MB
+     */
+    public void setMaxHeapSizeMB(int maxHeapSizeMB) {
+      this.maxHeapSizeMB = maxHeapSizeMB;
+    }
+
+    /**
+     * @param regions a list of regions served by the region server
+     */
+    public void setRegions(List<Region> regions) {
+      this.regions = regions;
+    }
+
+    /**
+     * @param requests the number of requests per second processed by the
+     * region server
+     */
+    public void setRequests(int requests) {
+      this.requests = requests;
+    }
+	}
+
+	private List<Node> liveNodes = new ArrayList<Node>();
+	private List<String> deadNodes = new ArrayList<String>();
+	private int regions;
+	private int requests;
+	private double averageLoad;
+
+	/**
+	 * Add a live node to the cluster representation.
+	 * @param name the region server name
+	 * @param startCode the region server's start code
+	 * @param heapSizeMB the current heap size, in MB
+	 * @param maxHeapSizeMB the maximum heap size, in MB
+	 */
+	public Node addLiveNode(String name, long startCode, int heapSizeMB,
+	    int maxHeapSizeMB) {
+	  Node node = new Node(name, startCode);
+	  node.setHeapSizeMB(heapSizeMB);
+	  node.setMaxHeapSizeMB(maxHeapSizeMB);
+	  liveNodes.add(node);
+	  return node;
+	}
+
+	/**
+	 * @param index the index
+	 * @return the region server model
+	 */
+	public Node getLiveNode(int index) {
+	  return liveNodes.get(index);
+	}
+
+	/**
+	 * Add a dead node to the cluster representation.
+	 * @param node the dead region server's name
+	 */
+	public void addDeadNode(String node) {
+	  deadNodes.add(node);
+	}
+	
+	/**
+	 * @param index the index
+	 * @return the dead region server's name
+	 */
+	public String getDeadNode(int index) {
+	  return deadNodes.get(index);
+	}
+
+	/**
+	 * Default constructor
+	 */
+	public StorageClusterStatusModel() {}
+
+	/**
+	 * @return the list of live nodes
+	 */
+	@XmlElement(name="Node")
+	@XmlElementWrapper(name="LiveNodes")
+	public List<Node> getLiveNodes() {
+	  return liveNodes;
+	}
+
+	/**
+	 * @return the list of dead nodes
+	 */
+  @XmlElement(name="Node")
+  @XmlElementWrapper(name="DeadNodes")
+  public List<String> getDeadNodes() {
+    return deadNodes;
+  }
+
+  /**
+   * @return the total number of regions served by the cluster
+   */
+  @XmlAttribute
+  public int getRegions() {
+    return regions;
+  }
+
+  /**
+   * @return the total number of requests per second handled by the cluster in
+   * the last reporting interval
+   */
+  @XmlAttribute
+  public int getRequests() {
+    return requests;
+  }
+
+  /**
+   * @return the average load of the region servers in the cluster
+   */
+  @XmlAttribute
+  public double getAverageLoad() {
+    return averageLoad;
+  }
+
+  /**
+   * @param nodes the list of live node models
+   */
+  public void setLiveNodes(List<Node> nodes) {
+    this.liveNodes = nodes;
+  }
+
+  /**
+   * @param nodes the list of dead node names
+   */
+  public void setDeadNodes(List<String> nodes) {
+    this.deadNodes = nodes;
+  }
+
+  /**
+   * @param regions the total number of regions served by the cluster
+   */
+  public void setRegions(int regions) {
+    this.regions = regions;
+  }
+
+  /**
+   * @param requests the total number of requests per second handled by the
+   * cluster
+   */
+  public void setRequests(int requests) {
+    this.requests = requests;
+  }
+
+  /**
+   * @param averageLoad the average load of region servers in the cluster
+   */
+  public void setAverageLoad(double averageLoad) {
+    this.averageLoad = averageLoad;
+  }
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+	  StringBuilder sb = new StringBuilder();
+	  sb.append(String.format("%d live servers, %d dead servers, " + 
+      "%.4f average load\n\n", liveNodes.size(), deadNodes.size(),
+      averageLoad));
+    if (!liveNodes.isEmpty()) {
+      sb.append(liveNodes.size());
+      sb.append(" live servers\n");
+      for (Node node: liveNodes) {
+        sb.append("    ");
+        sb.append(node.name);
+        sb.append(' ');
+        sb.append(node.startCode);
+        sb.append("\n        requests=");
+        sb.append(node.requests);
+        sb.append(", regions=");
+        sb.append(node.regions.size());
+        sb.append("\n        heapSizeMB=");
+        sb.append(node.heapSizeMB);
+        sb.append("\n        maxHeapSizeMB=");
+        sb.append(node.maxHeapSizeMB);
+        sb.append("\n\n");
+        for (Node.Region region: node.regions) {
+          sb.append("        ");
+          sb.append(Bytes.toString(region.name));
+          sb.append("\n            stores=");
+          sb.append(region.stores);
+          sb.append("\n            storefiless=");
+          sb.append(region.storefiles);
+          sb.append("\n            storefileSizeMB=");
+          sb.append(region.storefileSizeMB);
+          sb.append("\n            memstoreSizeMB=");
+          sb.append(region.memstoreSizeMB);
+          sb.append("\n            storefileIndexSizeMB=");
+          sb.append(region.storefileIndexSizeMB);
+          sb.append('\n');
+        }
+        sb.append('\n');
+      }
+    }
+    if (!deadNodes.isEmpty()) {
+      sb.append('\n');
+      sb.append(deadNodes.size());
+      sb.append(" dead servers\n");
+      for (String node: deadNodes) {
+        sb.append("    ");
+        sb.append(node);
+        sb.append('\n');
+      }
+    }
+	  return sb.toString();
+	}
+
+  @Override
+  public byte[] createProtobufOutput() {
+    StorageClusterStatus.Builder builder = StorageClusterStatus.newBuilder();
+    builder.setRegions(regions);
+    builder.setRequests(requests);
+    builder.setAverageLoad(averageLoad);
+    for (Node node: liveNodes) {
+      StorageClusterStatus.Node.Builder nodeBuilder = 
+        StorageClusterStatus.Node.newBuilder();
+      nodeBuilder.setName(node.name);
+      nodeBuilder.setStartCode(node.startCode);
+      nodeBuilder.setRequests(node.requests);
+      nodeBuilder.setHeapSizeMB(node.heapSizeMB);
+      nodeBuilder.setMaxHeapSizeMB(node.maxHeapSizeMB);
+      for (Node.Region region: node.regions) {
+        StorageClusterStatus.Region.Builder regionBuilder =
+          StorageClusterStatus.Region.newBuilder();
+        regionBuilder.setName(ByteString.copyFrom(region.name));
+        regionBuilder.setStores(region.stores);
+        regionBuilder.setStorefiles(region.storefiles);
+        regionBuilder.setStorefileSizeMB(region.storefileSizeMB);
+        regionBuilder.setMemstoreSizeMB(region.memstoreSizeMB);
+        regionBuilder.setStorefileIndexSizeMB(region.storefileIndexSizeMB);
+        nodeBuilder.addRegions(regionBuilder);
+      }
+      builder.addLiveNodes(nodeBuilder);
+    }
+    for (String node: deadNodes) {
+      builder.addDeadNodes(node);
+    }
+    return builder.build().toByteArray();
+  }
+
+  @Override
+  public ProtobufMessageHandler getObjectFromMessage(byte[] message)
+      throws IOException {
+    StorageClusterStatus.Builder builder = StorageClusterStatus.newBuilder();
+    builder.mergeFrom(message);
+    if (builder.hasRegions()) {
+      regions = builder.getRegions();
+    }
+    if (builder.hasRequests()) {
+      requests = builder.getRequests();
+    }
+    if (builder.hasAverageLoad()) {
+      averageLoad = builder.getAverageLoad();
+    }
+    for (StorageClusterStatus.Node node: builder.getLiveNodesList()) {
+      long startCode = node.hasStartCode() ? node.getStartCode() : -1;
+      StorageClusterStatusModel.Node nodeModel = 
+        addLiveNode(node.getName(), startCode, node.getHeapSizeMB(),
+          node.getMaxHeapSizeMB());
+      int requests = node.hasRequests() ? node.getRequests() : 0;
+      nodeModel.setRequests(requests);
+      for (StorageClusterStatus.Region region: node.getRegionsList()) {
+        nodeModel.addRegion(
+          region.getName().toByteArray(),
+          region.getStores(),
+          region.getStorefiles(),
+          region.getStorefileSizeMB(),
+          region.getMemstoreSizeMB(),
+          region.getStorefileIndexSizeMB());
+      }
+    }
+    for (String node: builder.getDeadNodesList()) {
+      addDeadNode(node);
+    }
+    return this;
+  }
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterVersionModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterVersionModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterVersionModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/StorageClusterVersionModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlValue;
+
+/**
+ * Simple representation of the version of the storage cluster
+ * 
+ * <pre>
+ * &lt;complexType name="StorageClusterVersion"&gt;
+ *   &lt;attribute name="version" type="string"&gt;&lt;/attribute&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ */
+@XmlRootElement(name="ClusterVersion")
+public class StorageClusterVersionModel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private String version;
+
+	/**
+	 * @return the storage cluster version
+	 */
+	@XmlValue
+	public String getVersion() {
+	  return version;
+	}
+
+	/**
+	 * @param version the storage cluster version
+	 */
+	public void setVersion(String version) {
+	  this.version = version;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+	  return version;
+	}
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableInfoModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableInfoModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableInfoModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableInfoModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.hadoop.hbase.stargate.ProtobufMessageHandler;
+import org.apache.hadoop.hbase.stargate.protobuf.generated.TableInfoMessage.TableInfo;
+
+import com.google.protobuf.ByteString;
+
+/**
+ * Representation of a list of table regions. 
+ * 
+ * <pre>
+ * &lt;complexType name="TableInfo"&gt;
+ *   &lt;sequence&gt;
+ *     &lt;element name="region" type="tns:TableRegion" 
+ *       maxOccurs="unbounded" minOccurs="1"&gt;&lt;/element&gt;
+ *   &lt;/sequence&gt;
+ *   &lt;attribute name="name" type="string"&gt;&lt;/attribute&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ */
+@XmlRootElement(name="TableInfo")
+@XmlType(propOrder = {"name","regions"})
+public class TableInfoModel implements Serializable, ProtobufMessageHandler {
+  private static final long serialVersionUID = 1L;
+
+  private String name;
+  private List<TableRegionModel> regions = new ArrayList<TableRegionModel>();
+
+  /**
+   * Default constructor
+   */
+  public TableInfoModel() {}
+
+  /**
+   * Constructor
+   * @param name
+   */
+  public TableInfoModel(String name) {
+    this.name = name;
+  }
+
+  /**
+   * Add a region model to the list
+   * @param region the region
+   */
+  public void add(TableRegionModel region) {
+    regions.add(region);
+  }
+
+  /**
+   * @param index the index
+   * @return the region model
+   */
+  public TableRegionModel get(int index) {
+    return regions.get(index);
+  }
+
+  /**
+   * @return the table name
+   */
+  @XmlAttribute
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @return the regions
+   */
+  @XmlElement(name="Region")
+  public List<TableRegionModel> getRegions() {
+    return regions;
+  }
+
+  /**
+   * @param name the table name
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * @param regions the regions to set
+   */
+  public void setRegions(List<TableRegionModel> regions) {
+    this.regions = regions;
+  }
+
+  /* (non-Javadoc)
+   * @see java.lang.Object#toString()
+   */
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    for(TableRegionModel aRegion : regions) {
+      sb.append(aRegion.toString());
+      sb.append('\n');
+    }
+    return sb.toString();
+  }
+
+  @Override
+  public byte[] createProtobufOutput() {
+    TableInfo.Builder builder = TableInfo.newBuilder();
+    builder.setName(name);
+    for (TableRegionModel aRegion: regions) {
+      TableInfo.Region.Builder regionBuilder = TableInfo.Region.newBuilder();
+      regionBuilder.setName(aRegion.getName());
+      regionBuilder.setId(aRegion.getId());
+      regionBuilder.setStartKey(ByteString.copyFrom(aRegion.getStartKey()));
+      regionBuilder.setEndKey(ByteString.copyFrom(aRegion.getEndKey()));
+      regionBuilder.setLocation(aRegion.getLocation());
+      builder.addRegions(regionBuilder);
+    }
+    return builder.build().toByteArray();
+  }
+
+  @Override
+  public ProtobufMessageHandler getObjectFromMessage(byte[] message) 
+      throws IOException {
+    TableInfo.Builder builder = TableInfo.newBuilder();
+    builder.mergeFrom(message);
+    setName(builder.getName());
+    for (TableInfo.Region region: builder.getRegionsList()) {
+      add(new TableRegionModel(builder.getName(), region.getId(), 
+          region.getStartKey().toByteArray(),
+          region.getEndKey().toByteArray(),
+          region.getLocation()));
+    }
+    return this;
+  }
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableListModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableListModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableListModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableListModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElementRef;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.hadoop.hbase.stargate.ProtobufMessageHandler;
+import org.apache.hadoop.hbase.stargate.protobuf.generated.TableListMessage.TableList;
+
+/**
+ * Simple representation of a list of table names.
+ */
+@XmlRootElement(name="TableList")
+public class TableListModel implements Serializable, ProtobufMessageHandler {
+
+	private static final long serialVersionUID = 1L;
+
+	private List<TableModel> tables = new ArrayList<TableModel>();
+
+	/**
+	 * Default constructor
+	 */
+	public TableListModel() {}
+
+	/**
+	 * Add the table name model to the list
+	 * @param table the table model
+	 */
+	public void add(TableModel table) {
+		tables.add(table);
+	}
+	
+	/**
+	 * @param index the index
+	 * @return the table model
+	 */
+	public TableModel get(int index) {
+		return tables.get(index);
+	}
+
+	/**
+	 * @return the tables
+	 */
+	@XmlElementRef(name="table")
+	public List<TableModel> getTables() {
+		return tables;
+	}
+
+	/**
+	 * @param tables the tables to set
+	 */
+	public void setTables(List<TableModel> tables) {
+		this.tables = tables;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		StringBuilder sb = new StringBuilder();
+		for(TableModel aTable : tables) {
+			sb.append(aTable.toString());
+			sb.append('\n');
+		}
+		return sb.toString();
+	}
+
+	@Override
+	public byte[] createProtobufOutput() {
+		TableList.Builder builder = TableList.newBuilder();
+		for (TableModel aTable : tables) {
+			builder.addName(aTable.getName());
+		}
+		return builder.build().toByteArray();
+	}
+
+  @Override
+  public ProtobufMessageHandler getObjectFromMessage(byte[] message)
+      throws IOException {
+    TableList.Builder builder = TableList.newBuilder();
+    builder.mergeFrom(message);
+    for (String table: builder.getNameList()) {
+      this.add(new TableModel(table));
+    }
+    return this;
+  }
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * Simple representation of a table name.
+ * 
+ * <pre>
+ * &lt;complexType name="Table"&gt;
+ *   &lt;sequence&gt;
+ *     &lt;element name="name" type="string"&gt;&lt;/element&gt;
+ *   &lt;/sequence&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ */
+@XmlRootElement(name="table")
+public class TableModel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	private String name;
+	
+	/**
+	 * Default constructor
+	 */
+	public TableModel() {}
+
+	/**
+	 * Constructor
+	 * @param name
+	 */
+	public TableModel(String name) {
+		super();
+		this.name = name;
+	}
+
+	/**
+	 * @return the name
+	 */
+	@XmlAttribute
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return this.name;
+	}
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableRegionModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableRegionModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableRegionModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableRegionModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.hadoop.hbase.util.Bytes;
+
+/**
+ * Representation of a region of a table and its current location on the
+ * storage cluster.
+ * 
+ * <pre>
+ * &lt;complexType name="TableRegion"&gt;
+ *   &lt;attribute name="name" type="string"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="id" type="int"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="startKey" type="base64Binary"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="endKey" type="base64Binary"&gt;&lt;/attribute&gt;
+ *   &lt;attribute name="location" type="string"&gt;&lt;/attribute&gt;
+ *  &lt;/complexType&gt;
+ * </pre>
+ */
+@XmlRootElement(name="Region")
+@XmlType(propOrder = {"name","id","startKey","endKey","location"})
+public class TableRegionModel implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  private String table;
+  private long id;
+  private byte[] startKey; 
+  private byte[] endKey;
+  private String location;
+
+  /**
+   * Constructor
+   */
+  public TableRegionModel() {}
+
+  /**
+   * Constructor
+   * @param table the table name
+   * @param id the encoded id of the region
+   * @param startKey the start key of the region
+   * @param endKey the end key of the region
+   * @param location the name and port of the region server hosting the region
+   */
+  public TableRegionModel(String table, long id, byte[] startKey,
+      byte[] endKey, String location) {
+    this.table = table;
+    this.id = id;
+    this.startKey = startKey;
+    this.endKey = endKey;
+    this.location = location;
+  }
+
+  /**
+   * @return the region name
+   */
+  @XmlAttribute
+  public String getName() {
+    StringBuilder sb = new StringBuilder();
+    sb.append(table);
+    sb.append(',');
+    sb.append(Bytes.toString(startKey));
+    sb.append(',');
+    sb.append(id);
+    return sb.toString();
+  }
+
+  /**
+   * @return the encoded region id
+   */
+  @XmlAttribute 
+  public long getId() {
+    return id;
+  }
+
+  /**
+   * @return the start key
+   */
+  @XmlAttribute 
+  public byte[] getStartKey() {
+    return startKey;
+  }
+
+  /**
+   * @return the end key
+   */
+  @XmlAttribute 
+  public byte[] getEndKey() {
+    return endKey;
+  }
+
+  /**
+   * @return the name and port of the region server hosting the region
+   */
+  @XmlAttribute 
+  public String getLocation() {
+    return location;
+  }
+
+  /**
+   * @param name region printable name
+   */
+  public void setName(String name) {
+    String split[] = name.split(",");
+    table = split[0];
+    startKey = Bytes.toBytes(split[1]);
+    id = Long.valueOf(split[2]);
+  }
+
+  /**
+   * @param id the region's encoded id
+   */
+  public void setId(long id) {
+    this.id = id;
+  }
+
+  /**
+   * @param startKey the start key
+   */
+  public void setStartKey(byte[] startKey) {
+    this.startKey = startKey;
+  }
+
+  /**
+   * @param endKey the end key
+   */
+  public void setEndKey(byte[] endKey) {
+    this.endKey = endKey;
+  }
+
+  /**
+   * @param location the name and port of the region server hosting the region
+   */
+  public void setLocation(String location) {
+    this.location = location;
+  }
+
+  /* (non-Javadoc)
+   * @see java.lang.Object#toString()
+   */
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append(getName());
+    sb.append(" [\n  id=");
+    sb.append(id);
+    sb.append("\n  startKey='");
+    sb.append(Bytes.toString(startKey));
+    sb.append("'\n  endKey='");
+    sb.append(Bytes.toString(endKey));
+    sb.append("'\n  location='");
+    sb.append(location);
+    sb.append("'\n]\n");
+    return sb.toString();
+  }
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableSchemaModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableSchemaModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableSchemaModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/TableSchemaModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.namespace.QName;
+
+import org.apache.hadoop.hbase.HColumnDescriptor;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.stargate.ProtobufMessageHandler;
+import org.apache.hadoop.hbase.stargate.protobuf.generated.ColumnSchemaMessage.ColumnSchema;
+import org.apache.hadoop.hbase.stargate.protobuf.generated.TableSchemaMessage.TableSchema;
+
+/**
+ * A representation of HBase table descriptors.
+ * 
+ * <pre>
+ * &lt;complexType name="TableSchema"&gt;
+ *   &lt;sequence&gt;
+ *     &lt;element name="column" type="tns:ColumnSchema" 
+ *       maxOccurs="unbounded" minOccurs="1"&gt;&lt;/element&gt;
+ *   &lt;/sequence&gt;
+ *   &lt;attribute name="name" type="string"&gt;&lt;/attribute&gt;
+ *   &lt;anyAttribute&gt;&lt;/anyAttribute&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ */
+@XmlRootElement(name="TableSchema")
+@XmlType(propOrder = {"name","columns"})
+public class TableSchemaModel implements Serializable, ProtobufMessageHandler {
+  private static final long serialVersionUID = 1L;
+  private static final QName IS_META = new QName(HTableDescriptor.IS_META);
+  private static final QName IS_ROOT = new QName(HTableDescriptor.IS_ROOT);
+  private static final QName READONLY = new QName(HTableDescriptor.READONLY);
+  private static final QName TTL = new QName(HColumnDescriptor.TTL);
+  private static final QName VERSIONS = new QName(HConstants.VERSIONS);
+  private static final QName COMPRESSION = 
+    new QName(HColumnDescriptor.COMPRESSION);
+
+  private String name;
+  private Map<QName,Object> attrs = new HashMap<QName,Object>();
+  private List<ColumnSchemaModel> columns = new ArrayList<ColumnSchemaModel>();
+  
+  /**
+   * Default constructor.
+   */
+  public TableSchemaModel() {}
+
+  /**
+   * Add an attribute to the table descriptor
+   * @param name attribute name
+   * @param value attribute value
+   */
+  public void addAttribute(String name, Object value) {
+    attrs.put(new QName(name), value);
+  }
+
+  /**
+   * Return a table descriptor value as a string. Calls toString() on the
+   * object stored in the descriptor value map.
+   * @param name the attribute name
+   * @return the attribute value
+   */
+  public String getAttribute(String name) {
+    Object o = attrs.get(new QName(name));
+    return o != null ? o.toString() : null;
+  }
+
+  /**
+   * Add a column family to the table descriptor
+   * @param family the column family model
+   */
+  public void addColumnFamily(ColumnSchemaModel family) {
+    columns.add(family);
+  }
+
+  /**
+   * Retrieve the column family at the given index from the table descriptor
+   * @param index the index
+   * @return the column family model
+   */
+  public ColumnSchemaModel getColumnFamily(int index) {
+    return columns.get(index);
+  }
+
+  /**
+   * @return the table name
+   */
+  @XmlAttribute
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * @return the map for holding unspecified (user) attributes
+   */
+  @XmlAnyAttribute
+  public Map<QName,Object> getAny() {
+    return attrs;
+  }
+
+  /**
+   * @return the columns
+   */
+  @XmlElement(name="ColumnSchema")
+  public List<ColumnSchemaModel> getColumns() {
+    return columns;
+  }
+
+  /**
+   * @param name the table name
+   */
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * @param columns the columns to set
+   */
+  public void setColumns(List<ColumnSchemaModel> columns) {
+    this.columns = columns;
+  }
+
+  /* (non-Javadoc)
+   * @see java.lang.Object#toString()
+   */
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("{ NAME=> '");
+    sb.append(name);
+    sb.append('\'');
+    for (Map.Entry<QName,Object> e: attrs.entrySet()) {
+      sb.append(", ");
+      sb.append(e.getKey().getLocalPart());
+      sb.append(" => '");
+      sb.append(e.getValue().toString());
+      sb.append('\'');
+    }
+    sb.append(", COLUMNS => [ ");
+    Iterator<ColumnSchemaModel> i = columns.iterator();
+    while (i.hasNext()) {
+      ColumnSchemaModel family = i.next();
+      sb.append(family.toString());
+      if (i.hasNext()) {
+        sb.append(',');
+      }
+      sb.append(' ');
+    }
+    sb.append("] }");
+    return sb.toString();
+  }
+
+  // getters and setters for common schema attributes
+
+  // cannot be standard bean type getters and setters, otherwise this would
+  // confuse JAXB
+
+  /**
+   * @return true if IS_META attribute exists and is truel
+   */
+  public boolean __getIsMeta() {
+    Object o = attrs.get(IS_META);
+    return o != null ? Boolean.valueOf(o.toString()) : false;
+  }
+
+  /**
+   * @return true if IS_ROOT attribute exists and is truel
+   */
+  public boolean __getIsRoot() {
+    Object o = attrs.get(IS_ROOT);
+    return o != null ? Boolean.valueOf(o.toString()) : false;
+  }
+
+  /**
+   * @return true if READONLY attribute exists and is truel
+   */
+  public boolean __getReadOnly() {
+    Object o = attrs.get(READONLY);
+    return o != null ? 
+      Boolean.valueOf(o.toString()) : HTableDescriptor.DEFAULT_READONLY;
+  }
+
+  /**
+   * @param value desired value of IS_META attribute
+   */
+  public void __setIsMeta(boolean value) {
+    attrs.put(IS_META, Boolean.toString(value));
+  }
+
+  /**
+   * @param value desired value of IS_ROOT attribute
+   */
+  public void __setIsRoot(boolean value) {
+    attrs.put(IS_ROOT, Boolean.toString(value));
+  }
+
+  /**
+   * @param value desired value of READONLY attribute
+   */
+  public void __setReadOnly(boolean value) {
+    attrs.put(READONLY, Boolean.toString(value));
+  }
+
+  @Override
+  public byte[] createProtobufOutput() {
+    TableSchema.Builder builder = TableSchema.newBuilder();
+    builder.setName(name);
+    for (Map.Entry<QName, Object> e: attrs.entrySet()) {
+      TableSchema.Attribute.Builder attrBuilder = 
+        TableSchema.Attribute.newBuilder();
+      attrBuilder.setName(e.getKey().getLocalPart());
+      attrBuilder.setValue(e.getValue().toString());
+      builder.addAttrs(attrBuilder);
+    }
+    for (ColumnSchemaModel family: columns) {
+      Map<QName, Object> familyAttrs = family.getAny();
+      ColumnSchema.Builder familyBuilder = ColumnSchema.newBuilder();
+      familyBuilder.setName(family.getName());
+      for (Map.Entry<QName, Object> e: familyAttrs.entrySet()) {
+        ColumnSchema.Attribute.Builder attrBuilder = 
+          ColumnSchema.Attribute.newBuilder();
+        attrBuilder.setName(e.getKey().getLocalPart());
+        attrBuilder.setValue(e.getValue().toString());
+        familyBuilder.addAttrs(attrBuilder);
+      }
+      if (familyAttrs.containsKey(TTL)) {
+        familyBuilder.setTtl(
+          Integer.valueOf(familyAttrs.get(TTL).toString()));
+      }
+      if (familyAttrs.containsKey(VERSIONS)) {
+        familyBuilder.setMaxVersions(
+          Integer.valueOf(familyAttrs.get(VERSIONS).toString()));
+      }
+      if (familyAttrs.containsKey(COMPRESSION)) {
+        familyBuilder.setCompression(familyAttrs.get(COMPRESSION).toString());
+      }
+      builder.addColumns(familyBuilder);
+    }
+    if (attrs.containsKey(READONLY)) {
+      builder.setReadOnly(
+        Boolean.valueOf(attrs.get(READONLY).toString()));
+    }
+    return builder.build().toByteArray();
+  }
+
+  @Override
+  public ProtobufMessageHandler getObjectFromMessage(byte[] message) 
+      throws IOException {
+    TableSchema.Builder builder = TableSchema.newBuilder();
+    builder.mergeFrom(message);
+    this.setName(builder.getName());
+    for (TableSchema.Attribute attr: builder.getAttrsList()) {
+      this.addAttribute(attr.getName(), attr.getValue());
+    }
+    if (builder.hasReadOnly()) {
+      this.addAttribute(HTableDescriptor.READONLY, builder.getReadOnly());
+    }
+    for (ColumnSchema family: builder.getColumnsList()) {
+      ColumnSchemaModel familyModel = new ColumnSchemaModel();
+      familyModel.setName(family.getName());
+      for (ColumnSchema.Attribute attr: family.getAttrsList()) {
+        familyModel.addAttribute(attr.getName(), attr.getValue());
+      }
+      if (family.hasTtl()) {
+        familyModel.addAttribute(HColumnDescriptor.TTL, family.getTtl());
+      }
+      if (family.hasMaxVersions()) {
+        familyModel.addAttribute(HConstants.VERSIONS,
+          family.getMaxVersions());
+      }
+      if (family.hasCompression()) {
+        familyModel.addAttribute(HColumnDescriptor.COMPRESSION,
+          family.getCompression());
+      }
+      this.addColumnFamily(familyModel);
+    }
+    return this;
+  }
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/VersionModel.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/VersionModel.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/VersionModel.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/model/VersionModel.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2010 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hbase.stargate.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import javax.servlet.ServletContext;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.hadoop.hbase.stargate.ProtobufMessageHandler;
+import org.apache.hadoop.hbase.stargate.RESTServlet;
+import org.apache.hadoop.hbase.stargate.protobuf.generated.VersionMessage.Version;
+
+import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+/**
+ * A representation of the collection of versions of the Stargate software
+ * components.
+ * <ul>
+ * <li>stargateVersion: Stargate revision</li>
+ * <li>jvmVersion: the JVM vendor and version information</li>
+ * <li>osVersion: the OS type, version, and hardware architecture</li>
+ * <li>serverVersion: the name and version of the servlet container</li>
+ * <li>jerseyVersion: the version of the embedded Jersey framework</li>
+ * </ul>
+ */
+@XmlRootElement(name="Version")
+public class VersionModel implements Serializable, ProtobufMessageHandler {
+
+	private static final long serialVersionUID = 1L;
+
+	private String stargateVersion;
+  private String jvmVersion;
+  private String osVersion;
+  private String serverVersion;
+  private String jerseyVersion;
+
+  /**
+   * Default constructor. Do not use.
+   */
+  public VersionModel() {}
+  
+  /**
+   * Constructor
+   * @param context the servlet context
+   */
+	public VersionModel(ServletContext context) {
+	  stargateVersion = RESTServlet.VERSION_STRING;
+	  jvmVersion = System.getProperty("java.vm.vendor") + ' ' +
+      System.getProperty("java.version") + '-' +
+      System.getProperty("java.vm.version");
+	  osVersion = System.getProperty("os.name") + ' ' +
+      System.getProperty("os.version") + ' ' +
+      System.getProperty("os.arch");
+	  serverVersion = context.getServerInfo();
+	  jerseyVersion = ServletContainer.class.getPackage()
+      .getImplementationVersion();
+	}
+
+	/**
+	 * @return the Stargate version
+	 */
+	@XmlAttribute(name="Stargate")
+	public String getStargateVersion() {
+    return stargateVersion;
+  }
+
+	/**
+	 * @return the JVM vendor and version
+	 */
+  @XmlAttribute(name="JVM")
+  public String getJvmVersion() {
+    return jvmVersion;
+  }
+
+  /**
+   * @return the OS name, version, and hardware architecture
+   */
+  @XmlAttribute(name="OS")
+  public String getOsVersion() {
+    return osVersion;
+  }
+
+  /**
+   * @return the servlet container version
+   */
+  @XmlAttribute(name="Server")
+  public String getServerVersion() {
+    return serverVersion;
+  }
+
+  /**
+   * @return the version of the embedded Jersey framework
+   */
+  @XmlAttribute(name="Jersey")
+  public String getJerseyVersion() {
+    return jerseyVersion;
+  }
+
+  /**
+   * @param version the Stargate version string
+   */
+  public void setStargateVersion(String version) {
+    this.stargateVersion = version;
+  }
+
+  /**
+   * @param version the OS version string
+   */
+  public void setOsVersion(String version) {
+    this.osVersion = version;
+  }
+
+  /**
+   * @param version the JVM version string
+   */
+  public void setJvmVersion(String version) {
+    this.jvmVersion = version;
+  }
+
+  /**
+   * @param version the servlet container version string
+   */
+  public void setServerVersion(String version) {
+    this.serverVersion = version;
+  }
+
+  /**
+   * @param version the Jersey framework version string
+   */
+  public void setJerseyVersion(String version) {
+    this.jerseyVersion = version;
+  }
+
+  /* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+	  StringBuilder sb = new StringBuilder();
+	  sb.append("Stargate ");
+	  sb.append(stargateVersion);
+	  sb.append(" [JVM: ");
+	  sb.append(jvmVersion);
+	  sb.append("] [OS: ");
+	  sb.append(osVersion);
+	  sb.append("] [Server: ");
+	  sb.append(serverVersion);
+	  sb.append("] [Jersey: ");
+    sb.append(jerseyVersion);
+	  sb.append("]\n");
+	  return sb.toString();
+	}
+
+	@Override
+  public byte[] createProtobufOutput() {
+	  Version.Builder builder = Version.newBuilder();
+	  builder.setStargateVersion(stargateVersion);
+	  builder.setJvmVersion(jvmVersion);
+	  builder.setOsVersion(osVersion);
+	  builder.setServerVersion(serverVersion);
+	  builder.setJerseyVersion(jerseyVersion);
+	  return builder.build().toByteArray();
+  }
+
+  @Override
+  public ProtobufMessageHandler getObjectFromMessage(byte[] message)
+      throws IOException {
+    Version.Builder builder = Version.newBuilder();
+    builder.mergeFrom(message);
+    if (builder.hasStargateVersion()) {
+      stargateVersion = builder.getStargateVersion();
+    }
+    if (builder.hasJvmVersion()) {
+      jvmVersion = builder.getJvmVersion();
+    }
+    if (builder.hasOsVersion()) {
+      osVersion = builder.getOsVersion();
+    }
+    if (builder.hasServerVersion()) {
+      serverVersion = builder.getServerVersion();
+    }
+    if (builder.hasJerseyVersion()) {
+      jerseyVersion = builder.getJerseyVersion();
+    }
+    return this;
+  }
+}

Added: hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/protobuf/generated/CellMessage.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/protobuf/generated/CellMessage.java?rev=928876&view=auto
==============================================================================
--- hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/protobuf/generated/CellMessage.java (added)
+++ hadoop/hbase/trunk/contrib/stargate/core/src/main/java/org/apache/hadoop/hbase/stargate/protobuf/generated/CellMessage.java Mon Mar 29 19:15:15 2010
@@ -0,0 +1,465 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: CellMessage.proto
+
+package org.apache.hadoop.hbase.stargate.protobuf.generated;
+
+public final class CellMessage {
+  private CellMessage() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+  }
+  public static final class Cell extends
+      com.google.protobuf.GeneratedMessage {
+    // Use Cell.newBuilder() to construct.
+    private Cell() {
+      initFields();
+    }
+    private Cell(boolean noInit) {}
+    
+    private static final Cell defaultInstance;
+    public static Cell getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Cell getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_fieldAccessorTable;
+    }
+    
+    // optional bytes row = 1;
+    public static final int ROW_FIELD_NUMBER = 1;
+    private boolean hasRow;
+    private com.google.protobuf.ByteString row_ = com.google.protobuf.ByteString.EMPTY;
+    public boolean hasRow() { return hasRow; }
+    public com.google.protobuf.ByteString getRow() { return row_; }
+    
+    // optional bytes column = 2;
+    public static final int COLUMN_FIELD_NUMBER = 2;
+    private boolean hasColumn;
+    private com.google.protobuf.ByteString column_ = com.google.protobuf.ByteString.EMPTY;
+    public boolean hasColumn() { return hasColumn; }
+    public com.google.protobuf.ByteString getColumn() { return column_; }
+    
+    // optional int64 timestamp = 3;
+    public static final int TIMESTAMP_FIELD_NUMBER = 3;
+    private boolean hasTimestamp;
+    private long timestamp_ = 0L;
+    public boolean hasTimestamp() { return hasTimestamp; }
+    public long getTimestamp() { return timestamp_; }
+    
+    // optional bytes data = 4;
+    public static final int DATA_FIELD_NUMBER = 4;
+    private boolean hasData;
+    private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
+    public boolean hasData() { return hasData; }
+    public com.google.protobuf.ByteString getData() { return data_; }
+    
+    private void initFields() {
+    }
+    public final boolean isInitialized() {
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (hasRow()) {
+        output.writeBytes(1, getRow());
+      }
+      if (hasColumn()) {
+        output.writeBytes(2, getColumn());
+      }
+      if (hasTimestamp()) {
+        output.writeInt64(3, getTimestamp());
+      }
+      if (hasData()) {
+        output.writeBytes(4, getData());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (hasRow()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getRow());
+      }
+      if (hasColumn()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getColumn());
+      }
+      if (hasTimestamp()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, getTimestamp());
+      }
+      if (hasData()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, getData());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> {
+      private org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell result;
+      
+      // Construct using org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell.newBuilder()
+      private Builder() {}
+      
+      private static Builder create() {
+        Builder builder = new Builder();
+        builder.result = new org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell();
+        return builder;
+      }
+      
+      protected org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell internalGetResult() {
+        return result;
+      }
+      
+      public Builder clear() {
+        if (result == null) {
+          throw new IllegalStateException(
+            "Cannot call clear() after build().");
+        }
+        result = new org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell();
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(result);
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell.getDescriptor();
+      }
+      
+      public org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell getDefaultInstanceForType() {
+        return org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell.getDefaultInstance();
+      }
+      
+      public boolean isInitialized() {
+        return result.isInitialized();
+      }
+      public org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell build() {
+        if (result != null && !isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return buildPartial();
+      }
+      
+      private org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        if (!isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return buildPartial();
+      }
+      
+      public org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell buildPartial() {
+        if (result == null) {
+          throw new IllegalStateException(
+            "build() has already been called on this Builder.");
+        }
+        org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell returnMe = result;
+        result = null;
+        return returnMe;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell) {
+          return mergeFrom((org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell other) {
+        if (other == org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell.getDefaultInstance()) return this;
+        if (other.hasRow()) {
+          setRow(other.getRow());
+        }
+        if (other.hasColumn()) {
+          setColumn(other.getColumn());
+        }
+        if (other.hasTimestamp()) {
+          setTimestamp(other.getTimestamp());
+        }
+        if (other.hasData()) {
+          setData(other.getData());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              setRow(input.readBytes());
+              break;
+            }
+            case 18: {
+              setColumn(input.readBytes());
+              break;
+            }
+            case 24: {
+              setTimestamp(input.readInt64());
+              break;
+            }
+            case 34: {
+              setData(input.readBytes());
+              break;
+            }
+          }
+        }
+      }
+      
+      
+      // optional bytes row = 1;
+      public boolean hasRow() {
+        return result.hasRow();
+      }
+      public com.google.protobuf.ByteString getRow() {
+        return result.getRow();
+      }
+      public Builder setRow(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  result.hasRow = true;
+        result.row_ = value;
+        return this;
+      }
+      public Builder clearRow() {
+        result.hasRow = false;
+        result.row_ = getDefaultInstance().getRow();
+        return this;
+      }
+      
+      // optional bytes column = 2;
+      public boolean hasColumn() {
+        return result.hasColumn();
+      }
+      public com.google.protobuf.ByteString getColumn() {
+        return result.getColumn();
+      }
+      public Builder setColumn(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  result.hasColumn = true;
+        result.column_ = value;
+        return this;
+      }
+      public Builder clearColumn() {
+        result.hasColumn = false;
+        result.column_ = getDefaultInstance().getColumn();
+        return this;
+      }
+      
+      // optional int64 timestamp = 3;
+      public boolean hasTimestamp() {
+        return result.hasTimestamp();
+      }
+      public long getTimestamp() {
+        return result.getTimestamp();
+      }
+      public Builder setTimestamp(long value) {
+        result.hasTimestamp = true;
+        result.timestamp_ = value;
+        return this;
+      }
+      public Builder clearTimestamp() {
+        result.hasTimestamp = false;
+        result.timestamp_ = 0L;
+        return this;
+      }
+      
+      // optional bytes data = 4;
+      public boolean hasData() {
+        return result.hasData();
+      }
+      public com.google.protobuf.ByteString getData() {
+        return result.getData();
+      }
+      public Builder setData(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  result.hasData = true;
+        result.data_ = value;
+        return this;
+      }
+      public Builder clearData() {
+        result.hasData = false;
+        result.data_ = getDefaultInstance().getData();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:org.apache.hadoop.hbase.stargate.protobuf.generated.Cell)
+    }
+    
+    static {
+      defaultInstance = new Cell(true);
+      org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.internalForceInit();
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:org.apache.hadoop.hbase.stargate.protobuf.generated.Cell)
+  }
+  
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_fieldAccessorTable;
+  
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\021CellMessage.proto\0223org.apache.hadoop.h" +
+      "base.stargate.protobuf.generated\"D\n\004Cell" +
+      "\022\013\n\003row\030\001 \001(\014\022\016\n\006column\030\002 \001(\014\022\021\n\ttimesta" +
+      "mp\030\003 \001(\003\022\014\n\004data\030\004 \001(\014"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+        public com.google.protobuf.ExtensionRegistry assignDescriptors(
+            com.google.protobuf.Descriptors.FileDescriptor root) {
+          descriptor = root;
+          internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_descriptor =
+            getDescriptor().getMessageTypes().get(0);
+          internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_org_apache_hadoop_hbase_stargate_protobuf_generated_Cell_descriptor,
+              new java.lang.String[] { "Row", "Column", "Timestamp", "Data", },
+              org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell.class,
+              org.apache.hadoop.hbase.stargate.protobuf.generated.CellMessage.Cell.Builder.class);
+          return null;
+        }
+      };
+    com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        }, assigner);
+  }
+  
+  public static void internalForceInit() {}
+  
+  // @@protoc_insertion_point(outer_class_scope)
+}