/*******************************************************************************
* Copyright (c) 2005, 2008 IBM Corporation 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:
* IBM Corporation - initial API and implementation
* QNX Software System
*******************************************************************************/
package org.eclipse.cdt.internal.ui;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.IBasicPropertyConstants;
import org.eclipse.ui.views.properties.FilePropertySource;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.PropertyDescriptor;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.ui.CUIPlugin;
public class BinaryPropertySource extends FilePropertySource {
private final static String ELF_CPU= "CElementProperties.elf_cpu"; //$NON-NLS-1$
private final static String ELF_TEXT= "CElementProperties.elf_text"; //$NON-NLS-1$
private final static String ELF_DATA= "CElementProperties.elf_data"; //$NON-NLS-1$
private final static String ELF_BSS= "CElementProperties.elf_bss"; //$NON-NLS-1$
private final static String ELF_TYPE= "CElementProperties.elf_type"; //$NON-NLS-1$
private final static String ELF_HAS_DEBUG= "CElementProperties.elf_has_debug"; //$NON-NLS-1$
private final static String ELF_SONAME= "CElementProperties.elf_soname"; //$NON-NLS-1$
private final static String ELF_NEEDED= "CElementProperties.elf_needed"; //$NON-NLS-1$
private IBinary binary;
// Property Descriptors
static private IPropertyDescriptor[] fgPropertyDescriptors;
/**
* Get a PropertyDescriptor that defines the binary properties of an Elf
* @return the PropertyDescriptor
*/
private static IPropertyDescriptor[] getInitialPropertyDescriptor() {
// cpu name
String cpuName= CUIPlugin.getResourceString(ELF_CPU);
PropertyDescriptor cpuDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_CPU, cpuName);
cpuDescriptor.setAlwaysIncompatible(true);
cpuDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf text
String textName = CUIPlugin.getResourceString(ELF_TEXT);
PropertyDescriptor textDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_TEXT, textName);
textDescriptor.setAlwaysIncompatible(true);
textDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf data
String dataName = CUIPlugin.getResourceString(ELF_DATA);
PropertyDescriptor dataDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_DATA, dataName);
dataDescriptor.setAlwaysIncompatible(true);
dataDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf bss
String bssName = CUIPlugin.getResourceString(ELF_BSS);
PropertyDescriptor bssDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_BSS, bssName);
bssDescriptor.setAlwaysIncompatible(true);
bssDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf type
String typeName = CUIPlugin.getResourceString(ELF_TYPE);
PropertyDescriptor typeDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_TYPE, typeName);
typeDescriptor.setAlwaysIncompatible(true);
typeDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf needed
String neededName = CUIPlugin.getResourceString(ELF_NEEDED);
PropertyDescriptor neededDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_NEEDED, neededName);
neededDescriptor.setAlwaysIncompatible(true);
neededDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf soname
String sonameName = CUIPlugin.getResourceString(ELF_SONAME);
PropertyDescriptor sonameDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_SONAME, sonameName);
sonameDescriptor.setAlwaysIncompatible(true);
sonameDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
// elf debug
String debugName = CUIPlugin.getResourceString(ELF_HAS_DEBUG);
PropertyDescriptor debugDescriptor= new PropertyDescriptor(ICElementPropertyConstants.P_ELF_HAS_DEBUG, debugName);
debugDescriptor.setAlwaysIncompatible(true);
debugDescriptor.setCategory(ICElementPropertyConstants.P_BINARY_FILE_CATEGORY);
return new IPropertyDescriptor[] { cpuDescriptor, textDescriptor, dataDescriptor,
bssDescriptor, typeDescriptor, sonameDescriptor, debugDescriptor, neededDescriptor };
}
public BinaryPropertySource(IBinary bin) {
super((IFile)bin.getResource());
binary= bin;
}
/**
* @see IPropertySource#getPropertyDescriptors
*/
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
if (fgPropertyDescriptors == null) {
initializeBinaryDescriptors();
}
return fgPropertyDescriptors;
}
/**
* @see IPropertySource#getPropertyValue
*/
@Override
public Object getPropertyValue(Object name) {
if (element != null) {
Object returnValue = super.getPropertyValue(name);
if(returnValue != null) {
return returnValue;
}
}
if (name.equals(IBasicPropertyConstants.P_TEXT)) {
return binary.getElementName();
} else if (name.equals(ICElementPropertyConstants.P_ELF_CPU)) {
return binary.getCPU();
} else if (name.equals(ICElementPropertyConstants.P_ELF_TEXT)) {
return Long.toString(binary.getText());
} else if (name.equals(ICElementPropertyConstants.P_ELF_DATA)) {
return Long.toString(binary.getData());
} else if (name.equals(ICElementPropertyConstants.P_ELF_BSS)) {
return Long.toString(binary.getBSS());
} else if (name.equals(ICElementPropertyConstants.P_ELF_SONAME)) {
return binary.getSoname();
} else if (name.equals(ICElementPropertyConstants.P_ELF_HAS_DEBUG)) {
if (binary.hasDebug()) {
return "true";//$NON-NLS-1$
}
return "false";//$NON-NLS-1$
} else if (name.equals(ICElementPropertyConstants.P_ELF_NEEDED)) {
String[] needed = binary.getNeededSharedLibs();
String need = ""; //$NON-NLS-1$
for (int i = 0; i < needed.length; i++) {
need += " " + needed[i]; //$NON-NLS-1$
}
return need.trim();
} else if (name.equals(ICElementPropertyConstants.P_ELF_TYPE)) {
if (binary.isObject()) {
return "object"; //$NON-NLS-1$
} else if (binary.isExecutable()) {
return "executable"; //$NON-NLS-1$
} else if (binary.isSharedLib()) {
return "shared library"; //$NON-NLS-1$
} else if (binary.isCore()) {
return "core file"; //$NON-NLS-1$
}
}
return null;
}
/**
* Return the Property Descriptors for the file type.
*/
private void initializeBinaryDescriptors() {
if (element != null) {
IPropertyDescriptor[] superDescriptors = super.getPropertyDescriptors();
int superLength = superDescriptors.length;
IPropertyDescriptor[] binDescriptors = getInitialPropertyDescriptor();
int binLength = binDescriptors.length;
fgPropertyDescriptors = new IPropertyDescriptor[superLength + binLength];
System.arraycopy(superDescriptors, 0, fgPropertyDescriptors, 0, superLength);
System.arraycopy(binDescriptors, 0, fgPropertyDescriptors, superLength, binLength);
} else {
fgPropertyDescriptors = getInitialPropertyDescriptor();
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
*/
@Override
public Object getEditableValue() {
return this;
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
*/
@Override
public boolean isPropertySet(Object id) {
return false;
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
*/
@Override
public void resetPropertyValue(Object id) {
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object)
*/
@Override
public void setPropertyValue(Object id, Object value) {
}
}