/******************************************************************************* | |
* 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: | |
* Michael Jastram - 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.agilemore.agilegrid.CellEditor; | |
import org.agilemore.agilegrid.EditorActivationEvent; | |
import org.agilemore.agilegrid.editors.CheckboxCellEditor; | |
import org.eclipse.emf.common.command.CompoundCommand; | |
import org.eclipse.emf.edit.command.AddCommand; | |
import org.eclipse.emf.edit.command.SetCommand; | |
import org.eclipse.emf.edit.domain.EditingDomain; | |
import org.eclipse.rmf.reqif10.AttributeValueBoolean; | |
import org.eclipse.rmf.reqif10.ReqIF10Package; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.widgets.Control; | |
/** | |
* Modified {@link CheckboxCellEditor} that takes a String (rather than a | |
* Boolean) as an argument. The mapping is as follows (according to RIF): | |
* <p> | |
* | |
* TRUE: "1", "true"<br> | |
* FALSE: "0", "false" | |
* | |
* @author jastram | |
* | |
*/ | |
public class ProrCheckboxCellEditor extends CellEditor { | |
private EditingDomain domain; | |
private AttributeValueBoolean attributeValue; | |
private Object parent; | |
private Object affectedObject; | |
public ProrCheckboxCellEditor(AgileGrid agileGrid, EditingDomain domain, | |
Object parent, Object affectedObject) { | |
super(agileGrid, SWT.NONE); | |
this.domain = domain; | |
this.parent = parent; | |
this.affectedObject = affectedObject; | |
} | |
/** | |
* Returns null, as no control is necessary. | |
*/ | |
protected Control createControl(AgileGrid agileGrid) { | |
return null; | |
} | |
/* | |
* (non-Javadoc) | |
* | |
* @see org.agilemore.agilegrid.CellEditor#activate(org.agilemore.agilegrid. | |
* EditorActivationEvent) | |
*/ | |
public void activate(EditorActivationEvent activationEvent) { | |
doSetValue(attributeValue); | |
this.fireApplyEditorValue(); | |
} | |
@Override | |
protected void doSetValue(Object value) { | |
if (!(value instanceof AttributeValueBoolean)) { | |
return; | |
} | |
AttributeValueBoolean av = (AttributeValueBoolean) value; | |
final List<? super Object> affectedElements = new ArrayList<Object>(); | |
affectedElements.add(affectedObject); | |
CompoundCommand cmd = new CompoundCommand() { | |
@Override | |
public Collection<?> getAffectedObjects() { | |
return affectedElements; | |
} | |
}; | |
if (av.eContainer() == null) { | |
cmd.append(AddCommand | |
.create(domain, | |
parent, | |
ReqIF10Package.Literals.SPEC_ELEMENT_WITH_ATTRIBUTES__VALUES, | |
av)); | |
} | |
cmd.append(SetCommand.create(domain, av, | |
ReqIF10Package.Literals.ATTRIBUTE_VALUE_BOOLEAN__THE_VALUE, | |
Boolean.TRUE.equals(av.isTheValue()) ? Boolean.FALSE | |
: Boolean.TRUE)); | |
domain.getCommandStack().execute(cmd); | |
} | |
/** | |
* As we have no control, this value is irrelevant. | |
*/ | |
@Override | |
protected Object doGetValue() { | |
return "Error in ProrCheckboxCellEditor if you see this message!"; | |
} | |
} |