/**
* Copyright 2004-2016 Riccardo Solmi. All rights reserved.
* This file is part of the Whole Platform.
*
* The Whole Platform is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Whole Platform is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>.
*/
package org.whole.lang.ui.notations.dynamic;
import java.util.function.Function;
import org.whole.lang.reflect.AbstractLanguageExtensionDeployer;
import org.whole.lang.reflect.IDeployer;
import org.whole.lang.reflect.ILanguageKit;
import org.whole.lang.reflect.ReflectionFactory;
import org.whole.lang.ui.editor.AbstractEditorKit;
import org.whole.lang.ui.notations.dynamic.editparts.DynamicPartFactory;
/**
* @author Riccardo Solmi
*/
public class DynamicEditorKit extends AbstractEditorKit {
private static final long serialVersionUID = 1L;
private final String name;
private int defaultLevel = 5;
public IDeployer getDeployer() {
return new AbstractLanguageExtensionDeployer() {
public void deploy(ReflectionFactory platform) {
platform.addEditorKit(DynamicEditorKit.this);
}
public void undeploy(ReflectionFactory platform) {
platform.removeEditorKit(getId());
}
};
}
public DynamicEditorKit(String name, int defaultLevel) {
this.name = name;
this.defaultLevel = defaultLevel;
}
public String getId() {
return getClass().getName()+"#"+name;
}
public String getName() {
return name;
}
public int getDefaultLevel() {
return defaultLevel;
}
protected DynamicPartFactory partFactory;
public DynamicPartFactory getPartFactory() {
if (partFactory == null)
partFactory = new DynamicPartFactory(isGeneric());
return partFactory;
}
public static Function<ILanguageKit, Boolean> APPLY_ALL = (ILanguageKit) -> true;
public static Function<ILanguageKit, Boolean> applyLanguage(String languageUri) {
return (ILanguageKit languageKit) -> languageKit.getURI().equals(languageUri);
}
private Function<ILanguageKit, Boolean> canApply = APPLY_ALL;
public void setCanApply(Function<ILanguageKit, Boolean> canApply) {
this.canApply = canApply;
}
public boolean canApply(ILanguageKit languageKit) {
return canApply.apply(languageKit);
}
public boolean isGeneric() {
return canApply == APPLY_ALL;
}
}