blob: 4a3d7ccc017c876157179d4e866758bd9ecf5f1b [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2019 Lakshminarayana Nekkanti(narayana.nekkanti@gmail.com)
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0 3
*
* Contributor
* Lakshminarayana Nekkanti - initial API and implementation
********************************************************************************/
package org.eclipse.ui.internal.genericeditor;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.ide.IEditorAssociationOverride;
/**
* Overrides all the default generic editor icon with the content-type specific
* icons contributed using the extension point
* "org.eclipse.ui.genericeditor.icons".Content provides uses the overridden
* icons to show in Project Explorer
*/
public class GenericEditorWithIconAssociationOverride implements IEditorAssociationOverride {
private Map<String, IEditorDescriptor> descriptorMap = new HashMap<String, IEditorDescriptor>();
@Override
public IEditorDescriptor[] overrideEditors(IEditorInput editorInput, IContentType contentType,
IEditorDescriptor[] editorDescriptors) {
return editorInput != null ? overrideEditors(editorInput.getName(), contentType, editorDescriptors)
: editorDescriptors;
}
@Override
public IEditorDescriptor[] overrideEditors(String fileName, IContentType contentType,
IEditorDescriptor[] editorDescriptors) {
return Arrays.stream(editorDescriptors).map(descriptor -> {
return getEditorDescriptorForFile(descriptor, fileName);
}).toArray(size -> new IEditorDescriptor[size]);
}
@Override
public IEditorDescriptor overrideDefaultEditor(IEditorInput editorInput, IContentType contentType,
IEditorDescriptor editorDescriptor) {
return editorInput != null ? overrideDefaultEditor(editorInput.getName(), contentType, editorDescriptor)
: editorDescriptor;
}
@Override
public IEditorDescriptor overrideDefaultEditor(String fileName, IContentType contentType,
IEditorDescriptor editorDescriptor) {
return getEditorDescriptorForFile(editorDescriptor, fileName);
}
private IEditorDescriptor getEditorDescriptorForFile(IEditorDescriptor defaultDescriptor, String fileName) {
if (defaultDescriptor != null && ExtensionBasedTextEditor.GENERIC_EDITOR_ID.equals(defaultDescriptor.getId())
&& fileName != null && !fileName.isEmpty()) {
if (!descriptorMap.containsKey(fileName)) {
descriptorMap.put(fileName, new GenericEditorWithContentTypeIcon(fileName, defaultDescriptor));
}
return descriptorMap.get(fileName);
}
return defaultDescriptor;
}
}