001package de.deepamehta.plugins.topicmaps.model;
002
003import de.deepamehta.plugins.topicmaps.model.ViewProperties;
004import de.deepamehta.core.model.TopicModel;
005
006import org.codehaus.jettison.json.JSONObject;
007
008
009
010/**
011 * A topic viewmodel as contained in a topicmap viewmodel.
012 * <p>
013 * That is a generic topic model enriched by view properties. Standard view properties are "dm4.topicmaps.x",
014 * "dm4.topicmaps.y", and "dm4.topicmaps.visibility". Additional view properties can be added by plugins (by
015 * implementing a Viewmodel Customizer).
016 */
017public class TopicViewmodel extends TopicModel {
018
019    // --- Instance Variables ---
020
021    private ViewProperties viewProps;
022
023    // --- Constructors ---
024
025    public TopicViewmodel(TopicModel topic, ViewProperties viewProps) {
026        super(topic);
027        this.viewProps = viewProps;
028    }
029
030    // --- Public Methods ---
031
032    public ViewProperties getViewProperties() {
033        return viewProps;
034    }
035
036    // ---
037
038    /**
039     * Convencience method to access the "dm4.topicmaps.x" standard view property.
040     */
041    public int getX() {
042        return viewProps.getInt("dm4.topicmaps.x");
043    }
044
045    /**
046     * Convencience method to access the "dm4.topicmaps.y" standard view property.
047     */
048    public int getY() {
049        return viewProps.getInt("dm4.topicmaps.y");
050    }
051
052    /**
053     * Convencience method to access the "dm4.topicmaps.visibility" standard view property.
054     */
055    public boolean getVisibility() {
056        return viewProps.getBoolean("dm4.topicmaps.visibility");
057    }
058
059    // ---
060
061    @Override
062    public JSONObject toJSON() {
063        try {
064            JSONObject o = super.toJSON();
065            o.put("view_props", viewProps);
066            return o;
067        } catch (Exception e) {
068            throw new RuntimeException("Serialization failed (" + this + ")", e);
069        }
070    }
071}