/**
* personium.io
* Copyright 2014 FUJITSU LIMITED
*
* 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 com.fujitsu.dc.test.unit.core.model.impl.es.odata;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.simple.JSONObject;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.odata4j.edm.EdmComplexType;
import org.odata4j.edm.EdmComplexType.Builder;
import org.odata4j.edm.EdmDataServices;
import org.odata4j.edm.EdmEntityType;
import org.odata4j.edm.EdmProperty;
import org.odata4j.edm.EdmSchema;
import org.odata4j.edm.EdmSimpleType;
import com.fujitsu.dc.core.model.ctl.ComplexType;
import com.fujitsu.dc.core.model.ctl.EntityType;
import com.fujitsu.dc.core.model.impl.es.doc.ComplexTypePropertyDocHandler;
import com.fujitsu.dc.core.model.impl.es.doc.PropertyDocHandler;
import com.fujitsu.dc.core.model.impl.es.odata.PropertyLimitChecker;
import com.fujitsu.dc.core.model.impl.es.odata.PropertyLimitChecker.CheckError;
import com.fujitsu.dc.test.categories.Unit;
/**
* UnitCtlODataProducerユニットテストクラス.
*/
@Category({ Unit.class })
public class PropertyLimitCheckerTest {
private static final String NS = "UserData";
private EdmEntityType.Builder EntityTypeを作成(String entityTypeName) {
EdmEntityType.Builder eBuilder = EdmEntityType.newBuilder();
eBuilder.setName(entityTypeName).addKeys("root").setNamespace(NS);
return eBuilder;
}
private EdmComplexType.Builder ComplexTypeを作成(String name) {
EdmComplexType.Builder ctBuilder = EdmComplexType.newBuilder();
ctBuilder.setName(name).setNamespace(NS);
return ctBuilder;
}
private void EntityTypeにsimple型Propertyを指定数作成(int count, EdmEntityType.Builder builder) {
for (int i = 0; i < count; i++) {
EdmProperty.Builder pBuilder = EdmProperty.newBuilder(String.format("p_prop%03d", i))
.setType(EdmSimpleType.STRING);
builder.addProperties(pBuilder);
// 予約語プロパティ用ダミー
pBuilder = EdmProperty.newBuilder(String.format("_reservedProp_%03d", i))
.setType(EdmSimpleType.STRING);
builder.addProperties(pBuilder);
}
}
private EdmComplexType.Builder EntityTypeにcomplex型Propertyを1つ作成(String complexTypeName,
EdmEntityType.Builder builder) {
EdmComplexType.Builder ctBuilder = EdmComplexType.newBuilder();
ctBuilder.setName(complexTypeName).setNamespace(NS);
EdmProperty.Builder pBuilder = EdmProperty.newBuilder(complexTypeName + "_prop")
.setType(ctBuilder);
builder.addProperties(pBuilder);
return ctBuilder;
}
private void ComplexTypeにsimple型Propertyを指定数作成(int count, EdmComplexType.Builder builder) {
for (int i = 0; i < count; i++) {
EdmProperty.Builder pBuilder = EdmProperty.newBuilder(String.format("p_prop%03d", i))
.setType(EdmSimpleType.STRING);
builder.addProperties(pBuilder);
// 予約語プロパティ用ダミー
pBuilder = EdmProperty.newBuilder(String.format("_reservedProp_%03d", i))
.setType(EdmSimpleType.STRING);
builder.addProperties(pBuilder);
}
}
private EdmComplexType.Builder ComplexTypeにcomplex型Propertyを指定数作成(int count, String complexTypeName,
EdmComplexType.Builder builder) {
// ComplexTypeを新規に作成
EdmComplexType.Builder ctBuilder = EdmComplexType.newBuilder();
ctBuilder.setName(complexTypeName).setNamespace(NS);
// ComplexTypeに加えるべき プロパティを作成
List<EdmProperty.Builder> pBuilderList = new ArrayList<EdmProperty.Builder>();
for (int i = 0; i < count; i++) {
EdmProperty.Builder pBuilder = EdmProperty.newBuilder(String.format("%s_prop_%03d", complexTypeName, i))
.setType(ctBuilder);
pBuilderList.add(pBuilder);
// 予約語プロパティ用ダミー
pBuilder = EdmProperty.newBuilder(String.format("_reservedProp_%03d", i))
.setType(EdmSimpleType.STRING);
builder.addProperties(pBuilder);
}
builder.addProperties(pBuilderList);
return ctBuilder;
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
EntityTypeにsimple型Propertyを指定数作成(399, entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
EntityTypeにsimple型Propertyを指定数作成(400, entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でComplex型のProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
for (int i = 0; i < 19; i++) {
Builder cpBuilder = EntityTypeにcomplex型Propertyを1つ作成(String.format("complexType_%03d", i), entityType);
cpBuilderList.add(cpBuilder);
}
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("newComplexType");
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でComplex型のProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
for (int i = 0; i < 20; i++) {
Builder cpBuilder = EntityTypeにcomplex型Propertyを1つ作成(String.format("complexType_%03d", i), entityType);
cpBuilderList.add(cpBuilder);
}
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("newComplexType");
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でSimple型Property追加後_Simple型_Complex型合わせて_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
EntityTypeにsimple型Propertyを指定数作成(379, entityType);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
for (int i = 0; i < 20; i++) {
Builder cpBuilder = EntityTypeにcomplex型Propertyを1つ作成(String.format("complexType_%03d", i), entityType);
cpBuilderList.add(cpBuilder);
}
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("newComplexType");
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でSimple型Property追加後_Simple型_Complex型合わせて_制限値を超えた場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
EntityTypeにsimple型Propertyを指定数作成(380, entityType);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
for (int i = 0; i < 20; i++) {
Builder cpBuilder = EntityTypeにcomplex型Propertyを1つ作成(String.format("complexType_%03d", i), entityType);
cpBuilderList.add(cpBuilder);
}
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("newComplexType");
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でComplex型Property追加後_Simple型_Complex型合わせて_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
EntityTypeにsimple型Propertyを指定数作成(380, entityType);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
for (int i = 0; i < 19; i++) {
Builder cpBuilder = EntityTypeにcomplex型Propertyを1つ作成(String.format("complexType_%03d", i), entityType);
cpBuilderList.add(cpBuilder);
}
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("newComplexType");
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層1でComplex型Property追加後_Simple型_Complex型合わせて_制限値を超えた場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
EntityTypeにsimple型Propertyを指定数作成(380, entityType);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
for (int i = 0; i < 20; i++) {
Builder cpBuilder = EntityTypeにcomplex型Propertyを1つ作成(String.format("complexType_%03d", i), entityType);
cpBuilderList.add(cpBuilder);
}
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("newComplexType");
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", testENTITY);
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層2にProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(49, ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層2にProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
// 階層チェック時、ComplexTypeCheck時の2つ出力される。
assertEquals(2, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層2にComplex型のProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(4, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType2");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層2にComplex型のProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType2");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層3にProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(29, targetComplexTypeBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType2");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層3にProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(30, targetComplexTypeBuilder);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType2");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層3にComplex型のProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(29, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(1, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType3");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType2");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層3にComplex型のProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(29, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType3");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType2");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層4にProperty追加後_制限値以下となる場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(29, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
ComplexTypeにsimple型Propertyを指定数作成(9, targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType3");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層4にProperty追加後_制限値を超えた場合異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(29, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
ComplexTypeにsimple型Propertyを指定数作成(10, targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType3");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void 階層4にComplex型のProperty追加後_制限値を超えた場合異常を通知すること() {
// ★ 4階層目への ComplexType追加は定義上、エラーとなるべき。
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
cpBuilderList.add(ctBuilder);
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(29, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(1, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
// ここが4階層目
ComplexTypeにsimple型Propertyを指定数作成(10, targetComplexTypeBuilder2);
Builder targetComplexTypeBuilder3 = ComplexTypeにcomplex型Propertyを指定数作成(1, "newComplexType4",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder3);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "newComplexType4");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType3");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void Property追加後_全体プロパティ数と同数になった場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
cpBuilderList.add(ctBuilder);
EntityTypeにsimple型Propertyを指定数作成(83, entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(30, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
// ここが4階層目
ComplexTypeにsimple型Propertyを指定数作成(10, targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", "testEntity");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void Property追加後_全体プロパティ数を超えた異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
cpBuilderList.add(ctBuilder);
EntityTypeにsimple型Propertyを指定数作成(84, entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(30, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
// ここが4階層目
ComplexTypeにsimple型Propertyを指定数作成(10, targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new PropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_EntityType.Name_uniqueKey", "testEntity");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(EntityType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void ComplexTypeProperty追加後_全体プロパティ数最大値と一致する場合正常終了すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
cpBuilderList.add(ctBuilder);
EntityTypeにsimple型Propertyを指定数作成(84, entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(49, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(30, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
// ここが4階層目
ComplexTypeにsimple型Propertyを指定数作成(10, targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void ComplexTypeProperty追加後_全体プロパティ数を超えた異常を通知すること() {
String testENTITY = "testEntity";
org.odata4j.edm.EdmEntityType.Builder entityType = EntityTypeを作成(testENTITY);
List<EdmComplexType.Builder> cpBuilderList = new ArrayList<EdmComplexType.Builder>();
EdmComplexType.Builder ctBuilder = EntityTypeにcomplex型Propertyを1つ作成("newComplexType", entityType);
cpBuilderList.add(ctBuilder);
EntityTypeにsimple型Propertyを指定数作成(85, entityType);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
// ここが2階層目となる
ComplexTypeにsimple型Propertyを指定数作成(49, ctBuilder);
Builder targetComplexTypeBuilder = ComplexTypeにcomplex型Propertyを指定数作成(5, "newComplexType2", ctBuilder);
cpBuilderList.add(targetComplexTypeBuilder);
// ここが3階層目
ComplexTypeにsimple型Propertyを指定数作成(30, targetComplexTypeBuilder);
Builder targetComplexTypeBuilder2 = ComplexTypeにcomplex型Propertyを指定数作成(2, "newComplexType3",
targetComplexTypeBuilder);
cpBuilderList.add(targetComplexTypeBuilder2);
// ここが4階層目
ComplexTypeにsimple型Propertyを指定数作成(10, targetComplexTypeBuilder2);
EdmSchema.Builder schema = EdmSchema.newBuilder().addEntityTypes(entityType).setNamespace(NS)
.addComplexTypes(cpBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "newComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void EntityTypeに関連付けられていないComplexTypeにProperty追加後_制限値_50_と同数になる場合正常終了すること() {
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("testComplexType");
ComplexTypeにsimple型Propertyを指定数作成(49, ctBuilder);
List<EdmComplexType.Builder> ctBuilderList = new ArrayList<EdmComplexType.Builder>();
ctBuilderList.add(ctBuilder);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
EdmSchema.Builder schema = EdmSchema.newBuilder().setNamespace(NS).addComplexTypes(ctBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "testComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(0, errors.size());
}
/**
* .
*/
@SuppressWarnings("unchecked")
@Test
public void EntityTypeに関連付けられていないComplexTypeにProperty追加後_制限値_50_を超えたという異常を通知すること() {
EdmComplexType.Builder ctBuilder = ComplexTypeを作成("testComplexType");
ComplexTypeにsimple型Propertyを指定数作成(50, ctBuilder);
List<EdmComplexType.Builder> ctBuilderList = new ArrayList<EdmComplexType.Builder>();
ctBuilderList.add(ctBuilder);
EdmDataServices.Builder builder = EdmDataServices.newBuilder();
EdmSchema.Builder schema = EdmSchema.newBuilder().setNamespace(NS).addComplexTypes(ctBuilderList);
EdmDataServices metadata = builder.addSchemas(schema).build();
PropertyDocHandler handler = new ComplexTypePropertyDocHandler();
JSONObject staticFields = new JSONObject();
staticFields.put("Type", "Edm.String");
handler.setStaticFields(staticFields);
Map<String, String> entityTypeMap = new HashMap<String, String>();
entityTypeMap.put("_ComplexType.Name_uniqueKey", "testComplexType");
handler.setEntityTypeMap(entityTypeMap);
handler.setEntityTypeId("_uniqueKey");
Map<String, Object> manyToOneKindMap = new HashMap<String, Object>();
manyToOneKindMap.put(ComplexType.EDM_TYPE_NAME, "_uniqueKey");
handler.setManyToOnelinkId(manyToOneKindMap);
PropertyLimitChecker checker = new PropertyLimitChecker(metadata, handler);
List<CheckError> errors = checker.checkPropertyLimits();
assertEquals(1, errors.size());
}
}