/*
* Copyright 2010 The Ganshane Team.
*
* Licensed 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 corner.orm.model;
import java.io.Serializable;
import java.util.Iterator;
import org.apache.tapestry5.json.JSONObject;
import com.google.protobuf.InvalidProtocolBufferException;
import corner.protobuf.ProtocolBuffer;
/**
* wrapper for pagination proto buffer
* @author <a href="jun.tsai@fepss.com">Jun Tsai</a>
* @version $Revision$
* @since 0.0.1
*/
public class PaginationOptions implements Serializable, ProtocolBuffer {
private static final long serialVersionUID = 1L;
private JSONObject parameters;
private final PaginationProtoBuffer.Pagination.Builder builder = PaginationProtoBuffer.Pagination.newBuilder();
public int getPage() {
return builder.getPage();
}
public int getPerPage() {
return builder.getPerPage();
}
public long getTotalRecord() {
return builder.getTotalRecord();
}
public void setPage(int value) {
builder.setPage(value);
}
public void setPerPage(int value) {
builder.setPerPage(value);
}
public void setTotalRecord(long value) {
builder.setTotalRecord(value);
}
/**
* add parameter,delegate to {@link JSONObject#put(String, Object)}
* @param key parameter name
* @param value parameter value
* @see JSONObject#put(String, Object)
*/
public void addParameter(String key,Object value){
if(this.parameters==null){
parameters = new JSONObject();
}
parameters.put(key,value);
}
/**
* get parameters
* @return parameter ,return null if no parameters set
*/
public JSONObject getParameters(){
return this.parameters;
}
/**
* @see .ProtocolBuffer#getData()
*/
public byte[] getData() {
//clear parameters
this.builder.clearParameters();
if(this.parameters!=null){
Iterator<String> it = parameters.keys().iterator();
while(it.hasNext()){
String key = it.next();
String value = parameters.getString(key);
PaginationProtoBuffer.Parameter.Builder pBuilder = PaginationProtoBuffer.Parameter.newBuilder();
pBuilder.setKey(key);
pBuilder.setValue(value);
builder.addParameters(pBuilder);
}
}
return this.builder.clone().build().toByteArray();
}
/**
* @see .ProtocolBuffer#mergeData(byte[])
*/
public void mergeData(byte[] byteData) {
try {
this.builder.mergeFrom(byteData);
Iterator<PaginationProtoBuffer.Parameter> it = this.builder.getParametersList().iterator();
while(it.hasNext()){
PaginationProtoBuffer.Parameter parameter = it.next();
this.addParameter(parameter.getKey(),parameter.getValue());
}
} catch (InvalidProtocolBufferException e) {
throw new RuntimeException(e);
}
}
}