/******************************************************************************* | |
* Copyright (c) 2011, 2013 Formal Mind GmbH and University of Dusseldorf. | |
* 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: | |
* Lukas Ladenberger - initial API and implementation | |
******************************************************************************/ | |
package org.eclipse.rmf.reqif10.pror.editor.agilegrid; | |
import java.util.ArrayList; | |
import java.util.Collection; | |
import java.util.List; | |
import org.agilemore.agilegrid.AgileGrid; | |
import org.eclipse.emf.common.command.Command; | |
import org.eclipse.emf.common.command.CompoundCommand; | |
import org.eclipse.emf.ecore.util.EcoreUtil; | |
import org.eclipse.emf.edit.command.AddCommand; | |
import org.eclipse.emf.edit.command.SetCommand; | |
import org.eclipse.emf.edit.domain.EditingDomain; | |
import org.eclipse.jface.dialogs.MessageDialog; | |
import org.eclipse.rmf.reqif10.AttributeValueXHTML; | |
import org.eclipse.rmf.reqif10.ReqIF10Factory; | |
import org.eclipse.rmf.reqif10.ReqIF10Package; | |
import org.eclipse.rmf.reqif10.XhtmlContent; | |
import org.eclipse.rmf.reqif10.pror.editor.preferences.PreferenceConstants; | |
import org.eclipse.rmf.reqif10.pror.editor.presentation.Reqif10EditorPlugin; | |
import org.eclipse.rmf.reqif10.pror.util.ProrXhtmlSimplifiedHelper; | |
import org.eclipse.rmf.reqif10.xhtml.XhtmlDivType; | |
import org.eclipse.swt.widgets.Display; | |
/** | |
* @author Lukas Ladenberger | |
*/ | |
public class ProrXhtmlSimplifiedCellEditor extends ProrCellEditor { | |
private AttributeValueXHTML attributeValue; | |
public ProrXhtmlSimplifiedCellEditor(AgileGrid agileGrid, | |
EditingDomain editingDomain, Object parent, | |
Object affectedObject) { | |
super(agileGrid, editingDomain, parent, affectedObject); | |
this.parent = parent; | |
} | |
@Override | |
protected Object doGetValue() { | |
// The formatted text is edited | |
XhtmlDivType div = ProrXhtmlSimplifiedHelper | |
.stringToSimplifiedXhtml(text.getText()); | |
XhtmlContent origTheValue = attributeValue.getTheValue(); | |
final List<? super Object> affectedObjects = new ArrayList<Object>(); | |
affectedObjects.add(affectedObject); | |
CompoundCommand compoundCommand = new CompoundCommand() { | |
@Override | |
public Collection<?> getAffectedObjects() { | |
return affectedObjects; | |
} | |
}; | |
// Set parent if necessary | |
if (attributeValue.eContainer() == null) { | |
compoundCommand | |
.append(AddCommand | |
.create(editingDomain, | |
parent, | |
ReqIF10Package.Literals.SPEC_ELEMENT_WITH_ATTRIBUTES__VALUES, | |
attributeValue)); | |
} | |
if (!attributeValue.isSimplified()) { | |
boolean formattedAttribute = ProrXhtmlSimplifiedHelper | |
.isFormattedAttribute(origTheValue); | |
if (formattedAttribute) { | |
// Comand for setting simplified flag | |
Command setSimplifiedCmd = SetCommand | |
.create(editingDomain, | |
attributeValue, | |
ReqIF10Package.Literals.ATTRIBUTE_VALUE_XHTML__SIMPLIFIED, | |
true); | |
compoundCommand.append(setSimplifiedCmd); | |
XhtmlContent xhtmlContentCopy = EcoreUtil.copy(origTheValue); | |
// Comand for setting original value | |
Command setTheOriginalValueCmd = SetCommand | |
.create(editingDomain, | |
attributeValue, | |
ReqIF10Package.Literals.ATTRIBUTE_VALUE_XHTML__THE_ORIGINAL_VALUE, | |
xhtmlContentCopy); | |
compoundCommand.append(setTheOriginalValueCmd); | |
// Notify user about potential information loss | |
if (!Reqif10EditorPlugin | |
.getPlugin() | |
.getPreferenceStore() | |
.getBoolean( | |
PreferenceConstants.P_STOP_IS_SIMPLIFIED_WARNING)) { | |
MessageDialog | |
.openInformation( | |
Display.getDefault().getActiveShell(), | |
"Information", | |
Reqif10EditorPlugin.INSTANCE | |
.getString("_UI_Reqif10XhtmlIsSimplifiedWarning")); | |
} | |
} | |
} | |
// Command for setting new simplified version | |
Command setTheValueCmd = SetCommand.create(editingDomain, | |
origTheValue, | |
ReqIF10Package.Literals.XHTML_CONTENT__XHTML, div); | |
compoundCommand.append(setTheValueCmd); | |
editingDomain.getCommandStack().execute(compoundCommand); | |
return attributeValue; | |
} | |
@Override | |
protected void doSetValue(Object value) { | |
this.attributeValue = null; | |
if (value instanceof AttributeValueXHTML) { | |
attributeValue = (AttributeValueXHTML) value; | |
XhtmlContent xhtmlContent = attributeValue.getTheValue(); | |
if (xhtmlContent == null) { | |
xhtmlContent = ReqIF10Factory.eINSTANCE.createXhtmlContent(); | |
Command setTheOriginalValueCmd = SetCommand | |
.create(editingDomain, | |
attributeValue, | |
ReqIF10Package.Literals.ATTRIBUTE_VALUE_XHTML__THE_VALUE, | |
xhtmlContent); | |
editingDomain.getCommandStack().execute(setTheOriginalValueCmd); | |
} | |
value = ProrXhtmlSimplifiedHelper | |
.xhtmlToSimplifiedString(xhtmlContent); | |
} | |
super.doSetValue(value); | |
} | |
} |