blob: 11a3640baf18417c511f17c2ba9e130356962784 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.j2ee.internal.web.providers;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
/**
* Insert the type's description here. Creation date: (12/11/2000 5:54:28 PM)
*
* @author: Administrator
*/
public class WebToolingItemPropertyDescriptor extends ItemPropertyDescriptor {
protected int cellEditorType = -1;
public final static int SMALL_ICON_EDITOR = 1;
public final static int LARGE_ICON_EDITOR = 2;
public final static int MULTILINE_TEXT_EDITOR = 3;
public final static int AUTH_CONSTRAINT_ROLES_EDITOR = 4;
/**
* This creates an instance where the category and filter flags are empty and the cell editor is
* determined for the references.
*/
public WebToolingItemPropertyDescriptor(AdapterFactory adapterFactory, String displayName, String description, EReference[] parentReferences) {
super(adapterFactory, displayName, description, parentReferences);
}
/**
* This creates an instance where the category is filter flags are empty and the cell editor is
* determined from the type of the structural feature>
*/
public WebToolingItemPropertyDescriptor(AdapterFactory adapterFactory, String displayName, String description, EStructuralFeature feature) {
super(adapterFactory, displayName, description, feature);
}
/**
* This creates an instance where the category is filter flags are empty and the cell editor is
* determined from the type of the structural feature>
*/
public WebToolingItemPropertyDescriptor(AdapterFactory adapterFactory, String displayName, String description, EStructuralFeature feature, int newCellEditorType) {
super(adapterFactory, displayName, description, feature);
cellEditorType = newCellEditorType;
}
protected void executeCommand(EditingDomain editingDomain, Command command) {
//TODO We need to use the CommandStack from the WebEditModel.
// if (editingDomain instanceof StructuredTextEditingDomain)
// ((StructuredTextEditingDomain) editingDomain).execute(command);
// else
// editingDomain.getCommandStack().execute(command);
}
/**
* Returns the editor type.
*/
public int getCellEditorType() {
return cellEditorType;
}
/**
* This does the delegated job of setting the property to the given value. It is implemented in
* a generic way using the structural feature.
*/
public void setPropertyValue(Object object, Object value) {
EObject refObject = (EObject) object;
EditingDomain editingDomain = getEditingDomain(object);
if (parentReferences != null) {
EObject refValue = (EObject) value;
Command removeCommand = null;
for (int i = 0; i < parentReferences.length; ++i) {
Object oldValue = refObject.eGet(parentReferences[i]);
if (oldValue != null) {
final EReference parentReference = parentReferences[i];
if (oldValue == value) {
return;
}
// else if (refValue.refIsInstanceOf(parentReference.getEType(), true))
else if (refValue.eClass() == parentReference.getEType() || refValue.eClass().getEAllSuperTypes().contains(parentReference.getEType())) {
if (editingDomain == null) {
refObject.eSet(parentReference, value);
} else {
Command setCommand = SetCommand.create(editingDomain, refObject, parentReference, value);
executeCommand(editingDomain, setCommand);
}
return;
} else {
if (editingDomain == null) {
refObject.eSet(parentReference, null);
} else {
removeCommand = SetCommand.create(editingDomain, refObject, parentReference, null);
}
break;
}
}
}
for (int i = 0; i < parentReferences.length; ++i) {
final EReference parentReference = parentReferences[i];
//if (refValue.refIsInstanceOf(parentReference.getEType(), true))
if (refValue.eClass() == parentReference.getEType() || refValue.eClass().getEAllSuperTypes().contains(parentReference.getEType())) {
if (editingDomain == null) {
refObject.eSet(parentReferences[i], value);
} else {
if (removeCommand != null) {
final CompoundCommand compoundCommand = new CompoundCommand(CompoundCommand.LAST_COMMAND_ALL);
compoundCommand.append(removeCommand);
compoundCommand.append(SetCommand.create(editingDomain, refObject, parentReference, value));
executeCommand(editingDomain, compoundCommand);
} else {
executeCommand(editingDomain, SetCommand.create(editingDomain, refObject, parentReference, value));
}
}
break;
}
}
} else {
if (editingDomain == null) {
refObject.eSet(feature, value);
} else {
executeCommand(editingDomain, SetCommand.create(editingDomain, refObject, feature, value));
}
}
}
}