/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.aliyun.odps.graph;
import java.util.List;
import com.aliyun.odps.io.Writable;
import com.aliyun.odps.io.WritableComparable;
/**
* VertexChanges 表示图拓扑的变动信息,如增加/删除点或者边.
*
* <p>
* 在图载入和迭代计算过程中,用户可以调用 {@link MutationContext}
* 接口对图进行修改,例如增加、删除点或者边,框架会将这些图拓扑变动请求按相关的点 (这里“相关的点”指待增加/删除点的 ID,待增加/删除边的起始点的
* ID)进行归类,封装成 VertexChanges 对象,所以,VertexChanges 可以理解为与某个“Vertex
* ID”相关的图拓扑结构变动请求信息。
* </p>
*
* <p>
* 框架要求提供 {@link VertexResolver} 实现用于对 VertexChanges 进行处理,具体如何处理
* VertexChanges,详见 {@link VertexResolver},这里只对 VertexChanges 的内容进行说明。
* </p>
*
* @param <I>
* Vertex ID 类型
* @param <V>
* Vertex Value 类型
* @param <E>
* Edge Value 类型
* @param <M>
* Message 类型
* @see VertexResolver
* @see MutationContext
*/
@SuppressWarnings("rawtypes")
public interface VertexChanges<I extends WritableComparable, V extends Writable, E extends Writable, M extends Writable> {
/**
* 请求添加的点列表,这些点具有相同的标识.
*
* <p>
* 在图加载过程中或者上一轮迭代中,用户可以调用
* {@linkplain MutationContext#addVertexRequest(Vertex) addVertexRequest}
* 方法请求添加点,一个或多个相同 ID 的点会组成一个列表放到与该 ID 相关的 {@link VertexChanges}
* 里,特殊地,如果只有一个点,那么列表中只包含一个点。
* </p>
*
* @return 一个或多个相同 ID 的点组成的列表
* @see MutationContext#addVertexRequest(Vertex)
*/
public List<Vertex<I, V, E, M>> getAddedVertexList();
/**
* 请求删除该点的次数.
*
* <p>
* 在图加载过程中或者上一轮迭代中,用户可以调用
* {@linkplain MutationContext#removeVertexRequest(WritableComparable)
* removeVertexRequest} 方法请求删除点,本方法返回请求删除点的次数。
* </p>
*
* @return 请求删除该点的次数
*/
public int getRemovedVertexCount();
/**
* 请求添加的边列表,这些边具有相同的起始点.
*
* <p>
* 在图加载过程中或者上一轮迭代中,用户可以调用
* {@linkplain MutationContext#addEdgeRequest(WritableComparable, Edge)
* addEdgeRequest} 方法添加边,相同起始点的边会组成一个列表放到与该起始点 ID 相关的 {@link VertexChanges} 里。
* </p>
*
* @return 请求添加的相同起始点的边列表
*/
public List<Edge<I, E>> getAddedEdgeList();
/**
* 请求删除的边列表.
*
* <p>
* 在图加载过程中或者上一轮迭代中,用户可以调用
* {@linkplain MutationContext#removeEdgeRequest(WritableComparable, WritableComparable)
* removeEdgeRequest} 方法请求删除边,相同起始点的边会组成一个列表放到与该起始点 ID 相关的
* {@link VertexChanges} 里,本方法返回这些待删除边的终点组成的列表。
* </p>
*
* @return 请求删除的边列表
*/
public List<I> getRemovedEdgeList();
}