/*
* Copyright 2003-2011 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 jetbrains.mps.nodeEditor.cells;
import jetbrains.mps.openapi.editor.EditorContext;
import jetbrains.mps.smodel.action.IReferentPresentationProvider;
import jetbrains.mps.util.annotation.ToRemove;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.language.SConcept;
import org.jetbrains.mps.openapi.language.SReferenceLink;
import org.jetbrains.mps.openapi.model.SNode;
import java.util.Objects;
public final class EditorCell_RefPresentation {
private EditorCell_RefPresentation() {
}
@ToRemove(version = 3.5)
@Deprecated
public static EditorCell_Property create(EditorContext context, SNode node, SNode refNode, String role) {
SReferenceLink link = getLinkByRole(refNode.getConcept(), role);
IReferentPresentationProvider presentationProvider = link == null ? IReferentPresentationProvider.DEFAULT_PRESENTATION : IReferentPresentationProvider.getDefaultPresentation(link);
MyAccessor accessor = new MyAccessor(node, refNode, presentationProvider);
return EditorCell_Property.create(context, accessor, node);
}
private static SReferenceLink getLinkByRole(SConcept concept, String role) {
for (SReferenceLink link : concept.getReferenceLinks()) {
if (link.getName().equals(role)) {
return link;
}
}
return null;
}
@NotNull
public static EditorCell_Property create(@NotNull EditorContext context, @NotNull SNode node, @Nullable SNode refNode,
@NotNull IReferentPresentationProvider presentationProvider) {
MyAccessor accessor = new MyAccessor(node, refNode, presentationProvider);
return EditorCell_Property.create(context, accessor, node);
}
private static class MyAccessor implements ModelAccessor {
private SNode myNode;
private SNode myRefNode;
private IReferentPresentationProvider myPresentationProvider;
MyAccessor(SNode node, SNode refNode, IReferentPresentationProvider presentationProvider) {
myNode = node;
myRefNode = refNode;
myPresentationProvider = presentationProvider;
}
@Override
public String getText() {
if (myRefNode == null) {
return null;
}
return myPresentationProvider.getPresentation(myRefNode, myNode);
}
@Override
public void setText(String text) {
}
@Override
public boolean isValidText(String text) {
return Objects.equals(getText(), text);
}
}
}