/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.model;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedSet;
import java.util.Collection;
import java.util.Map;
import java.util.SortedSet;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import org.dlect.events.EventID;
import org.dlect.model.helper.XmlListenable;
@XmlRootElement(name = "dlect")
@XmlAccessorType(XmlAccessType.FIELD)
public class Database extends XmlListenable<Database> {
@XmlElementWrapper(name = "semesters")
@XmlElement(name = "semester")
private final SortedSet<Semester> semesters;
@XmlElementWrapper(name = "settings")
@XmlElement(name = "setting")
private final Map<String, String> settings;
public Database() {
this.semesters = newWrappedListenableSortedSet(DatabaseEventID.SEMESTER);
this.settings = newWrappedMap(DatabaseEventID.SETTING);
}
public ImmutableSortedSet<Semester> getSemesters() {
return copyOf(semesters);
}
public void setSemesters(Collection<Semester> semesters) {
setSet(this.semesters, semesters);
}
public void addSemester(Semester s) {
this.semesters.add(s);
}
public void removeSemester(Semester s) {
this.semesters.remove(s);
}
public ImmutableMap<String, String> getSettings() {
return copyOf(settings);
}
public void addSetting(String key, String value) {
this.settings.put(key, value);
}
public String removeSetting(String key) {
return this.settings.remove(key);
}
public String getSetting(String key) {
return this.settings.get(key);
}
public void setSettings(Map<String, String> settings) {
setMap(this.settings, settings);
}
@Override
public String toString() {
return "Database{" + "semesters=" + getSemesters() + '}';
}
public static enum DatabaseEventID implements EventID {
SEMESTER,
SETTING;
@Override
public Class<?> getAppliedClass() {
return Database.class;
}
@Override
public String getName() {
return name();
}
}
}