ModuleDataModelOracleUtils.java
/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* 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 org.kie.soup.project.datamodel.commons.oracle;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.kie.soup.project.datamodel.oracle.Annotation;
import org.kie.soup.project.datamodel.oracle.DataType;
import org.kie.soup.project.datamodel.oracle.ModelField;
import org.kie.soup.project.datamodel.oracle.ModuleDataModelOracle;
import org.kie.soup.project.datamodel.oracle.TypeSource;
/**
* Utilities to query ModuleDMO content
*/
public class ModuleDataModelOracleUtils {
public static String[] getFactTypes(final ModuleDataModelOracle dmo) {
final Map<String, ModelField[]> modelFields = dmo.getModuleModelFields();
final String[] types = modelFields.keySet().toArray(new String[modelFields.size()]);
Arrays.sort(types);
return types;
}
public static List<String> getSuperType(final ModuleDataModelOracle dmo, final String factType) {
return dmo.getModuleSuperTypes().get(factType);
}
public static Set<Annotation> getTypeAnnotations(final ModuleDataModelOracle dmo, final String factType) {
final Map<String, Set<Annotation>> typeAnnotations = dmo.getModuleTypeAnnotations();
if (!typeAnnotations.containsKey(factType)) {
return Collections.EMPTY_SET;
}
return typeAnnotations.get(factType);
}
public static Map<String, Set<Annotation>> getTypeFieldsAnnotations(final ModuleDataModelOracle dmo, final String factType) {
final Map<String, Map<String, Set<Annotation>>> typeFieldsAnnotations = dmo.getModuleTypeFieldsAnnotations();
if (!typeFieldsAnnotations.containsKey(factType)) {
return Collections.EMPTY_MAP;
}
return typeFieldsAnnotations.get(factType);
}
public static String getFieldClassName(final ModuleDataModelOracle dmo, final String factType, final String fieldName) {
final ModelField field = getField(dmo, factType, fieldName);
return field == null ? null : field.getClassName();
}
private static ModelField getField(final ModuleDataModelOracle dmo, final String factType, final String fieldName) {
final String shortName = getFactNameFromType(dmo, factType);
final ModelField[] fields = dmo.getModuleModelFields().get(shortName);
if (fields == null) {
return null;
}
for (ModelField modelField : fields) {
if (modelField.getName().equals(fieldName)) {
return modelField;
}
}
return null;
}
private static String getFactNameFromType(final ModuleDataModelOracle dmo, final String factType) {
if (factType == null) {
return null;
}
if (dmo.getModuleModelFields().containsKey(factType)) {
return factType;
}
for (Map.Entry<String, ModelField[]> entry : dmo.getModuleModelFields().entrySet()) {
for (ModelField mf : entry.getValue()) {
if (DataType.TYPE_THIS.equals(mf.getName()) && factType.equals(mf.getClassName())) {
return entry.getKey();
}
}
}
return null;
}
public static String getParametricFieldType(final ModuleDataModelOracle dmo, final String factType, final String fieldName) {
final String qualifiedFactFieldName = factType + "#" + fieldName;
return dmo.getModuleFieldParametersType().get(qualifiedFactFieldName);
}
public static TypeSource getTypeSource(final ModuleDataModelOracle dmo, final String factType) {
return dmo.getModuleTypeSources().get(factType);
}
public static String getFieldFullyQualifiedClassName(final ModuleDataModelOracle dmo, final String fullyQualifiedClassName, final String fieldName) {
final ModelField[] mfs = dmo.getModuleModelFields().get(fullyQualifiedClassName);
if (mfs == null) {
return null;
}
for (ModelField mf : mfs) {
if (mf.getName().equals(fieldName)) {
return mf.getClassName();
}
}
return null;
}
}