/*******************************************************************************
* 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.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EContentAdapter;
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.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Composite;
import gov.redhawk.ide.sad.internal.ui.editor.XViewerCellEditor;
import gov.redhawk.ide.sad.internal.ui.editor.XViewerDialogCellEditor;
import gov.redhawk.sca.internal.ui.wizards.ValuesWizard;
import mil.jpeojtrs.sca.prf.PrfFactory;
import mil.jpeojtrs.sca.prf.PrfPackage;
import mil.jpeojtrs.sca.prf.SimpleSequence;
import mil.jpeojtrs.sca.prf.SimpleSequenceRef;
import mil.jpeojtrs.sca.prf.Values;
/**
*
*/
public class SadPropertiesSimpleSequence extends SadPropertyImpl<SimpleSequence> {
public SadPropertiesSimpleSequence(AdapterFactory adapterFactory, SimpleSequence def, Object parent) {
super(adapterFactory, def, parent);
}
@Override
public Object getSadValue() {
SimpleSequenceRef ref = getValueRef();
if (ref != null) {
return ref.getValues().getValue();
}
return null;
}
@Override
protected boolean isEmpty(Object value) {
return ((Collection< ? >) value).isEmpty();
}
@Override
protected SimpleSequenceRef getValueRef() {
return (SimpleSequenceRef) super.getValueRef();
}
@Override
public Object getPrfValue() {
Values values = getDefinition().getValues();
if (values != null) {
return values.getValue();
}
return null;
}
@Override
protected ILabelProvider createLabelProvider() {
return new LabelProvider() {
@Override
public String getText(Object element) {
if (element != null) {
return Arrays.toString(((List< ? >) element).toArray());
}
return "";
}
};
}
@Override
protected Collection< ? > getKindTypes() {
return getDefinition().getKind();
}
@Override
protected Object createModelObject(EStructuralFeature feature, Object value) {
if (feature == SadPropertiesPackage.Literals.SAD_PROPERTY__VALUE) {
SimpleSequenceRef ref = PrfFactory.eINSTANCE.createSimpleSequenceRef();
ref.setRefID(getID());
ref.setValues(PrfFactory.eINSTANCE.createValues());
ref.getValues().eSet(PrfPackage.Literals.VALUES__VALUE, value);
return ref;
}
return super.createModelObject(feature, value);
}
@Override
public Command createSetCommand(EditingDomain domain, Object owner, EStructuralFeature feature, Object value) {
if (feature == SadPropertiesPackage.Literals.SAD_PROPERTY__VALUE) {
return SetCommand.create(domain, ((SimpleSequenceRef) owner).getValues(), PrfPackage.Literals.VALUES__VALUE, value);
}
return super.createSetCommand(domain, owner, feature, value);
}
@Override
protected Adapter createAdapter() {
return new EContentAdapter() {
@Override
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
SadPropertiesSimpleSequence.this.notifyChanged(notification);
}
};
}
@Override
protected void notifyChanged(Notification msg) {
final Object feature = msg.getFeature();
if (feature == PrfPackage.Literals.SIMPLE_SEQUENCE_REF__VALUES || feature == PrfPackage.Literals.VALUES__VALUE) {
fireNotifyChanged(new ViewerNotification(msg, this, false, true));
return;
}
super.notifyChanged(msg);
}
@Override
public XViewerCellEditor createCellEditor(Composite parent) {
return new XViewerDialogCellEditor(parent) {
@SuppressWarnings("restriction")
@Override
protected Object openDialogBox() {
ValuesWizard wizard = new ValuesWizard(def.getType(), def.isComplex());
List<String> values = new ArrayList<String>();
if (value != null) {
for (Object item : (Collection< ? >) value) {
values.add((String) item);
}
}
wizard.setInput(values.toArray(new String[values.size()]));
WizardDialog dialog = new WizardDialog(getShell(), wizard);
if (dialog.open() == Window.OK) {
return Arrays.asList(wizard.getValues());
}
return null;
}
};
}
}