/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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
*******************************************************************************/
package gov.redhawk.ide.sad.internal.ui.properties.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
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.ViewerNotification;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import gov.redhawk.ide.sad.internal.ui.editor.XViewerCellEditor;
import gov.redhawk.ide.sad.internal.ui.editor.XViewerListCellEditor;
import gov.redhawk.ide.sad.internal.ui.editor.XViewerTextCellEditor;
import mil.jpeojtrs.sca.prf.Enumeration;
import mil.jpeojtrs.sca.prf.PrfFactory;
import mil.jpeojtrs.sca.prf.PrfPackage;
import mil.jpeojtrs.sca.prf.PropertyValueType;
import mil.jpeojtrs.sca.prf.Simple;
import mil.jpeojtrs.sca.prf.SimpleRef;
public class SadPropertiesSimple extends SadPropertyImpl<Simple> {
public SadPropertiesSimple(AdapterFactory adapterFactory, Simple def, Object parent) {
super(adapterFactory, def, parent);
}
@Override
public String getSadValue() {
SimpleRef simpleRef = getValueRef();
if (simpleRef != null) {
return simpleRef.getValue();
}
return null;
}
@Override
protected SimpleRef getValueRef() {
return (SimpleRef) super.getValueRef();
}
@Override
public Object getPrfValue() {
return getDefinition().getValue();
}
@Override
protected ILabelProvider createLabelProvider() {
return new LabelProvider() {
@Override
public String getText(Object element) {
if (element != null) {
if (def.getEnumerations() != null) {
for (Enumeration enumeration : def.getEnumerations().getEnumeration()) {
if (enumeration.getValue().equals(element)) {
return enumeration.getLabel();
}
}
}
return (String) element;
}
return "";
}
};
}
@Override
protected boolean isEmpty(Object value) {
return ((String) value).isEmpty();
}
@Override
protected Collection< ? > getKindTypes() {
return getDefinition().getKind();
}
@Override
protected Object createModelObject(EStructuralFeature feature, Object value) {
if (feature == SadPropertiesPackage.Literals.SAD_PROPERTY__VALUE) {
SimpleRef ref = PrfFactory.eINSTANCE.createSimpleRef();
ref.setRefID(getID());
ref.setValue((String) value);
return ref;
}
return super.createModelObject(feature, value);
}
@Override
protected Command createSetCommand(EditingDomain domain, Object owner, EStructuralFeature feature, Object value) {
if (feature == SadPropertiesPackage.Literals.SAD_PROPERTY__VALUE) {
return SetCommand.create(domain, owner, PrfPackage.Literals.SIMPLE_REF__VALUE, value);
}
return super.createSetCommand(domain, owner, feature, value);
}
public boolean checkValue(String text) {
if (text == null || text.isEmpty() || def.getType().isValueOfType(text, def.isComplex())) {
return true;
}
return false;
}
@Override
protected void notifyChanged(Notification msg) {
if (msg.getFeature() == PrfPackage.Literals.SIMPLE_REF__VALUE) {
fireNotifyChanged(new ViewerNotification(msg, this, false, true));
return;
}
super.notifyChanged(msg);
}
@Override
public XViewerCellEditor createCellEditor(Composite parent) {
if (def.getType() == PropertyValueType.BOOLEAN) {
return new XViewerListCellEditor(parent, Arrays.asList("", "true", "false"));
} else if (def.getEnumerations() != null) {
final List<Enumeration> enumerations = def.getEnumerations().getEnumeration();
List<String> values = new ArrayList<String>(enumerations.size());
values.add("");
for (Enumeration enumeration : enumerations) {
values.add(enumeration.getValue());
}
XViewerListCellEditor editor = new XViewerListCellEditor(parent, values);
editor.setLabelProvider(getLabelProvider());
return editor;
} else {
XViewerTextCellEditor editor = new XViewerTextCellEditor(parent, SWT.BORDER);
editor.setValidator(new ICellEditorValidator() {
@Override
public String isValid(Object value) {
if (checkValue((String) value)) {
return null;
} else {
if (def.isComplex()) {
return "Value must be of type complex " + def.getType();
} else {
return "Value must be of type " + def.getType();
}
}
}
});
return editor;
}
}
}