/**
* 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.sca.observables;
import gov.redhawk.model.sca.ScaComponent;
import gov.redhawk.model.sca.ScaPackage;
import gov.redhawk.model.sca.ScaSimpleProperty;
import java.math.BigInteger;
import mil.jpeojtrs.sca.prf.PrfPackage;
import mil.jpeojtrs.sca.util.math.ComplexBoolean;
import mil.jpeojtrs.sca.util.math.ComplexByte;
import mil.jpeojtrs.sca.util.math.ComplexDouble;
import mil.jpeojtrs.sca.util.math.ComplexFloat;
import mil.jpeojtrs.sca.util.math.ComplexLong;
import mil.jpeojtrs.sca.util.math.ComplexLongLong;
import mil.jpeojtrs.sca.util.math.ComplexShort;
import mil.jpeojtrs.sca.util.math.ComplexUByte;
import mil.jpeojtrs.sca.util.math.ComplexULong;
import mil.jpeojtrs.sca.util.math.ComplexULongLong;
import mil.jpeojtrs.sca.util.math.ComplexUShort;
import mil.jpeojtrs.sca.util.time.UTCTime;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EObjectObservableValue;
import org.eclipse.emf.databinding.edit.EditingDomainEObjectObservableValue;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.util.TransactionUtil;
public class SCAObservables {
private SCAObservables() {
//Prevent instantiation
}
public static IObservableValue< ? > observeSimpleProperty(final ScaComponent component, final String id) {
TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(component);
return observeSimpleProperty(domain, component, id);
}
/**
* @since 1.2
*/
public static IObservableValue< ? > observeSimpleProperty(EditingDomain domain, final ScaComponent component, final String id) {
if (component != null && !component.isDisposed() && id != null) {
final ScaSimpleProperty simple = (ScaSimpleProperty) component.getProperty(id);
return SCAObservables.observeSimpleProperty(simple);
}
return null;
}
/**
* @since 1.2
*/
public static IObservableValue< ? > observeSimpleProperty(EditingDomain domain, final ScaSimpleProperty simple) {
if (simple != null) {
final EDataType type;
if (simple.getDefinition() == null) {
type = SCAObservables.toType(simple.getValue());
} else {
type = simple.getDefinition().getType().toEDataType(simple.getDefinition().isComplex());
}
final EAttribute attribute;
if (type != null) {
attribute = EcoreUtil.copy(ScaPackage.Literals.SCA_SIMPLE_PROPERTY__VALUE);
attribute.setEType(type);
} else {
attribute = ScaPackage.Literals.SCA_SIMPLE_PROPERTY__VALUE;
}
if (domain != null) {
return new EditingDomainEObjectObservableValue(domain, simple, ScaPackage.Literals.SCA_SIMPLE_PROPERTY__VALUE) {
@Override
public Object getValueType() {
return attribute;
}
};
} else {
return new EObjectObservableValue(simple, ScaPackage.Literals.SCA_SIMPLE_PROPERTY__VALUE) {
@Override
public Object getValueType() {
return attribute;
}
};
}
}
return null;
}
public static IObservableValue< ? > observeSimpleProperty(final ScaSimpleProperty simple) {
TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(simple);
return observeSimpleProperty(domain, simple);
}
/**
* @since 1.2
*/
public static EDataType toType(Object obj) {
if (obj instanceof Integer) {
return EcorePackage.Literals.EINTEGER_OBJECT;
} else if (obj instanceof Boolean) {
return EcorePackage.Literals.EBOOLEAN_OBJECT;
} else if (obj instanceof BigInteger) {
return EcorePackage.Literals.EBIG_INTEGER;
} else if (obj instanceof Character) {
return EcorePackage.Literals.ECHARACTER_OBJECT;
} else if (obj instanceof Short) {
return EcorePackage.Literals.ESHORT_OBJECT;
} else if (obj instanceof Long) {
return EcorePackage.Literals.ELONG_OBJECT;
} else if (obj instanceof Float) {
return EcorePackage.Literals.EFLOAT_OBJECT;
} else if (obj instanceof Double) {
return EcorePackage.Literals.EDOUBLE_OBJECT;
} else if (obj instanceof String) {
return EcorePackage.Literals.ESTRING;
} else if (obj instanceof Byte) {
return EcorePackage.Literals.EBYTE;
} else if (obj instanceof ComplexBoolean) {
return PrfPackage.Literals.COMPLEX_BOOLEAN;
} else if (obj instanceof ComplexByte) {
return PrfPackage.Literals.COMPLEX_BYTE;
} else if (obj instanceof ComplexDouble) {
return PrfPackage.Literals.COMPLEX_DOUBLE;
} else if (obj instanceof ComplexFloat) {
return PrfPackage.Literals.COMPLEX_FLOAT;
} else if (obj instanceof ComplexLong) {
return PrfPackage.Literals.COMPLEX_LONG;
} else if (obj instanceof ComplexLongLong) {
return PrfPackage.Literals.COMPLEX_LONG_LONG;
} else if (obj instanceof ComplexUByte) {
return PrfPackage.Literals.COMPLEX_UBYTE;
} else if (obj instanceof ComplexShort) {
return PrfPackage.Literals.COMPLEX_SHORT;
} else if (obj instanceof ComplexULong) {
return PrfPackage.Literals.COMPLEX_ULONG;
} else if (obj instanceof ComplexULongLong) {
return PrfPackage.Literals.COMPLEX_ULONG_LONG;
} else if (obj instanceof ComplexUShort) {
return PrfPackage.Literals.COMPLEX_USHORT;
} else if (obj instanceof UTCTime) {
return PrfPackage.Literals.UTC_TIME;
} else {
return null;
}
}
}