/*
* Copyright 2003-2015 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.smodel.adapter.ids;
import jetbrains.mps.smodel.adapter.structure.concept.SConceptAdapterById;
import jetbrains.mps.smodel.adapter.structure.concept.SInterfaceConceptAdapterById;
import jetbrains.mps.smodel.adapter.structure.language.SLanguageAdapterById;
import jetbrains.mps.smodel.adapter.structure.link.SContainmentLinkAdapterById;
import jetbrains.mps.smodel.adapter.structure.property.SPropertyAdapterById;
import jetbrains.mps.smodel.adapter.structure.ref.SReferenceLinkAdapterById;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import org.jetbrains.mps.openapi.language.SContainmentLink;
import org.jetbrains.mps.openapi.language.SLanguage;
import org.jetbrains.mps.openapi.language.SProperty;
import org.jetbrains.mps.openapi.language.SReferenceLink;
/**
* Facility to go from meta-model API to implementation-level identities.
* Intended for MPS own implementation facilities, not for external use.
* Counterpart for {@link MetaIdFactory}.
* Tightly coupled with implementation in <code>jetbrains.mps.smodel.adapter.structure.concept.*</code>
* Perhaps, shall introduce an interface to replace casts to implementation classes.
*/
public final class MetaIdHelper {
private MetaIdHelper() {
}
@NotNull
public static SLanguageId getLanguage(SLanguage l) {
if (l instanceof SLanguageAdapterById) {
return ((SLanguageAdapterById) l).getId();
}
return MetaIdFactory.INVALID_LANGUAGE_ID;
}
@NotNull
public static SConceptId getConcept(SAbstractConcept c) {
//todo make serialization via serialize method
if (c instanceof SConceptAdapterById) {
return ((SConceptAdapterById) c).getId();
}
if (c instanceof SInterfaceConceptAdapterById) {
return ((SInterfaceConceptAdapterById) c).getId();
}
return MetaIdFactory.INVALID_CONCEPT_ID;
}
@NotNull
public static SPropertyId getProperty(SProperty p) {
//todo make serialization via serialize method
if (!(p instanceof SPropertyAdapterById)) {
return MetaIdFactory.INVALID_PROP_ID;
}
return ((SPropertyAdapterById) p).getId();
}
@NotNull
public static SReferenceLinkId getAssociation(SReferenceLink r) {
//todo make serialization via serialize method
if (!(r instanceof SReferenceLinkAdapterById)) {
return MetaIdFactory.INVALID_REF_ID;
}
return ((SReferenceLinkAdapterById) r).getId();
}
@NotNull
public static SContainmentLinkId getAggregation(SContainmentLink l) {
//todo make serialization via serialize method
if (!(l instanceof SContainmentLinkAdapterById)) {
return MetaIdFactory.INVALID_LINK_ID;
}
return ((SContainmentLinkAdapterById) l).getId();
}
}