cleanup — client don't have to implement yet another interface (SchemeExtensionProvider)

This commit is contained in:
Vladimir Krivosheev
2015-02-20 17:08:16 +01:00
parent fa361fdc54
commit b9f9322666
5 changed files with 68 additions and 116 deletions
@@ -27,7 +27,7 @@ import java.io.IOException;
/**
* @author yole
*/
public abstract class BaseSchemeProcessor<T extends ExternalizableScheme> implements SchemeProcessor<T> {
public abstract class BaseSchemeProcessor<T extends ExternalizableScheme> implements SchemeProcessor<T>, SchemeExtensionProvider {
@Override
public void initScheme(@NotNull T scheme) {
}
@@ -75,4 +75,15 @@ public abstract class BaseSchemeProcessor<T extends ExternalizableScheme> implem
public State getState(@NotNull T scheme) {
return shouldBeSaved(scheme) ? State.POSSIBLY_CHANGED : State.NON_PERSISTENT;
}
@Override
public boolean isUpgradeNeeded() {
return false;
}
@NotNull
@Override
public String getSchemeExtension() {
return ".xml";
}
}
@@ -1,45 +0,0 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.options;
import org.jetbrains.annotations.NotNull;
@Deprecated
public class SharedScheme<E extends ExternalizableScheme> {
private final String myUserName;
private final String myDescription;
private final E myScheme;
public SharedScheme(@NotNull String userName, final String description, @NotNull E scheme) {
myUserName = userName;
myDescription = description;
myScheme = scheme;
}
@NotNull
public String getUserName() {
return myUserName;
}
public String getDescription() {
return myDescription;
}
@NotNull
public E getScheme() {
return myScheme;
}
}
@@ -56,7 +56,7 @@ import java.util.Comparator;
import java.util.List;
public class EditorColorsManagerImpl extends EditorColorsManager implements NamedJDOMExternalizable, ExportableComponent, NamedComponent {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.colors.impl.EditorColorsManagerImpl");
private static final Logger LOG = Logger.getInstance(EditorColorsManagerImpl.class);
private final EventDispatcher<EditorColorsListener> myListeners = EventDispatcher.create(EditorColorsListener.class);
@@ -76,9 +76,49 @@ public class EditorColorsManagerImpl extends EditorColorsManager implements Name
public EditorColorsManagerImpl(DefaultColorSchemesManager defaultColorSchemesManager, SchemesManagerFactory schemesManagerFactory) {
myDefaultColorSchemesManager = defaultColorSchemesManager;
mySchemesManager = schemesManagerFactory.createSchemesManager(
FILE_SPEC,
new MySchemeProcessor(), RoamingType.PER_USER);
mySchemesManager = schemesManagerFactory.createSchemesManager(FILE_SPEC, new BaseSchemeProcessor<EditorColorsSchemeImpl>() {
@NotNull
@Override
public EditorColorsSchemeImpl readScheme(@NotNull Element element) throws InvalidDataException {
return loadSchemeFromDocument(element, true);
}
@Override
public Element writeScheme(@NotNull final EditorColorsSchemeImpl scheme) {
Element root = new Element(SCHEME_NODE_NAME);
try {
scheme.writeExternal(root);
}
catch (WriteExternalException e) {
LOG.error(e);
return null;
}
return root;
}
@NotNull
@Override
public State getState(@NotNull EditorColorsSchemeImpl scheme) {
return scheme instanceof ReadOnlyColorsScheme ? State.NON_PERSISTENT : State.POSSIBLY_CHANGED;
}
@Override
public void onCurrentSchemeChanged(final Scheme newCurrentScheme) {
fireChanges(mySchemesManager.getCurrentScheme());
}
@NotNull
@Override
public String getSchemeExtension() {
return FILE_EXT;
}
@Override
public boolean isUpgradeNeeded() {
return true;
}
}, RoamingType.PER_USER);
addDefaultSchemes();
@@ -184,10 +224,6 @@ public class EditorColorsManagerImpl extends EditorColorsManager implements Name
return scheme;
}
// -------------------------------------------------------------------------
// Schemes manipulation routines
// -------------------------------------------------------------------------
@Override
public void addColorsScheme(@NotNull EditorColorsScheme scheme) {
if (!isDefaultScheme(scheme) && scheme.getName().trim().length() > 0) {
@@ -208,10 +244,6 @@ public class EditorColorsManagerImpl extends EditorColorsManager implements Name
}
}
// -------------------------------------------------------------------------
// Getters & Setters
// -------------------------------------------------------------------------
@NotNull
@Override
public EditorColorsScheme[] getAllSchemes() {
@@ -268,10 +300,6 @@ public class EditorColorsManagerImpl extends EditorColorsManager implements Name
myListeners.getMulticaster().globalSchemeChange(scheme);
}
// -------------------------------------------------------------------------
// Routines responsible for loading & saving colors schemes.
// -------------------------------------------------------------------------
private static File getColorsDir(boolean create) {
@NonNls String directoryPath = PathManager.getConfigPath() + File.separator + "colors";
File directory = new File(directoryPath);
@@ -368,48 +396,4 @@ public class EditorColorsManagerImpl extends EditorColorsManager implements Name
public String getComponentName() {
return "EditorColorsManagerImpl";
}
private final class MySchemeProcessor extends BaseSchemeProcessor<EditorColorsSchemeImpl> implements SchemeExtensionProvider {
@NotNull
@Override
public EditorColorsSchemeImpl readScheme(@NotNull Element element) throws InvalidDataException {
return loadSchemeFromDocument(element, true);
}
@Override
public Element writeScheme(@NotNull final EditorColorsSchemeImpl scheme) {
Element root = new Element(SCHEME_NODE_NAME);
try {
scheme.writeExternal(root);
}
catch (WriteExternalException e) {
LOG.error(e);
return null;
}
return root;
}
@NotNull
@Override
public State getState(@NotNull EditorColorsSchemeImpl scheme) {
return scheme instanceof ReadOnlyColorsScheme ? State.NON_PERSISTENT : State.POSSIBLY_CHANGED;
}
@Override
public void onCurrentSchemeChanged(final Scheme newCurrentScheme) {
fireChanges(mySchemesManager.getCurrentScheme());
}
@NotNull
@Override
public String getSchemeExtension() {
return FILE_EXT;
}
@Override
public boolean isUpgradeNeeded() {
return true;
}
}
}
@@ -69,7 +69,7 @@ public class SchemesManagerImpl<T extends Scheme, E extends ExternalizableScheme
private VirtualFile myDir;
private String mySchemeExtension = DirectoryStorageData.DEFAULT_EXT;
private boolean myUpgradeExtension;
private boolean myUpdateExtension;
private final Set<String> myFilesToDelete = new THashSet<String>();
@@ -85,7 +85,7 @@ public class SchemesManagerImpl<T extends Scheme, E extends ExternalizableScheme
myIoDir = baseDir;
if (processor instanceof SchemeExtensionProvider) {
mySchemeExtension = ((SchemeExtensionProvider)processor).getSchemeExtension();
myUpgradeExtension = ((SchemeExtensionProvider)processor).isUpgradeNeeded();
myUpdateExtension = ((SchemeExtensionProvider)processor).isUpgradeNeeded();
}
VirtualFileTracker virtualFileTracker = ServiceManager.getService(VirtualFileTracker.class);
@@ -316,15 +316,17 @@ public class SchemesManagerImpl<T extends Scheme, E extends ExternalizableScheme
}
private boolean canRead(@NotNull VirtualFile file) {
if (!file.isDirectory()) {
if (myUpgradeExtension && !DirectoryStorageData.DEFAULT_EXT.equals(mySchemeExtension) && DirectoryStorageData.isStorageFile(file)) {
return myDir.findChild(file.getNameSequence() + mySchemeExtension) == null;
}
else if (StringUtilRt.endsWithIgnoreCase(file.getNameSequence(), mySchemeExtension)) {
return true;
}
if (file.isDirectory()) {
return false;
}
if (myUpdateExtension && !DirectoryStorageData.DEFAULT_EXT.equals(mySchemeExtension) && DirectoryStorageData.isStorageFile(file)) {
// read file.DEFAULT_EXT only if file.CUSTOM_EXT doesn't exists
return myDir.findChild(file.getNameSequence() + mySchemeExtension) == null;
}
else {
return StringUtilRt.endsWithIgnoreCase(file.getNameSequence(), mySchemeExtension);
}
return false;
}
@Nullable