/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.ui.editor.edit;
import java.beans.PropertyChangeEvent;
import java.util.Collections;
import java.util.List;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.jboss.tools.common.model.ui.dnd.DnDUtil;
import org.eclipse.gef.*;
import org.eclipse.gef.requests.DropRequest;
import org.eclipse.swt.accessibility.AccessibleControlEvent;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.jboss.tools.common.meta.action.XAction;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.jsf.ui.JsfUiPlugin;
import org.jboss.tools.jsf.ui.editor.figures.PageFigure;
import org.jboss.tools.jsf.ui.editor.model.ILink;
import org.jboss.tools.jsf.ui.editor.model.IPage;
import org.jboss.tools.jsf.ui.editor.model.IPageListener;
public class PageEditPart extends JSFEditPart implements EditPartListener, IPageListener {
private PageFigure fig = null;
public void doMouseUp(boolean cf) {
}
public void doMouseDown(boolean cf) {
}
public void doMouseHover(boolean cf) {
}
public void doDoubleClick(boolean cf) {
try {
XAction action = DnDUtil
.getEnabledAction(
(XModelObject) getPageModel().getSource(), null,
"OpenPage"); //$NON-NLS-1$
if (action != null)
action.executeHandler(
(XModelObject) getPageModel().getSource(), null);
} catch (XModelException e) {
JsfUiPlugin.getPluginLog().logError(e);
}
}
public void setModel(Object model) {
super.setModel(model);
addEditPartListener(this);
getPageModel().addPageListener(this);
}
public void childAdded(EditPart child, int index) {
}
public void partActivated(EditPart editpart) {
}
public void partDeactivated(EditPart editpart) {
}
public void removingChild(EditPart child, int index) {
}
public void selectedStateChanged(EditPart editpart) {
fig.repaint();
}
public boolean isPageListenerEnable() {
return true;
}
public void pageRemoved(IPage page) {
}
public void pageChange() {
refresh();
}
public void linkAdd(IPage page, ILink link) {
fig.addConnectionAnchor(getPageModel().getLinkList().size());
refresh();
}
public void linkRemove(IPage page, ILink link) {
fig.removeConnectionAnchor();
refresh();
}
public void linkChange(IPage page, ILink link, PropertyChangeEvent event) {
refreshSourceConnections();
}
protected AccessibleEditPart createAccessible() {
return new AccessibleGraphicalEditPart() {
public void getName(AccessibleEvent e) {
e.result = "EditPart"; //$NON-NLS-1$
}
public void getValue(AccessibleControlEvent e) {
}
};
}
protected void createEditPolicies() {
super.createEditPolicies();
installEditPolicy(EditPolicy.COMPONENT_ROLE, new PageEditPolicy());
installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE,
new PageEditPolicy());
}
protected IFigure createFigure() {
fig = new PageFigure(this);
return fig;
}
public PageFigure getPageFigure() {
return (PageFigure) getFigure();
}
public IPage getPageModel() {
return (IPage) getModel();
}
/**
* Apart from the usual visual update, it also updates the numeric contents
* of the LED.
*/
protected List getModelSourceConnections() {
if (getParent() == null)
return Collections.EMPTY_LIST;
if (((GroupEditPart) getParent()).isSingle()) {
// - PageEditPart getModelSourceConnections - EMPTY");
return Collections.EMPTY_LIST;
} else {
// - PageEditPart getModelSourceConnections
// "+getPageModel().getLinkList().size());
return getPageModel().getLinkList().getElements();
}
}
protected List getModelTargetConnections() {
// - PageEditPart getModelTargetConnections - EMPTY");
return Collections.EMPTY_LIST;
}
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connEditPart) {
ILink link = (ILink) connEditPart.getModel();
int index = getPageModel().getLinkList().indexOf(link);
ConnectionAnchor anc = getNodeFigure().getConnectionAnchor(
(index + 1) + "_OUT"); //$NON-NLS-1$
// - PageEditPart getSourceConnectionAnchor "+index+" link
// -"+link.getLinkName()+" "+anc);
return anc;
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
// - PageEditPart getSourceConnectionAnchor by Request");
Point pt = new Point(((DropRequest) request).getLocation());
return getNodeFigure().getSourceConnectionAnchorAt(pt);
}
public void setSelected(int i) {
super.setSelected(i);
refreshVisuals();
}
protected void refreshVisuals() {
if (getParent() == null)
return;
((GraphicalEditPart) getParent()).setLayoutConstraint(this,
getFigure(), getPageModel().getBounds());
}
}