/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.foundation.dm;
import java.util.Vector;
import java.util.logging.Logger;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.dm.dm.DMAttributeDataModification;
import org.openflexo.foundation.dm.dm.EntityAddedToDiagram;
import org.openflexo.foundation.dm.dm.EntityRemovedFromDiagram;
import org.openflexo.foundation.xml.FlexoDMBuilder;
public class ERDiagram extends DMObject {
protected static final Logger logger = Logger.getLogger(ERDiagram.class.getPackage().getName());
private String name;
private Vector<DMEntity> entities;
private DMRepository repository;
/**
* Constructor used during deserialization
*/
public ERDiagram(FlexoDMBuilder builder) {
this(builder.dmModel);
initializeDeserialization(builder);
}
/**
* Default constructor
*/
public ERDiagram(DMModel dmModel) {
super(dmModel);
entities = new Vector<DMEntity>();
}
@Override
public final void delete() {
DMModel model = getDMModel();
super.delete();
// This removes the only ref
model.removeFromDiagrams(this);
// this method is final because of this call
deleteObservers();
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String aName) {
if (name == null || !name.equals(aName)) {
String oldName = name;
name = aName;
setChanged();
notifyObservers(new DMAttributeDataModification("name", oldName, aName));
}
}
public Vector<DMEntity> getEntities() {
return entities;
}
public void setEntities(Vector<DMEntity> someEntities) {
Vector<DMEntity> entitiesToRemove = new Vector<DMEntity>();
entitiesToRemove.addAll(entities);
for (DMEntity entity : someEntities) {
if (entities.contains(entity)) {
entitiesToRemove.remove(entity);
} else {
addToEntities(entity);
}
}
for (DMEntity entity : entitiesToRemove) {
removeFromEntities(entity);
}
}
public void addToEntities(DMEntity entity) {
// logger.info("**** addToEntities() "+entity);
entities.add(entity);
setChanged();
notifyObservers(new EntityAddedToDiagram(entity));
}
public void removeFromEntities(DMEntity entity) {
// logger.info("**** removeFromEntities() "+entity);
entities.remove(entity);
setChanged();
notifyObservers(new EntityRemovedFromDiagram(entity));
}
@Override
public Vector<? extends DMObject> getEmbeddedDMObjects() {
return entities;
}
@Override
public Vector<? extends DMObject> getOrderedChildren() {
return entities;
}
@Override
public DMModel getParent() {
return getDMModel();
}
@Override
public boolean isDeletable() {
return true;
}
@Override
public String getClassNameKey() {
return "er_diagram";
}
@Override
public String getFullyQualifiedName() {
return getDMModel().getFullyQualifiedName() + "." + getName();
}
@Override
public String getInspectorName() {
return Inspectors.DM.ER_DIAGRAM_INSPECTOR;
}
public DMRepository getRepository() {
return repository;
}
public void setRepository(DMRepository aRepository) {
repository = aRepository;
}
}