blob: e6d6a940888f034bc088f5c39abebba0a95433e0 [file] [log] [blame]
/*
* 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.io;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.hugegraph.HugeGraph;
import org.apache.hugegraph.schema.EdgeLabel;
import org.apache.hugegraph.schema.IndexLabel;
import org.apache.hugegraph.schema.PropertyKey;
import org.apache.hugegraph.schema.VertexLabel;
import org.apache.hugegraph.type.HugeType;
import org.apache.hugegraph.type.define.HugeKeys;
public class GraphSONSchemaSerializer {
public Map<HugeKeys, Object> writeVertexLabel(VertexLabel vertexLabel) {
HugeGraph graph = vertexLabel.graph();
assert graph != null;
Map<HugeKeys, Object> map = new LinkedHashMap<>();
map.put(HugeKeys.ID, vertexLabel.id().asLong());
map.put(HugeKeys.NAME, vertexLabel.name());
map.put(HugeKeys.ID_STRATEGY, vertexLabel.idStrategy());
map.put(HugeKeys.PRIMARY_KEYS,
graph.mapPkId2Name(vertexLabel.primaryKeys()));
map.put(HugeKeys.NULLABLE_KEYS,
graph.mapPkId2Name(vertexLabel.nullableKeys()));
map.put(HugeKeys.INDEX_LABELS,
graph.mapIlId2Name(vertexLabel.indexLabels()));
map.put(HugeKeys.PROPERTIES,
graph.mapPkId2Name(vertexLabel.properties()));
map.put(HugeKeys.STATUS, vertexLabel.status());
map.put(HugeKeys.TTL, vertexLabel.ttl());
String ttlStartTimeName = vertexLabel.ttlStartTimeName();
if (ttlStartTimeName != null) {
map.put(HugeKeys.TTL_START_TIME, ttlStartTimeName);
}
map.put(HugeKeys.ENABLE_LABEL_INDEX, vertexLabel.enableLabelIndex());
map.put(HugeKeys.USER_DATA, vertexLabel.userdata());
return map;
}
public Map<HugeKeys, Object> writeEdgeLabel(EdgeLabel edgeLabel) {
HugeGraph graph = edgeLabel.graph();
assert graph != null;
Map<HugeKeys, Object> map = new LinkedHashMap<>();
map.put(HugeKeys.ID, edgeLabel.id().asLong());
map.put(HugeKeys.NAME, edgeLabel.name());
map.put(HugeKeys.SOURCE_LABEL, edgeLabel.sourceLabelName());
map.put(HugeKeys.TARGET_LABEL, edgeLabel.targetLabelName());
map.put(HugeKeys.FREQUENCY, edgeLabel.frequency());
map.put(HugeKeys.SORT_KEYS,
graph.mapPkId2Name(edgeLabel.sortKeys()));
map.put(HugeKeys.NULLABLE_KEYS,
graph.mapPkId2Name(edgeLabel.nullableKeys()));
map.put(HugeKeys.INDEX_LABELS,
graph.mapIlId2Name(edgeLabel.indexLabels()));
map.put(HugeKeys.PROPERTIES,
graph.mapPkId2Name(edgeLabel.properties()));
map.put(HugeKeys.STATUS, edgeLabel.status());
map.put(HugeKeys.TTL, edgeLabel.ttl());
String ttlStartTimeName = edgeLabel.ttlStartTimeName();
if (ttlStartTimeName != null) {
map.put(HugeKeys.TTL_START_TIME, ttlStartTimeName);
}
map.put(HugeKeys.ENABLE_LABEL_INDEX, edgeLabel.enableLabelIndex());
map.put(HugeKeys.USER_DATA, edgeLabel.userdata());
return map;
}
public Map<HugeKeys, Object> writePropertyKey(PropertyKey propertyKey) {
HugeGraph graph = propertyKey.graph();
assert graph != null;
Map<HugeKeys, Object> map = new LinkedHashMap<>();
map.put(HugeKeys.ID, propertyKey.id().asLong());
map.put(HugeKeys.NAME, propertyKey.name());
map.put(HugeKeys.DATA_TYPE, propertyKey.dataType());
map.put(HugeKeys.CARDINALITY, propertyKey.cardinality());
map.put(HugeKeys.AGGREGATE_TYPE, propertyKey.aggregateType());
map.put(HugeKeys.WRITE_TYPE, propertyKey.writeType());
map.put(HugeKeys.PROPERTIES,
graph.mapPkId2Name(propertyKey.properties()));
map.put(HugeKeys.STATUS, propertyKey.status());
map.put(HugeKeys.USER_DATA, propertyKey.userdata());
return map;
}
public Map<HugeKeys, Object> writeIndexLabel(IndexLabel indexLabel) {
HugeGraph graph = indexLabel.graph();
assert graph != null;
Map<HugeKeys, Object> map = new LinkedHashMap<>();
map.put(HugeKeys.ID, indexLabel.id().asLong());
map.put(HugeKeys.NAME, indexLabel.name());
map.put(HugeKeys.BASE_TYPE, indexLabel.baseType());
if (indexLabel.baseType() == HugeType.VERTEX_LABEL) {
map.put(HugeKeys.BASE_VALUE,
graph.vertexLabel(indexLabel.baseValue()).name());
} else {
assert indexLabel.baseType() == HugeType.EDGE_LABEL;
map.put(HugeKeys.BASE_VALUE,
graph.edgeLabel(indexLabel.baseValue()).name());
}
map.put(HugeKeys.INDEX_TYPE, indexLabel.indexType());
map.put(HugeKeys.FIELDS, graph.mapPkId2Name(indexLabel.indexFields()));
map.put(HugeKeys.STATUS, indexLabel.status());
map.put(HugeKeys.USER_DATA, indexLabel.userdata());
return map;
}
}