101 lines
2.5 KiB
Java
101 lines
2.5 KiB
Java
package nl.andrewlalis.erme.model;
|
|
|
|
import lombok.Getter;
|
|
import nl.andrewlalis.erme.view.view_models.RelationViewModel;
|
|
import nl.andrewlalis.erme.view.view_models.ViewModel;
|
|
|
|
import java.awt.*;
|
|
import java.io.Serializable;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* Represents a single "relation" or table in the diagram.
|
|
*/
|
|
@Getter
|
|
public class Relation implements Serializable, Viewable {
|
|
private final MappingModel model;
|
|
private Point position;
|
|
private String name;
|
|
private final List<Attribute> attributes;
|
|
|
|
private transient boolean selected;
|
|
private transient RelationViewModel viewModel;
|
|
|
|
public Relation(MappingModel model, Point position, String name) {
|
|
this.model = model;
|
|
this.position = position;
|
|
this.name = name;
|
|
this.attributes = new ArrayList<>();
|
|
}
|
|
|
|
public void setPosition(Point position) {
|
|
this.position = position;
|
|
}
|
|
|
|
public void setName(String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public void setSelected(boolean selected) {
|
|
this.selected = selected;
|
|
}
|
|
|
|
public void addAttribute(Attribute attribute) {
|
|
this.attributes.add(attribute);
|
|
this.model.fireChangedEvent();
|
|
}
|
|
|
|
public void addAttribute(Attribute attribute, int index) {
|
|
this.attributes.add(index, attribute);
|
|
this.model.fireChangedEvent();
|
|
}
|
|
|
|
public void removeAttribute(Attribute attribute) {
|
|
if (this.attributes.remove(attribute)) {
|
|
this.model.removeAllReferencingAttributes(attribute);
|
|
this.model.fireChangedEvent();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ViewModel getViewModel() {
|
|
if (this.viewModel == null) {
|
|
this.viewModel = new RelationViewModel(this);
|
|
}
|
|
return this.viewModel;
|
|
}
|
|
|
|
public List<Attribute> getReferencableAttributes() {
|
|
return this.attributes.stream()
|
|
.filter(a -> a.getType() == AttributeType.ID_KEY || a.getType() == AttributeType.PARTIAL_ID_KEY)
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (o == null || getClass() != o.getClass()) return false;
|
|
Relation relation = (Relation) o;
|
|
return Objects.equals(this.getName(), relation.getName());
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return this.getName().hashCode();
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return this.getName();
|
|
}
|
|
|
|
public Relation copy(MappingModel newModel) {
|
|
Relation c = new Relation(newModel, new Point(this.getPosition()), this.getName());
|
|
this.getAttributes().forEach(a -> c.addAttribute(a.copy(c)));
|
|
return c;
|
|
}
|
|
}
|