public void deleteMetaField(CMSPriority p, String repoName, String metaclassName, String fieldName, MetadataContext context) { logger.info("cms deleteMetaField: {}, {}, {}, {}", new Object[] { repoName, metaclassName, fieldName, context.getSourceIp() }); checkServerState(p, true); String id = requestId.getNext(); context.setRequestId(id); context.setDbConfig(dbConfig); long current = System.currentTimeMillis(); context.setStartProcessingTime(current); Object value = getDBConfig().get(CMSDBConfig.SYS_ALLOW_METADATA_DELETE); if (value instanceof Boolean && (Boolean) value) { IMetadataService metaService = repositoryService.getRepository(repoName).getMetadataService(); metaService.deleteMetaField(metaclassName, fieldName, context); long total = System.currentTimeMillis() - current; context.setTotalTimeCost(total); context.addDbTimeCost(context.getDbTimeCost()); } else { throw new NotSupportOperationException("Delete meta field not enabled!"); } }
@Test(expected=MetaFieldNotExistsException.class) public void testDeleteMetaField01NotExisting() { IMetadataService metaService = repositoryService.getRepository("stratus-ci").getMetadataService(); MetadataContext metaContext = new MetadataContext(); metaService.deleteMetaField("Base", "noSuchField", metaContext); }
@Test(expected = MetaClassNotExistsException.class) public void testDeleteMetaField02MetaNotExisting() { IMetadataService metaService = repositoryService.getRepository("stratus-ci").getMetadataService(); MetadataContext metaContext = new MetadataContext(); metaService.deleteMetaField("NoSuchBase", "noSuchField", metaContext); }
@Test public void testDeleteMetaField() { IMetadataService metaService = repositoryService.getRepository("software-deployment").getMetadataService(); MetadataContext metaContext = new MetadataContext(); String className = "ServiceCluster"; metaService.deleteMetaField(className, "name", metaContext); MetaClass meta = metaService.getMetaClass(className); Assert.assertNull(meta.getFieldByName("name")); }
@Test public void testDeleteMetaRelationshipAndIndex() { IMetadataService metaService = repositoryService.getRepository("software-deployment").getMetadataService(); MetadataContext metaContext = new MetadataContext(); String className = "ServiceCluster"; MetaClass meta = metaService.getMetaClass(className); Assert.assertNotNull(meta.getFieldByName("poolClusters")); Assert.assertNotNull(meta.getIndexes()); Assert.assertEquals(1, meta.getIndexesOnField("poolClusters").size()); metaService.deleteMetaField(className, "poolClusters", metaContext); MetaClass getMeta = metaService.getMetaClass(className); Assert.assertNull(getMeta.getFieldByName("poolClusters")); Assert.assertNotNull(getMeta.getIndexes()); Assert.assertTrue(getMeta.getIndexes().size() == 2); Assert.assertEquals(0, getMeta.getIndexesOnField("poolClusters").size()); }