/*******************************************************************************
* 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.seam.ui.pages.editor.edit;
import java.util.Properties;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.DirectEditPolicy;
import org.eclipse.gef.requests.DirectEditRequest;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.jst.web.model.ReferenceObject;
import org.jboss.tools.seam.pages.xml.model.SeamPagesConstants;
import org.jboss.tools.seam.pages.xml.model.handlers.RenameViewSupport;
import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesDiagramHelper;
import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesDiagramStructureHelper;
import org.jboss.tools.seam.ui.pages.SeamUiPagesPlugin;
import org.jboss.tools.seam.ui.pages.editor.commands.AddExceptionOnDiagramHandler;
import org.jboss.tools.seam.ui.pages.editor.commands.AddPageOnDiagramHandler;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.Page;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PageException;
import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PagesElement;
public class ViewIDDirectEditPolicy extends DirectEditPolicy {
/**
* @see DirectEditPolicy#getDirectEditCommand(DirectEditRequest)
*/
protected Command getDirectEditCommand(DirectEditRequest request) {
String labelText = (String) request.getCellEditor().getValue();
PagesEditPart node = (PagesEditPart) getHost();
PagesElement element = node.getElementModel();
if (element != null) {
Object rename = request.getExtendedData().get("rename");
if(rename != null && rename instanceof Boolean && ((Boolean)rename).booleanValue())
return new RenameViewCommand(element, labelText);
else
return new InitViewCommand(element, labelText);
}
return null;
}
/**
* @see DirectEditPolicy#showCurrentEditValue(DirectEditRequest)
*/
protected void showCurrentEditValue(DirectEditRequest request) {
}
public class InitViewCommand extends Command {
PagesElement node;
String value;
XModelObject object;
public InitViewCommand(PagesElement node, String value) {
this.node = node;
this.value = value;
object = (XModelObject)node.getPagesModel().getData();
}
public boolean canExecute() {
ViewIDValidator val = new ViewIDValidator(object);
String message = val.isValid(value);
if (message == null || "".equals(message))
return true;
return false;
}
public boolean canUndo() {
return false;
}
public void execute() {
Properties props = new Properties();
props.setProperty("mouse.x", ""+node.getLocation().x);
props.setProperty("mouse.y", ""+node.getLocation().y);
if(node instanceof Page)
AddPageOnDiagramHandler.createPage(object, value, props);
else if(node instanceof PageException)
AddExceptionOnDiagramHandler.createException(object, value, props);
}
}
public class RenameViewCommand extends Command {
PagesElement node;
String value;
XModelObject object;
String oldValue;
public RenameViewCommand(PagesElement node, String value) {
this.node = node;
this.value = value;
object = (XModelObject)node.getData();
oldValue = object.getAttributeValue(SeamPagesConstants.ATTR_PATH);
}
public boolean canExecute() {
ViewIDValidator val = new ViewIDValidator(object);
String message = val.isValid(value);
if (message == null || "".equals(message))
return true;
return false;
}
public boolean canUndo() {
return false;
}
public void execute() {
if(node instanceof Page && object instanceof ReferenceObject){
SeamPagesDiagramHelper h = SeamPagesDiagramHelper.getHelper(SeamPagesDiagramStructureHelper.instance.getDiagram(object));
h.addUpdateLock(this);
try{
RenameViewSupport.replace((ReferenceObject)object, oldValue, value);
}catch(XModelException ex){
SeamUiPagesPlugin.log(ex);
} finally {
h.removeUpdateLock(this);
h.updateDiagram();
}
}
}
}
}