package org.insightech.er.editor.controller.editpart.outline.ermodel;

import java.beans.PropertyChangeEvent;

import org.eclipse.gef.DragTracker;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.tools.SelectEditPartTracker;
import org.insightech.er.Activator;
import org.insightech.er.ImageKey;
import org.insightech.er.editor.controller.command.ermodel.OpenERModelCommand;
import org.insightech.er.editor.controller.editpart.DeleteableEditPart;
import org.insightech.er.editor.controller.editpart.element.ERDiagramEditPart;
import org.insightech.er.editor.controller.editpart.outline.AbstractOutlineEditPart;
import org.insightech.er.editor.controller.editpolicy.element.node.NodeElementComponentEditPolicy;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.node.ermodel.ERModel;
import org.insightech.er.editor.model.diagram_contents.element.node.table.TableSet;

public class ERModelOutlineEditPart extends AbstractOutlineEditPart implements
		DeleteableEditPart {

	public void propertyChange(PropertyChangeEvent evt) {
//		if (evt.getPropertyName().equals(TableSet.PROPERTY_CHANGE_TABLE_SET)) {
//			refresh();
//		}
		if (evt.getPropertyName().equals(ERModel.PROPERTY_CHANGE_VTABLES)) {
			refresh();
		}
	}

	@Override
	public void refresh() {
//		if (ERDiagramEditPart.isUpdateable()) {
			refreshChildren();
			refreshVisuals();
//		}
	}

	@Override
	public DragTracker getDragTracker(Request req) {
		return new SelectEditPartTracker(this);
	}

	public boolean isDeleteable() {
		return true;
	}

	@Override
	protected void refreshOutlineVisuals() {
		this.refreshName();

		for (Object child : this.getChildren()) {
			EditPart part = (EditPart) child;
			part.refresh();
		}
	}

	private void refreshName() {
		ERModel model = (ERModel) this.getModel();
//		ERModelSet modelSet = (ERModelSet) this.getModel();


//		ERDiagram diagram = (ERDiagram) this.getRoot().getContents().getModel();
//
//		String name = null;
//
//		int viewMode = diagram.getDiagramContents().getSettings()
//				.getOutlineViewMode();
//
//		if (viewMode == Settings.VIEW_MODE_PHYSICAL) {
//			if (model.getPhysicalName() != null) {
//				name = model.getPhysicalName();
//
//			} else {
//				name = "";
//			}
//
//		} else if (viewMode == Settings.VIEW_MODE_LOGICAL) {
//			if (model.getLogicalName() != null) {
//				name = model.getLogicalName();
//
//			} else {
//				name = "";
//			}
//
//		} else {
//			if (model.getLogicalName() != null) {
//				name = model.getLogicalName();
//
//			} else {
//				name = "";
//			}
//
//			name += "/";
//
//			if (model.getPhysicalName() != null) {
//				name += model.getPhysicalName();
//
//			}
//		}

		this.setWidgetText(model.getName());
		this.setWidgetImage(Activator.getImage(ImageKey.DIAGRAM));
	}

	@Override
	public void performRequest(Request request) {
		ERModel model = (ERModel) this.getModel();
		ERDiagram diagram = this.getDiagram();

		if (request.getType().equals(RequestConstants.REQ_OPEN)) {
			OpenERModelCommand command = new OpenERModelCommand(diagram, model);
			this.execute(command);
		}

		super.performRequest(request);
	}

	@Override
	protected void createEditPolicies() {
		this.installEditPolicy(EditPolicy.COMPONENT_ROLE,
				new NodeElementComponentEditPolicy());
	}


}