本文整理汇总了Java中org.odata4j.edm.EdmNavigationProperty.getRelationship方法的典型用法代码示例。如果您正苦于以下问题:Java EdmNavigationProperty.getRelationship方法的具体用法?Java EdmNavigationProperty.getRelationship怎么用?Java EdmNavigationProperty.getRelationship使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.odata4j.edm.EdmNavigationProperty
的用法示例。
在下文中一共展示了EdmNavigationProperty.getRelationship方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: setNavigationPropertyLinkType
import org.odata4j.edm.EdmNavigationProperty; //导入方法依赖的package包/类
/**
* 一括登録用のコンテキストにリンクタイプをセットする.
* @param navigationPropertyContext 一括登録のコンテキスト
*/
private void setNavigationPropertyLinkType(
NavigationPropertyBulkContext navigationPropertyContext) {
OEntityId sourceOEntity = navigationPropertyContext.getSrcEntityId();
String srcSetName = sourceOEntity.getEntitySetName();
String targetNavProp = navigationPropertyContext.getTgtNavProp();
EdmNavigationProperty srcNavProp = getEdmNavigationProperty(srcSetName, targetNavProp);
EdmAssociation assoc = srcNavProp.getRelationship();
EdmMultiplicity multiplicity1 = assoc.getEnd1().getMultiplicity();
EdmMultiplicity multiplicity2 = assoc.getEnd2().getMultiplicity();
if (multiplicity1 == EdmMultiplicity.MANY && multiplicity2 == EdmMultiplicity.MANY) {
navigationPropertyContext.setLinkType(NavigationPropertyLinkType.manyToMany);
} else if ((multiplicity1 == EdmMultiplicity.ONE || multiplicity1 == EdmMultiplicity.ZERO_TO_ONE)
&& (multiplicity2 == EdmMultiplicity.ONE || multiplicity2 == EdmMultiplicity.ZERO_TO_ONE)) {
navigationPropertyContext.setLinkType(NavigationPropertyLinkType.oneToOne);
} else {
String multiplicityOneEntitySetName = getOneAssociationEnd(assoc).getType().getName();
if (sourceOEntity.getEntitySetName().equals(multiplicityOneEntitySetName)) {
navigationPropertyContext.setLinkType(NavigationPropertyLinkType.oneToMany);
} else {
navigationPropertyContext.setLinkType(NavigationPropertyLinkType.manyToOne);
}
}
}
示例2: createLink
import org.odata4j.edm.EdmNavigationProperty; //导入方法依赖的package包/类
/**
* Creates a link between two entities.
* @param sourceEntity an entity with at least one navigation property
* @param targetNavProp the navigation property
* @param targetEntity the link target entity
* @see <a href="http://www.odata.org/developers/protocols/operations#CreatingLinksbetweenEntries">[odata.org]
* Creating Links between Entries</a>
*/
@Override
public final void createLink(OEntityId sourceEntity, String targetNavProp, OEntityId targetEntity) {
String srcSetName = sourceEntity.getEntitySetName();
EdmNavigationProperty srcNavProp = getEdmNavigationProperty(srcSetName, targetNavProp);
if (srcNavProp == null) {
throw PersoniumCoreException.OData.NO_SUCH_ASSOCIATION;
}
// n:1かn:nの切り分けを行う
EdmAssociation assoc = srcNavProp.getRelationship();
// ユニーク性チェックのためまずロックを行う
// OData 空間全体をlockする(将来的に必要があればentitySetNameでロック)
Lock lock = this.lock();
try {
EntitySetDocHandler src = this.retrieveWithKey(sourceEntity);
// データが存在しない場合は404
if (src == null) {
throw PersoniumCoreException.OData.NOT_FOUND;
}
EntitySetDocHandler tgt = this.retrieveWithKey(targetEntity);
// ターゲットが存在しない場合は400
if (tgt == null) {
throw PersoniumCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("uri");
}
createLinks(sourceEntity, srcNavProp, assoc, src, tgt);
} finally {
log.debug("unlock");
lock.release();
}
}
示例3: checkExistsLink
import org.odata4j.edm.EdmNavigationProperty; //导入方法依赖的package包/类
private void checkExistsLink(OEntityId sourceOEntity,
EdmNavigationProperty srcNavProp,
EntitySetDocHandler sourceDocHandler,
OEntity targetrEntity) {
// n:1かn:nの切り分けを行う
EdmAssociation assoc = srcNavProp.getRelationship();
EdmMultiplicity multiplicity1 = assoc.getEnd1().getMultiplicity();
EdmMultiplicity multiplicity2 = assoc.getEnd2().getMultiplicity();
if ((multiplicity1 == EdmMultiplicity.ONE || multiplicity1 == EdmMultiplicity.ZERO_TO_ONE)
&& (multiplicity2 == EdmMultiplicity.ONE || multiplicity2 == EdmMultiplicity.ZERO_TO_ONE)) {
// 1:1/0..1:1/1:0..1/0..1:0..1 の場合
checkExistsLinkForOnetoOne(sourceDocHandler, null, srcNavProp);
} else if (!(multiplicity1 == EdmMultiplicity.MANY && multiplicity2 == EdmMultiplicity.MANY)) {
String multiplicityOneEntitySetName = getOneAssociationEnd(assoc).getType().getName();
String toEntitySetName = srcNavProp.getToRole().getType().getName();
EntitySetDocHandler targetDocHandler = new OEntityDocHandler();
// 別Typeに同じ名前の要素がある場合を考慮して、Typeを検索条件に追加
targetDocHandler.setType(toEntitySetName);
if (sourceOEntity.getEntitySetName().equals(multiplicityOneEntitySetName)) {
// 1:Nの場合
// ユーザODataの場合は、Nameプロパティが存在しない、かつ、リンク登録後に同一データが存在するかの一意性チェックは行わないため、Nameプロパティはセットしない
if (!(this instanceof UserDataODataProducer)) {
Map<String, Object> staticFields = new HashMap<String, Object>();
if (ExtRole.EDM_TYPE_NAME.equals(toEntitySetName)) {
// ExtRoleはNameプロパティを持たないため、"ExtRole"で区別する
staticFields.put(ExtRole.EDM_TYPE_NAME,
targetrEntity.getProperty(ExtRole.EDM_TYPE_NAME).getValue());
} else if (ReceivedMessage.EDM_TYPE_NAME.equals(toEntitySetName)
|| SentMessage.EDM_TYPE_NAME.equals(toEntitySetName)) {
staticFields.put("__id", targetrEntity.getProperty("__id").getValue());
} else {
staticFields.put("Name", targetrEntity.getProperty("Name").getValue());
}
targetDocHandler.setStaticFields(staticFields);
}
checkExistsLinksForOneToN(sourceOEntity, sourceDocHandler, targetDocHandler,
multiplicityOneEntitySetName, toEntitySetName);
} else {
// N:1の場合
checkExistsLinksForNtoOne(sourceDocHandler, toEntitySetName);
}
}
}
示例4: deleteLink
import org.odata4j.edm.EdmNavigationProperty; //导入方法依赖的package包/类
/**
* Deletes an existing link between two entities.
* @param sourceEntityId an entity with at least one navigation property
* @param targetNavProp the navigation property
* @param targetEntityKey if the navigation property represents a set, the key identifying the target entity within
* the set, else n/a
*/
@Override
public final void deleteLink(final OEntityId sourceEntityId,
final String targetNavProp,
final OEntityKey targetEntityKey) {
String srcSetName = sourceEntityId.getEntitySetName();
// スキーマチェック
// srcTypeからtgtTypeへN:N Assocが定義されているか調べる
EdmEntitySet srcSet = this.getMetadata().findEdmEntitySet(srcSetName);
EdmEntityType srcType = srcSet.getType();
EdmNavigationProperty navProp = srcType.findNavigationProperty(targetNavProp);
if (navProp == null) {
// TODO 本来はリクエストされたリソースが存在しないことになるため404エラーを返却すべき
throw PersoniumCoreException.OData.NO_SUCH_ASSOCIATION;
}
EdmEntitySet tgtSet = this.getMetadata().findEdmEntitySet(navProp.getToRole().getType().getName());
// n:1かn:nの切り分けを行う
EdmAssociation assoc = navProp.getRelationship();
// OData 空間全体をlockする
Lock lock = this.lock();
try {
if (assoc.getEnd1().getMultiplicity() == EdmMultiplicity.MANY
&& assoc.getEnd2().getMultiplicity() == EdmMultiplicity.MANY) {
// n:nの場合
deleteLinks(sourceEntityId, targetEntityKey, tgtSet);
} else if (assoc.getEnd1().getMultiplicity() != EdmMultiplicity.MANY
&& assoc.getEnd2().getMultiplicity() != EdmMultiplicity.MANY) {
// [0..1:0..1] or [0..1:1] or [1:0..1] or [1:1]の場合は相互リンクのため、両方のデータからリンク情報を削除する
// リンク先・リンク元のデータを取得する
EntitySetDocHandler source = this.retrieveWithKey(sourceEntityId);
EntitySetDocHandler target = this.retrieveWithKey(tgtSet, targetEntityKey);
// 該当データが存在しない場合は404
if (source == null || target == null) {
throw PersoniumCoreException.OData.NOT_FOUND;
}
// 取得したデータ同士の関連付けをチェックし、関連付いていないリンクを削除しようとした場合は400を返却する
isExistsLinks(source, target, tgtSet);
isExistsLinks(target, source, srcSet);
// Aliasをプロパティ名に変換する
source.convertAliasToName(getMetadata());
target.convertAliasToName(getMetadata());
// 両方のリンクを削除
String sourceEntitySetName = srcSet.getName();
String targetEntitySetName = tgtSet.getName();
linkUpdate(source, sourceEntitySetName, targetEntitySetName);
linkUpdate(target, targetEntitySetName, sourceEntitySetName);
} else {
// n:1の1のEdmAssociationEndを取得する
EdmAssociationEnd oneAssoc = getOneAssociationEnd(assoc);
// n:1の場合、1のデータのリンク情報から該当する項目を削除する
deleteLinks(sourceEntityId, targetEntityKey, tgtSet, oneAssoc);
}
} finally {
log.debug("unlock");
lock.release();
}
}