| /* |
| * 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 org.apache.hugegraph.backend.serializer; |
| |
| import org.apache.hugegraph.HugeGraph; |
| import org.apache.hugegraph.backend.id.Id; |
| import org.apache.hugegraph.backend.id.IdGenerator; |
| import org.apache.hugegraph.backend.store.BackendEntry; |
| import org.apache.hugegraph.backend.store.BackendEntry.BackendColumn; |
| import org.apache.hugegraph.config.HugeConfig; |
| import org.apache.hugegraph.schema.VertexLabel; |
| import org.apache.hugegraph.structure.HugeProperty; |
| import org.apache.hugegraph.structure.HugeVertex; |
| import org.apache.hugegraph.structure.HugeVertexProperty; |
| import org.apache.hugegraph.type.define.HugeKeys; |
| |
| public class BinaryScatterSerializer extends BinarySerializer { |
| |
| public BinaryScatterSerializer(HugeConfig config) { |
| super(true, true, false); |
| } |
| |
| @Override |
| public BackendEntry writeVertex(HugeVertex vertex) { |
| BinaryBackendEntry entry = newBackendEntry(vertex); |
| |
| if (vertex.removed()) { |
| return entry; |
| } |
| |
| // Write vertex label |
| entry.column(this.formatLabel(vertex)); |
| |
| // Write all properties of a Vertex |
| for (HugeProperty<?> prop : vertex.getProperties()) { |
| entry.column(this.formatProperty(prop)); |
| } |
| |
| return entry; |
| } |
| |
| @Override |
| public HugeVertex readVertex(HugeGraph graph, BackendEntry bytesEntry) { |
| if (bytesEntry == null) { |
| return null; |
| } |
| BinaryBackendEntry entry = this.convertEntry(bytesEntry); |
| |
| // Parse label |
| final byte[] VL = this.formatSyspropName(entry.id(), HugeKeys.LABEL); |
| BackendColumn vl = entry.column(VL); |
| VertexLabel vertexLabel = VertexLabel.NONE; |
| if (vl != null) { |
| Id labelId = BytesBuffer.wrap(vl.value).readId(); |
| vertexLabel = graph.vertexLabelOrNone(labelId); |
| } |
| |
| // Parse id |
| Id id = entry.id().origin(); |
| HugeVertex vertex = new HugeVertex(graph, id, vertexLabel); |
| |
| // Parse all properties and edges of a Vertex |
| for (BackendColumn col : entry.columns()) { |
| this.parseColumn(col, vertex); |
| } |
| |
| return vertex; |
| } |
| |
| @Override |
| public BackendEntry writeVertexProperty(HugeVertexProperty<?> prop) { |
| BinaryBackendEntry entry = newBackendEntry(prop.element()); |
| entry.column(this.formatProperty(prop)); |
| entry.subId(IdGenerator.of(prop.key())); |
| return entry; |
| } |
| } |