GenericEntity.java 2.38 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.model;

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonValue;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;

import fi.codecrew.moya.utilities.jpa.EntityEquals;
import fi.codecrew.moya.utilities.jpa.ModelInterface;

@MappedSuperclass
public class GenericEntity extends EntityEquals implements ModelInterface, EntityMeta {

	private static final long serialVersionUID = -9041737052951021560L;
	public static final String ID_COLUMN = "id";

	@Id
	@Column(name = ID_COLUMN, nullable = false, updatable = false)
	private Integer id;

	@Column(name = "meta", columnDefinition = "json")
	private JsonObject meta;

	@Override
	public final Integer getId() {
		return id;
	}

	@Override
	public final void setId(Integer id) {
		this.id = id;
	}

	@Override
	public JsonObject getMeta() {
		return meta;
	}

	@Override
	public void setMeta(JsonObject meta) {
		this.meta = meta;
	}

	@Transient
	public String getMetaStringValue(String key) {
		try {
			return getMeta().getString(key);
		} catch (NullPointerException e) {
			// this is normal if key is not found etc.
			return "";
		}
	}

	@Transient
	public void setMetaStringValue(String key, String value) {

		JsonObjectBuilder metaBuilder = Json.createObjectBuilder();

		if (getMeta() != null) {
			for (String valKey : getMeta().keySet()) {
				if (!valKey.equals(key)) {
					metaBuilder.add(valKey, getMeta().get(valKey));
				}
			}
		}

		metaBuilder.add(key, value);

		setMeta(metaBuilder.build());
	}

	@Transient
	protected Integer getNonNullId()
	{
		if (getId() != null) {
			return getId();
		}
		return getRndid();
	}

}