Skip to content

Example

Artemy edited this page Dec 13, 2021 · 1 revision

This example will show how to serialize a java object in sc-memory.

First, we need to create a class. This will be a User class with fields to store the name and password.

public record User(String username, String password) {}

Now let's create a user, then save it to the database, and read from the database

public class Main {

    public static void main(String[] args) throws Exception {
        User user = new User("Test", "1111");
        ScMemory memory = new SyncOstisScMemory(new URI("ws://localhost:8090/ws_json"));
        DefaultScContext context = new DefaultScContext(memory);
        memory.open();
        saveAndLoadUser(user, context);
        memory.close();
    }

    public static void saveAndLoadUser(User userEntity, DefaultScContext context) throws ScMemoryException {

        // Saving
        System.err.println("StartValue = " + userEntity);
        ScNode user = context.createNode(NodeType.NODE);
        ScLinkString userName = context.createStringLink(LinkType.LINK, userEntity.username());
        ScLinkString userPass = context.createStringLink(LinkType.LINK, userEntity.password());
        ScEdge fromUserToName = context.createEdge(EdgeType.ACCESS, user, userName);
        ScEdge fromUserToPass = context.createEdge(EdgeType.ACCESS, user, userPass);

        ScNode usernameRelation = context.createNode(NodeType.NODE);
        ScNode userPassRelation = context.createNode(NodeType.NODE);
        ScEdge usernameRelationEdge = context.createEdge(EdgeType.ACCESS, usernameRelation, fromUserToName);
        ScEdge userPassRelationEdge = context.createEdge(EdgeType.ACCESS, userPassRelation, fromUserToPass);

        //--------------------------------------------------

        // Loading
        var x = context.findAllConstructionsNodeEdgeLinkWithRelation(user, EdgeType.ACCESS, LinkType.LINK, LinkContentType.STRING, usernameRelation, EdgeType.ACCESS);
        String resultUsername = ((ScLinkString)x.findFirst().get().getTarget()).getContent();
        var y = context.findAllConstructionsNodeEdgeLinkWithRelation(user, EdgeType.ACCESS, LinkType.LINK, LinkContentType.STRING, userPassRelation, EdgeType.ACCESS);
        String resultPass = ((ScLinkString)y.findFirst().get().getTarget()).getContent();
        User resultUser = new User(resultUsername, resultPass);

        System.err.println("EndValue = " + resultUser);
    }
}
Clone this wiki locally