package org.archstudio.bna.logics.editing;
import java.util.HashSet;
import java.util.Set;
import org.archstudio.bna.IBNAView;
import org.archstudio.bna.IBNAWorld;
import org.archstudio.bna.ICoordinate;
import org.archstudio.bna.IThing;
import org.archstudio.bna.logics.AbstractThingLogic;
import org.archstudio.bna.logics.mapping.IBNAMappingLogic;
import org.archstudio.bna.logics.tracking.ThingValueTrackingLogic;
import org.archstudio.bna.ui.IBNAMenuListener2;
import org.archstudio.bna.utils.BNAAction;
import org.archstudio.bna.utils.BNAUtils;
import org.archstudio.bna.utils.BNAUtils2.ThingsAtLocation;
import org.eclipse.jface.action.IMenuManager;
/**
* Provides a menu entry to restore a thing's default settings according to the {@link IBNAMappingLogic mapping logic}
* that created it.
*
* @author sahendrickson@gmail.com (Scott A. Hendrickson)
*/
public class RestoreDefaultsLogic extends AbstractThingLogic implements IBNAMenuListener2 {
protected final ThingValueTrackingLogic valueLogic;
public RestoreDefaultsLogic(IBNAWorld world) {
super(world);
valueLogic = logics.addThingLogic(ThingValueTrackingLogic.class);
}
@Override
public void fillMenu(IBNAView view, ICoordinate location, ThingsAtLocation thingsAtLocation, IMenuManager menu) {
BNAUtils.checkLock();
if (thingsAtLocation.getThingAtLocation() != null) {
final Set<IThing> toRestoreThings = new HashSet<>();
for (IThing t : BNAUtils.getSelectedThings(view.getBNAWorld().getBNAModel())) {
if (t.get(IBNAMappingLogic.MAPPING_KEY) != null) {
toRestoreThings.add(t);
}
}
if (thingsAtLocation.getThingAtLocation().getThing().get(IBNAMappingLogic.MAPPING_KEY) != null) {
toRestoreThings.add(thingsAtLocation.getThingAtLocation().getThing());
}
menu.add(new BNAAction("Restore Defaults") {
@Override
public void runWithLock() {
for (IThing t : toRestoreThings) {
@SuppressWarnings("unchecked")
IBNAMappingLogic<IThing> mappingLogic =
(IBNAMappingLogic<IThing>) t.get(IBNAMappingLogic.MAPPING_KEY);
if (mappingLogic != null) {
mappingLogic.applyDefaults(t);
}
}
}
@Override
public boolean isEnabled() {
return toRestoreThings.size() > 0;
}
});
}
}
}