001/*
002 * SPDX-License-Identifier: Apache-2.0
003 *
004 * Copyright 2025-2026 The Enola <https://enola.dev> Authors
005 *
006 * Licensed under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 *     https://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package dev.enola.model.enola.bookmark;
019
020import com.google.errorprone.annotations.CanIgnoreReturnValue;
021
022import dev.enola.model.enola.HasDescription;
023import dev.enola.model.enola.Tag;
024import dev.enola.model.w3.rdfs.HasLabel;
025import dev.enola.thing.Thing;
026import dev.enola.thing.java.HasType;
027
028import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
029
030import java.util.List;
031
032public interface Bookmark extends HasType, HasLabel, HasDescription {
033
034    // TODO Are default implementations of these interface methods still require now?!
035
036    // TODO WebPage? URI?
037    String url();
038
039    List<Tag> tags();
040
041    // TODO Subject instead of void
042    void by(); // owner
043
044    @SuppressFBWarnings("NM_SAME_SIMPLE_NAME_AS_INTERFACE")
045    interface Builder<B extends Bookmark> // skipcq: JAVA-E0169
046            extends HasType.Builder<B>,
047                    HasLabel.Builder<B>,
048                    HasDescription.Builder<B>,
049                    Thing.Builder<B> {
050
051        @Override
052        @CanIgnoreReturnValue
053        Builder<B> iri(String iri);
054
055        Builder<B> url(String url);
056
057        Builder<B> tags(List<Tag> tags);
058
059        Builder<B> by(String owner);
060    }
061}