class VertexLabel extends SchemaLabel {

    public static final VertexLabel NONE = new VertexLabel(null, NONE_ID, UNDEF);

    // OLAP_VL_ID means all of vertex label ids
    private static final Id OLAP_VL_ID = IdGenerator.of(SchemaLabel.OLAP_VL_ID);
    // OLAP_VL_NAME means all of vertex label names
    private static final String OLAP_VL_NAME = "*olap";
    // OLAP_VL means all of vertex labels
    public static final VertexLabel OLAP_VL = new VertexLabel(null, OLAP_VL_ID,
                                                              OLAP_VL_NAME);

    private IdStrategy idStrategy;
    private List<Id> primaryKeys;

    public VertexLabel(final HugeGraph graph, Id id, String name) {
        super(graph, id, name);
        this.idStrategy = IdStrategy.DEFAULT;
        this.primaryKeys = new ArrayList<>();
    }

    @Override
    public HugeType type() {
        return HugeType.VERTEX_LABEL;
    }

    public boolean olap() {
        return VertexLabel.OLAP_VL.id().equals(this.id());
    }

    public IdStrategy idStrategy() {
        return this.idStrategy;
    }

    public void idStrategy(IdStrategy idStrategy) {
        this.idStrategy = idStrategy;
    }

    public List<Id> primaryKeys() {
        return Collections.unmodifiableList(this.primaryKeys);
    }

    public void primaryKey(Id id) {
        this.primaryKeys.add(id);
    }

    public void primaryKeys(Id... ids) {
        this.primaryKeys.addAll(Arrays.asList(ids));
    }

    public boolean existsLinkLabel() {
        return this.graph().existsLinkLabel(this.id());
    }

    public boolean hasSameContent(VertexLabel other) {<FILL_FUNCTION_BODY>}

    public static VertexLabel undefined(HugeGraph graph) {
        return new VertexLabel(graph, NONE_ID, UNDEF);
    }

    public static VertexLabel undefined(HugeGraph graph, Id id) {
        return new VertexLabel(graph, id, UNDEF);
    }

    public interface Builder extends SchemaBuilder<VertexLabel> {

        Id rebuildIndex();

        Builder idStrategy(IdStrategy idStrategy);

        Builder useAutomaticId();

        Builder usePrimaryKeyId();

        Builder useCustomizeStringId();

        Builder useCustomizeNumberId();

        Builder useCustomizeUuidId();

        Builder properties(String... properties);

        Builder primaryKeys(String... keys);

        Builder nullableKeys(String... keys);

        Builder ttl(long ttl);

        Builder ttlStartTime(String ttlStartTime);

        Builder enableLabelIndex(boolean enable);

        Builder userdata(String key, Object value);

        Builder userdata(Map<String, Object> userdata);
    }
}

        return super.hasSameContent(other) &&
               this.idStrategy == other.idStrategy &&
               Objects.equal(this.graph.mapPkId2Name(this.primaryKeys),
                             other.graph.mapPkId2Name(other.primaryKeys));
    
<methods>public void <init>(org.apache.hugegraph.HugeGraph, org.apache.hugegraph.backend.id.Id, java.lang.String) ,public void addIndexLabel(org.apache.hugegraph.backend.id.Id) ,public transient void addIndexLabels(org.apache.hugegraph.backend.id.Id[]) ,public boolean enableLabelIndex() ,public void enableLabelIndex(boolean) ,public boolean existsIndexLabel() ,public static org.apache.hugegraph.backend.id.Id getEdgeLabelId(org.apache.hugegraph.HugeGraph, java.lang.Object) ,public static org.apache.hugegraph.backend.id.Id getLabelId(org.apache.hugegraph.HugeGraph, org.apache.hugegraph.type.HugeType, java.lang.Object) ,public static org.apache.hugegraph.backend.id.Id getVertexLabelId(org.apache.hugegraph.HugeGraph, java.lang.Object) ,public boolean hasSameContent(org.apache.hugegraph.schema.SchemaLabel) ,public Set<org.apache.hugegraph.backend.id.Id> indexLabels() ,public void nullableKey(org.apache.hugegraph.backend.id.Id) ,public Set<org.apache.hugegraph.backend.id.Id> nullableKeys() ,public transient void nullableKeys(org.apache.hugegraph.backend.id.Id[]) ,public void nullableKeys(Set<org.apache.hugegraph.backend.id.Id>) ,public Set<org.apache.hugegraph.backend.id.Id> properties() ,public void properties(Set<org.apache.hugegraph.backend.id.Id>) ,public transient org.apache.hugegraph.schema.SchemaLabel properties(org.apache.hugegraph.backend.id.Id[]) ,public void property(org.apache.hugegraph.backend.id.Id) ,public void removeIndexLabel(org.apache.hugegraph.backend.id.Id) ,public void ttl(long) ,public long ttl() ,public void ttlStartTime(org.apache.hugegraph.backend.id.Id) ,public org.apache.hugegraph.backend.id.Id ttlStartTime() ,public java.lang.String ttlStartTimeName() ,public boolean undefined() <variables>private boolean enableLabelIndex,private final non-sealed Set<org.apache.hugegraph.backend.id.Id> indexLabels,private final non-sealed Set<org.apache.hugegraph.backend.id.Id> nullableKeys,private final non-sealed Set<org.apache.hugegraph.backend.id.Id> properties,private long ttl,private org.apache.hugegraph.backend.id.Id ttlStartTime