/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.editor;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import org.eclipse.che.ide.api.editor.EditorProvider;
import org.eclipse.che.ide.api.editor.EditorRegistry;
import org.eclipse.che.ide.api.extension.SDK;
import org.eclipse.che.ide.api.filetypes.FileType;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Registry for holding {@link EditorProvider} for specific {@link FileType}.
*
* @author Evgen Vidolob
*/
@SDK(title = "ide.api.editorRegistry")
public class EditorRegistryImpl implements EditorRegistry {
private Map<FileType, List<EditorProvider>> registry;
private EditorProvider defaultProvider;
@Inject
public EditorRegistryImpl(@Named("defaultEditor") EditorProvider defaultProvider,
@Named("defaultFileType") FileType defaultFile) {
super();
this.defaultProvider = defaultProvider;
registry = new HashMap<>();
register(defaultFile, defaultProvider);
}
/** {@inheritDoc} */
@Override
public void register(@NotNull FileType fileType, @NotNull EditorProvider provider) {
if (!registry.containsKey(fileType)) {
registry.put(fileType, new ArrayList<EditorProvider>());
}
registry.get(fileType).add(provider);
}
@Override
public void registerDefaultEditor(@NotNull FileType fileType, @NotNull EditorProvider provider) {
//todo store default editor, add checks to ensure that default editor sets only one time
register(fileType, provider);
}
/** {@inheritDoc} */
@Override
public EditorProvider getEditor(@NotNull FileType fileType) {
if (registry.containsKey(fileType) && !registry.get(fileType).isEmpty()) {
return registry.get(fileType).get(0);
}
return defaultProvider;
}
@Override
public List<EditorProvider> getAllEditorsForFileType(@NotNull FileType fileType) {
List<EditorProvider> result = new ArrayList<>();
if (registry.containsKey(fileType)) {
result.addAll(registry.get(fileType));
}
return result;
}
@Override
public EditorProvider findEditorProviderById(String id) {
for (List<EditorProvider> providers : registry.values()) {
for (EditorProvider provider : providers) {
if (provider.getId().equals(id)) {
return provider;
}
}
}
return defaultProvider;
}
}