/*******************************************************************************
* Copyright (c) 2004, 2005 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.propertypages;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.cdt.debug.core.model.ICModule;
/**
* A module's properties store.
*/
public class ModuleProperties {
final static public String TYPE = "type"; //$NON-NLS-1$
final static public String CPU = "cpu"; //$NON-NLS-1$
final static public String BASE_ADDRESS = "baseAddress"; //$NON-NLS-1$
final static public String SIZE = "size"; //$NON-NLS-1$
final static public String SYMBOLS_LOADED = "symbolsLoaded"; //$NON-NLS-1$
final static public String SYMBOLS_FILE = "symbolsFile"; //$NON-NLS-1$
public class Property {
private String fKey;
private Object fValue;
/**
* Constructor for Property.
*/
public Property( String key, Object value ) {
fKey = key;
fValue = value;
}
public String getKey() {
return fKey;
}
public Object getValue() {
return fValue;
}
public String toString() {
String result = ""; //$NON-NLS-1$
if ( getKey() != null )
result += getKey();
if ( getValue() != null ) {
result += "="; //$NON-NLS-1$
result += getValue().toString();
}
return result;
}
}
private ArrayList fProperties;
private boolean fIsDirty = false;
static ModuleProperties create( ICModule module ) {
return new ModuleProperties( module );
}
/**
* Constructor for ModuleProperties.
*/
private ModuleProperties( ICModule module ) {
fProperties = new ArrayList( 10 );
fProperties.add( new Property( TYPE, Integer.valueOf(module.getType()) ) );
fProperties.add( new Property( CPU, module.getCPU() ) );
fProperties.add( new Property( BASE_ADDRESS, module.getBaseAddress() ) );
fProperties.add( new Property( SIZE, Long.valueOf( module.getSize() ) ) );
fProperties.add( new Property( SYMBOLS_LOADED, Boolean.valueOf( module.areSymbolsLoaded() ) ) );
fProperties.add( new Property( SYMBOLS_FILE, module.getSymbolsFileName() ) );
}
public Property[] getProperties() {
return (Property[])fProperties.toArray( new Property[fProperties.size()] );
}
public Object getProperty( String key ) {
return find( key ).getValue();
}
public void setProperty( String key, Object value ) {
Property p = find( key );
if ( !p.getValue().equals( value ) ) {
fProperties.set( fProperties.indexOf( p ), new Property( key, value ) );
setDirty( true );
}
}
public boolean isDirty() {
return fIsDirty;
}
public void dispose() {
fProperties.clear();
}
private void setDirty( boolean dirty ) {
fIsDirty = dirty;
}
private Property find( String key ) {
Iterator it = fProperties.iterator();
while( it.hasNext() ) {
Property p = (Property)it.next();
if ( p.getKey().equals( key ) ) {
return p;
}
}
throw new IllegalArgumentException( key );
}
}