blob: 608ff65fb90e9db07ef2b1c12c7f6139390145bb [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2003, 2004 Geoff Longman and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Geoff Longman - Initial API and implementation
* IBM - Tightening integration with existing Platform
**********************************************************************/
package org.eclipse.core.tools.runtime;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.ui.views.properties.*;
/**
* A read-only IPropertySource for Marker attributes.
*/
public class ContentTypePropertySource implements IPropertySource, IAdaptable {
final static IPropertyDescriptor UNIQUE_ID = new TextPropertyDescriptor("id", "Unique ID");
final static IPropertyDescriptor NAME = new TextPropertyDescriptor("name", "Name");
final static IPropertyDescriptor PARENT_ID = new TextPropertyDescriptor("parent", "Parent ID");
final static IPropertyDescriptor FILE_NAMES = new TextPropertyDescriptor("file-names", "Associated file names");
final static IPropertyDescriptor FILE_EXTENSIONS = new TextPropertyDescriptor("file-extensions", "Associated file extensions");
final static IPropertyDescriptor DEFAULT_CHARSET = new TextPropertyDescriptor("charset", "Default charset");
final static IPropertyDescriptor[] PROPERTY_DESCRIPTORS = {UNIQUE_ID, NAME, PARENT_ID, FILE_NAMES, FILE_EXTENSIONS, DEFAULT_CHARSET};
protected IContentType type;
public ContentTypePropertySource(IContentType type) {
this.type = type;
}
/**
* @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
*/
@Override
public Object getEditableValue() {
return null;
}
/**
* @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
*/
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
return PROPERTY_DESCRIPTORS;
}
/**
* @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(Object)
*/
@Override
public Object getPropertyValue(Object id) {
if (id.equals(UNIQUE_ID.getId()))
return type.getId();
if (id.equals(NAME.getId()))
return type.getName();
if (id.equals(PARENT_ID.getId())) {
IContentType baseType = type.getBaseType();
return baseType == null ? null : baseType.getId();
}
if (id.equals(FILE_NAMES.getId()))
return toString(type.getFileSpecs(IContentType.FILE_NAME_SPEC));
if (id.equals(FILE_EXTENSIONS.getId()))
return toString(type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC));
if (id.equals(DEFAULT_CHARSET.getId()))
return type.getDefaultCharset();
return null;
}
private Object toString(String[] fileNames) {
if (fileNames.length == 0)
return ""; //$NON-NLS-1$
StringBuilder result = new StringBuilder();
for (String fileName : fileNames) {
result.append(fileName);
result.append(',');
}
result.deleteCharAt(result.length() - 1);
return result.toString();
}
/**
* @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(Object)
*/
@Override
public boolean isPropertySet(Object id) {
return true;
}
/**
* @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(Object)
*/
@Override
public void resetPropertyValue(Object id) {
// do nothing
}
/**
* @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(Object, Object)
*/
@Override
public void setPropertyValue(Object id, Object value) {
// do nothing
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ContentTypePropertySource))
return false;
return type.getId().equals(((ContentTypePropertySource) obj).type.getId());
}
@Override
public int hashCode() {
return type.getId().hashCode();
}
@Override
public String toString() {
return type.getId();
}
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == IPropertySource.class)
return adapter.cast(this);
return null;
}
}