blob: 2fc1cbaac2fb6d65dac24c68ff3c49447afb7e63 [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* 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 com.google.web.bindery.autobean.shared;
import com.google.web.bindery.autobean.shared.impl.StringQuoter;
import java.util.List;
/**
* This interface provides an abstraction around the underlying data model
* (JavaScriptObject, {@code org.json}, or XML) used to encode an AutoBeanCodex
* payload.
*/
public interface Splittable {
/**
* A value that represents {@code null}.
*/
Splittable NULL = StringQuoter.nullValue();
/**
* Returns a boolean representation of the data.
*/
boolean asBoolean();
/**
* Returns a numeric representation of the data.
*/
double asNumber();
/**
* Assign the splittable to the specified index of the {@code parent} object.
*/
void assign(Splittable parent, int index);
/**
* Assign the splittable to the named property of the {@code parent} object.
*/
void assign(Splittable parent, String propertyName);
/**
* Returns a string representation of the data.
*/
String asString();
/**
* Clones the Splittable, ignoring cycles and tags.
*/
Splittable deepCopy();
/**
* Returns the nth element of a list.
*/
Splittable get(int index);
/**
* Returns the named property.
*/
Splittable get(String key);
/**
* Returns a wire-format representation of the data.
*/
String getPayload();
/**
* Returns all keys available in the Splittable. This method may be expensive
* to compute.
*/
List<String> getPropertyKeys();
/**
* Returns a value previously set with {@link #setReified(String, Object)}.
*/
Object getReified(String key);
/**
* Returns {@code true} if the value of the Splittable is a boolean.
*/
boolean isBoolean();
/**
* Returns {@code} true if {@link #size()} and {@link #get(int)} can be
* expected to return meaningful values.
*/
boolean isIndexed();
/**
* Returns {@code} true if {@link #getPropertyKeys()} and {@link #get(String)}
* can be expected to return meaningful values.
*/
boolean isKeyed();
/**
* Indicates if the nth element of a list is null or undefined.
*/
boolean isNull(int index);
/**
* Indicates if the named property is null or undefined.
*/
boolean isNull(String key);
/**
* Returns {@code true} if the value of the Splittable is numeric.
*/
boolean isNumber();
/**
* Returns {@code true} if {@link #setReified(String, Object)} has been called
* with the given key.
*/
boolean isReified(String key);
/**
* Returns {@code} true if {@link #asString()} can be expected to return a
* meaningful value.
*/
boolean isString();
/**
* Returns {@code true} if the value of the key is undefined.
*/
boolean isUndefined(String key);
/**
* Associates a tag value with the Splittable.
*/
void setReified(String key, Object object);
/**
* Resets the length of an indexed Splittable.
*/
void setSize(int i);
/**
* Returns the size of an indexed Splittable.
*/
int size();
}