public void validate(MetaClass meta) { checkMetaClassName(meta.getName()); checkNotInheritedFromEmbededClass(meta, Collections.<String, MetaClass> emptyMap()); validateFields(meta, Collections.<String, MetaClass> emptyMap(), true); validateIndex(meta, Collections.<String, MetaClass> emptyMap(), meta.getGraph()); for (MetaRelationship rel : meta.getFromReference()) { rel.validate(true, rel.getSourceMetaClass(), Collections.<String, MetaClass> emptyMap()); } }
private void checkMetaClassName(String name) { CheckConditions.checkCondition(!StringUtils.isNullOrEmpty(name), new IllegalMetaClassException("meta class name can not be empty")); CheckConditions.checkCondition(!StringUtils.isNullOrEmpty(name.trim()), new IllegalMetaClassException("meta class name can not be empty")); CheckConditions.checkCondition(!(isSystem(name)), new IllegalMetaClassException("meta class name cannot begin with 'system.' prefix")); CheckConditions.checkCondition(containsValidCharacters(name,CMSConsts.INVALID_META_CLASS_NAME_CHARACTERS), new IllegalMetaClassException("meta class name cannot contains invalid characters: " + Arrays.toString(CMSConsts.INVALID_META_CLASS_NAME_CHARACTERS))); }
@Override public void validateMetaClass(String className) { MetaClass meta = repo.getMetadataService().getMetaClass(className); if (meta == null) { throw new MetaClassNotExistsException(repo.getRepositoryName(), className); } validator.validate(meta); }
@Override public MetaClass updateMetaField(MetaClass metaClass, String fieldName, MetadataContext context) { try { metadataLock.lock(); MetaClass existingMeta = getMetaClass(metaClass.getName()); checkMetaClassVersion(metaClass); metaClass.setMetadataService(this); Map<String, MetaClass> metas = prepareMetaClassMap(Arrays.asList(metaClass)); validator.validateForUpdateField(metaClass, metas, fieldName); cacheManager.deleteMetaClassFromCache(metaClass); graph.deleteMetaClass(metaClass); MetaClass meta = innerUpdateMetaClass(metaClass, true, true); addMetaHistory(existingMeta, "updateMetaField", context); return meta; } catch (InterruptedException e) { logger.info("lock interrupted for updateSingleMetaField"); throw new MetaDataException(MetaErrCodeEnum.LOCK_INTERRUPTED, "lock interrupted for updateSingleMetaField ", e); } finally { metadataLock.unlock(); } }
checkMetaClassVersion(m); validator.validateForUpdate(m, metas, tempGraph); validator.validateForCreation(m, metas, tempGraph);
validator.validateForUpdate(metaClass, Collections.<String, MetaClass> emptyMap(), tempGraph); setupParentVersion(metaClass); MetaClass meta = innerUpdateMetaClass(metaClass, true, false);
throw new IllegalMetaClassException("Can not use reserved name :" + name + " as metaclass name"); validate(meta, metas, tempGraph); validateParentConsistency(meta, metas, fieldNames, pm);
validator.validateForCreation(metaClass, Collections.<String, MetaClass> emptyMap(), tempGraph);
@Test(expected = IllegalMetaClassException.class) public void testValidateForUpdateField_metaClassName3() { MetaClass mClass = new MetaClass(); Random randomGenerator = new Random(); char[] invalidChars = CMSConsts.INVALID_META_CLASS_NAME_CHARACTERS; String metaClassName = String.valueOf(invalidChars[randomGenerator.nextInt(invalidChars.length)]); mClass.setName(metaClassName); mClass.setRepository(RAPTOR_PAAS); mClass.setParent("Employee"); MetaAttribute a1 = new MetaAttribute(); String fieldName = "title"; a1.setName(fieldName); a1.setDataType(DataTypeEnum.ENUM); List<String> enumValues = new ArrayList<String>(3); enumValues.add("junior"); enumValues.add("staff"); a1.setEnumValues(enumValues); mClass.addField(a1); Map<String, MetaClass> metas = new HashMap<String, MetaClass>(); metas.put(metaClassName, mClass); // mClass.validateForUpdateField(metas, fieldName); validator.validateForUpdateField(mClass, metas, fieldName); }
validator.validateForUpdate(updateSelf, metas, tempGraph);
private void validate(MetaClass meta, Map<String, MetaClass> metas, MetaClassGraph tempGraph) { String name = meta.getName(); checkMetaClassName(name); checkNotInheritedFromEmbededClass(meta, metas); CheckConditions.checkCondition(!(meta.isEmbed() && meta.isInner()), new IllegalMetaClassException("meta class " + name + " cannot be embed and inner")); CheckConditions.checkCondition(meta.getId() == null, new IllegalMetaClassException("id should not be set for creation and update")); CheckConditions.checkCondition(meta.getAncestors() == null, new IllegalMetaClassException("ancestors should not be set for creation and update")); validateFields(meta, metas, false); validateIndex(meta, metas, tempGraph); }
@Test(expected = IllegalMetaClassException.class) public void testValidateForUpdateField_metaClassName2() { MetaClass mClass = new MetaClass(); String metaClassName = "system.MyClass"; mClass.setName(metaClassName); mClass.setRepository(RAPTOR_PAAS); mClass.setParent("Employee"); MetaAttribute a1 = new MetaAttribute(); String fieldName = "title"; a1.setName(fieldName); a1.setDataType(DataTypeEnum.ENUM); List<String> enumValues = new ArrayList<String>(3); enumValues.add("junior"); enumValues.add("staff"); a1.setEnumValues(enumValues); mClass.addField(a1); Map<String, MetaClass> metas = new HashMap<String, MetaClass>(); metas.put(metaClassName, mClass); // mClass.validateForUpdateField(metas, fieldName); validator.validateForUpdateField(mClass, metas, fieldName); }
public void validateForUpdate(MetaClass meta, Map<String, MetaClass> metas, MetaClassGraph tempGraph) { validate(meta, metas, tempGraph);
@Test(expected = IllegalMetaClassException.class) public void testValidateForUpdateField_metaClassName1() { MetaClass mClass = new MetaClass(); String metaClassName = " "; mClass.setName(metaClassName); mClass.setRepository(RAPTOR_PAAS); mClass.setParent("Employee"); MetaAttribute a1 = new MetaAttribute(); String fieldName = "title"; a1.setName(fieldName); a1.setDataType(DataTypeEnum.ENUM); List<String> enumValues = new ArrayList<String>(3); enumValues.add("junior"); enumValues.add("staff"); a1.setEnumValues(enumValues); mClass.addField(a1); Map<String, MetaClass> metas = new HashMap<String, MetaClass>(); metas.put(metaClassName, mClass); // mClass.validateForUpdateField(metas, fieldName); validator.validateForUpdateField(mClass, metas, fieldName); }
validate(meta, metas, graph);