blob: ff8b83a8662dbbfd42a756d682e2e85d4b1255fd [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* 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.android.ide.eclipse.gltrace.state;
import java.util.Collection;
import java.util.EnumMap;
import java.util.Map;
/**
* A composite property is a container for multiple named properties, kind of like a dictionary.
*/
public class GLCompositeProperty implements IGLProperty {
private final GLStateType mType;
private final Map<GLStateType, IGLProperty> mPropertiesMap;
private IGLProperty mParent;
/** Construct a composite property given a list of {@link IGLProperty} objects. */
public GLCompositeProperty(GLStateType type, IGLProperty... iglProperties) {
mType = type;
mPropertiesMap = new EnumMap<GLStateType, IGLProperty>(GLStateType.class);
for (IGLProperty p : iglProperties) {
mPropertiesMap.put(p.getType(), p);
p.setParent(this);
}
}
public Collection<IGLProperty> getProperties() {
return mPropertiesMap.values();
}
public IGLProperty getProperty(GLStateType name) {
return mPropertiesMap.get(name);
}
@Override
public GLCompositeProperty clone() {
IGLProperty []props = new IGLProperty[mPropertiesMap.size()];
int i = 0;
for (IGLProperty p : mPropertiesMap.values()) {
props[i++] = p.clone();
}
return new GLCompositeProperty(getType(), props);
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("GLCompositeProperty {"); //$NON-NLS-1$
for (IGLProperty p : mPropertiesMap.values()) {
sb.append(p.toString());
sb.append(", "); //$NON-NLS-1$
}
sb.append("}");
return sb.toString();
}
@Override
public String getStringValue() {
// This method is called for displaying objects in the UI.
// We do not display any values for composites in the UI as they are only intermediate
// nodes in the tree.
return "";
}
@Override
public GLStateType getType() {
return mType;
}
@Override
public boolean isComposite() {
return true;
}
@Override
public boolean isDefault() {
for (IGLProperty p : mPropertiesMap.values()) {
if (!p.isDefault()) {
return false;
}
}
return true;
}
@Override
public IGLProperty getParent() {
return mParent;
}
@Override
public void setParent(IGLProperty parent) {
mParent = parent;
}
@Override
public void setValue(Object value) {
throw new UnsupportedOperationException(
"Values cannot be set for composite properties."); //$NON-NLS-1$
}
@Override
public Object getValue() {
throw new UnsupportedOperationException(
"Values cannot be obtained for composite properties."); //$NON-NLS-1$
}
@Override
public void prettyPrint(StatePrettyPrinter pp) {
pp.prettyPrint(mType, null);
pp.incrementIndentLevel();
for (IGLProperty p : mPropertiesMap.values()) {
p.prettyPrint(pp);
}
pp.decrementIndentLevel();
}
}