package foundation.data.object; import java.util.Set; import foundation.data.meta.field.FieldsRuntime; import foundation.util.CaseInsensitiveSet; import foundation.util.ContentBuilder; import foundation.variant.provider.DataEvent; import foundation.variant.provider.IVariantsProvider; import foundation.variant.provider.VariantProviderType; public class DataObjectVariantsProvider implements IVariantsProvider { private static Set names; private DataObject dataObject; static { init(); } public DataObjectVariantsProvider(DataObject dataObject) { this.dataObject = dataObject; } @Override public String getProviderName() { return DataObject.class.getSimpleName(); } @Override public VariantProviderType getProviderType() { return VariantProviderType.Persist; } public boolean containsVariant(String name) { return names.contains(name); } @Override public Object getVariantValue(DataEvent dataEvent, String name) { if (name == null) { return null; } name = name.toLowerCase(); try { if ("tablename".equals(name)) { return dataObject.getTableName(); } else if ("fieldnames".equals(name)) { FieldsRuntime fieldsRuntime = dataObject.getTableFieldMetas(); int size = fieldsRuntime.getFieldCount(); String[] fieldNames = fieldsRuntime.getFieldNames(); ContentBuilder builder = new ContentBuilder(", "); for (int i = 0; i < size; i++) { builder.append(fieldNames[i]); } return builder.toString(); } else if ("placeholders".equals(name)) { FieldsRuntime fieldsRuntime = dataObject.getTableFieldMetas(); int size = fieldsRuntime.getFieldCount(); ContentBuilder builder = new ContentBuilder(", "); for (int i = 0; i < size; i++) { builder.append("?"); } return builder.toString(); } } catch (Exception e) { } return null; } @Override public Set getVariantNames() { return names; } private static void init() { names = new CaseInsensitiveSet(); names.add("tablename"); names.add("fieldNames"); names.add("placeHolders"); } }