private void validateIndex(MetaClass meta, Map<String, MetaClass> metas, MetaClassGraph tempGraph) { // checkIndexSize(); MetadataContext metaContext = new MetadataContext(); metaContext.setOptionChangeMode(UpdateOptionMode.VALIDATE); if(metas.isEmpty()) { // existed MetadataOptionValidator validator = new MetadataOptionValidator(new MetaOption(), metaContext); validator.processOption(meta, meta.getOptions(), tempGraph); } else { // newOptions MetadataOptionValidator validator = new MetadataOptionValidator(metas.get(meta.getName()).getOptions(), metaContext); MetaClass existedMetaClass = meta.getMetadataService().getMetaClass(meta.getName()); validator.processOption(existedMetaClass == null ? meta : existedMetaClass, meta.getOptions(), tempGraph); } // for (IndexInfo index : getClassIndexes()) { // index.validate(); // } } }
@Override public void updateMetaOption(String className, MetaOption options, MetadataContext context) { CheckConditions.checkNotNull(context.getOptionChangeMode(), "option update mode must specify when update metaclass options"); CheckConditions.checkNotNull(options, "option can not be null when update metaclass options"); MetaClass targetMetadata = getMetaClass(className); if (targetMetadata == null) { throw new IllegalMetaClassException("can not find meta data with name " + className); } // validation here: add/update/delete MetadataOptionValidator validator = new MetadataOptionValidator(options, context); targetMetadata.traverse(validator); // checkIndexSize(className, options, targetMetadata); IMetadataCommand command = new UpdateOptionCommand(targetMetadata, options, this.collection); command.execute(context); addMetaHistory(targetMetadata, "updateMetaOption", context); cacheManager.deleteMetaClassFromCache(targetMetadata); MetaClass result = getMetaClass(targetMetadata.getName()); graph.updateMetaClass(result); }