/**
* 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.prf.ui.provider;
import java.util.Collection;
import mil.jpeojtrs.sca.prf.AccessType;
import mil.jpeojtrs.sca.prf.Action;
import mil.jpeojtrs.sca.prf.ActionType;
import mil.jpeojtrs.sca.prf.Kind;
import mil.jpeojtrs.sca.prf.PrfFactory;
import mil.jpeojtrs.sca.prf.PrfPackage;
import mil.jpeojtrs.sca.prf.PropertyConfigurationType;
import mil.jpeojtrs.sca.prf.PropertyValueType;
import mil.jpeojtrs.sca.prf.Simple;
import mil.jpeojtrs.sca.prf.provider.SimpleItemProvider;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.domain.EditingDomain;
/**
* @since 1.2
*/
public class PropertiesEditorSimpleItemProvider extends SimpleItemProvider {
public PropertiesEditorSimpleItemProvider(final AdapterFactory adapterFactory) {
super(adapterFactory);
}
/**
* Produces the add {@link Command} for adding a new simple property to an existing properties collection or struct.
* This code extends the parent class to ensure the new simple has certain default values.
*/
@Override
protected Command createAddCommand(final EditingDomain domain, final EObject owner, final EStructuralFeature feature, final Collection< ? > collection,
final int index) {
if (feature == PrfPackage.Literals.PROPERTIES__SIMPLE) {
for (Object obj : collection) {
Simple simple = (Simple) obj;
configureDefaultSimple(simple);
}
} else if (feature == PrfPackage.Literals.STRUCT__SIMPLE) {
for (Object obj : collection) {
Simple simple = (Simple) obj;
configureDefaultSimpleInStruct(simple);
}
}
return super.createAddCommand(domain, owner, feature, collection, index);
}
/**
* Set default values for a new simple property.
* @param simple The simple to be modified
*/
private void configureDefaultSimple(Simple simple) {
simple.setType(PropertyValueType.STRING);
simple.setMode(AccessType.READWRITE);
final Kind kind = PrfFactory.eINSTANCE.createKind();
kind.setType(PropertyConfigurationType.PROPERTY);
simple.getKind().add(kind);
final Action action = PrfFactory.eINSTANCE.createAction();
action.setType(ActionType.EXTERNAL);
simple.setAction(action);
}
/**
* Set default values for a new simple member of a struct property.
* @param simple The simple to be modified
*/
private void configureDefaultSimpleInStruct(Simple simple) {
simple.setType(PropertyValueType.STRING);
}
}