use of net.opengis.sensorML.x101.SensorMLDocument.SensorML.Member in project arctic-sea by 52North.
the class SensorMLDecoderV101 method parseSensorML.
@SuppressFBWarnings("BC_VACUOUS_INSTANCEOF")
private SensorML parseSensorML(final SensorMLDocument xbSensorML) throws DecodingException {
final SensorML sensorML = new SensorML();
// get member process
for (final Member xbMember : xbSensorML.getSensorML().getMemberArray()) {
if (xbMember.getProcess() != null) {
if (xbMember.getProcess() instanceof AbstractProcessType) {
final AbstractProcessType xbAbstractProcess = xbMember.getProcess();
AbstractProcess abstractProcess = null;
if (xbAbstractProcess.schemaType() == SystemType.type) {
abstractProcess = parseSystem((SystemType) xbAbstractProcess);
} else if (xbAbstractProcess.schemaType() == ProcessModelType.type) {
abstractProcess = parseProcessModel((ProcessModelType) xbAbstractProcess);
} else if (xbAbstractProcess.schemaType() == ComponentType.type) {
abstractProcess = parseComponent((ComponentType) xbAbstractProcess);
} else {
throw unsupportedMemberProcess(xbMember);
}
sensorML.addMember(abstractProcess);
} else {
throw unsupportedMemberProcess(xbMember);
}
} else {
throw new DecodingException(XmlHelper.getLocalName(xbMember), "The process of a member of the SensorML Document is null (%s)!", xbMember.getProcess());
}
}
sensorML.setXml(xbSensorML.xmlText(getXmlOptions()));
return sensorML;
}
use of net.opengis.sensorML.x101.SensorMLDocument.SensorML.Member in project arctic-sea by 52North.
the class SensorMLDecoderV101 method parseContactListMembers.
private SmlContact parseContactListMembers(final ContactList contactList) {
SmlContactList smlContactList = new SmlContactList();
if (contactList.getMemberArray() != null && contactList.getMemberArray().length > 0) {
for (ContactList.Member member : contactList.getMemberArray()) {
SmlContact thisSmlContact = null;
if (member.getPerson() != null) {
thisSmlContact = parsePerson(member.getPerson());
} else if (member.getResponsibleParty() != null) {
thisSmlContact = parseResponsibleParty(member.getResponsibleParty());
} else if (member.isSetHref()) {
thisSmlContact = new SmlReferencedContact();
thisSmlContact.setHref(member.getHref());
if (member.isSetTitle()) {
thisSmlContact.setTitle(member.getTitle());
}
}
if (thisSmlContact != null) {
if (member.getRole() != null) {
thisSmlContact.setRole(member.getRole());
}
smlContactList.addMember(thisSmlContact);
}
}
}
return smlContactList;
}
use of net.opengis.sensorML.x101.SensorMLDocument.SensorML.Member in project arctic-sea by 52North.
the class SensorMLEncoderV101Test method should_merge_and_encode_multiple_contacts.
@Test
public void should_merge_and_encode_multiple_contacts() throws EncodingException {
final SensorML sensorML = new SensorML();
final System system = new System();
sensorML.addMember(system);
final SmlPerson p1 = createPerson("1");
final SmlResponsibleParty rp1 = createResponsibleParty("1");
system.addContact(p1);
system.addContact(rp1);
final SensorMLDocument xbSensorML = SensorMLDocument.Factory.newInstance();
final SystemType xbSystem = SystemType.Factory.newInstance();
final ContactList xbContactList = xbSystem.addNewContact().addNewContactList();
final Person xbP1 = xbContactList.addNewMember().addNewPerson();
setPersonValues(p1, xbP1);
final ResponsibleParty xbRP1 = xbContactList.addNewMember().addNewResponsibleParty();
setResponsiblePartyValues(rp1, xbRP1);
final XmlObject xbProcess = xbSensorML.addNewSensorML().addNewMember().addNewProcess().set(xbSystem);
XmlHelper.substituteElement(xbProcess, xbSystem);
xbSensorML.getSensorML().setVersion("1.0.1");
sensorML.setXml(xbSensorML.xmlText());
final SystemType xbEncodedSystem = encodeSystem(sensorML);
assertThat(xbEncodedSystem.sizeOfContactArray(), is(1));
assertThat(xbEncodedSystem.getContactArray(0).isSetContactList(), is(true));
assertThat(xbEncodedSystem.getContactArray(0).getContactList().sizeOfMemberArray(), is(2));
boolean personChecked = false, responsiblePartyChecked = false;
for (final Member member : xbEncodedSystem.getContactArray(0).getContactList().getMemberArray()) {
if (member.isSetPerson()) {
checkPerson(p1, member.getPerson());
personChecked = true;
} else if (member.isSetResponsibleParty()) {
checkResponsibleParty(rp1, member.getResponsibleParty());
responsiblePartyChecked = true;
}
}
if (!personChecked) {
fail("sml:Person not found in contact/contactList");
}
if (!responsiblePartyChecked) {
fail("sml:ResponsibleParty not found in contact/ContactList");
}
}
use of net.opengis.sensorML.x101.SensorMLDocument.SensorML.Member in project arctic-sea by 52North.
the class SensorMLEncoderv101 method createComponents.
/**
* Creates the components section of the SensorML description.
*
* @param sosComponents
* SOS SWE representation.
*
* @return encoded sml:components
*
* @throws EncodingException
* if the encoding fails
*/
private Components createComponents(List<SmlComponent> sosComponents) throws EncodingException {
Components components = Components.Factory.newInstance(getXmlOptions());
ComponentList componentList = components.addNewComponentList();
for (SmlComponent sosSMLComponent : sosComponents) {
Component component = componentList.addNewComponent();
if (sosSMLComponent.getName() != null) {
component.setName(sosSMLComponent.getName());
}
if (sosSMLComponent.getHref() != null) {
component.setHref(sosSMLComponent.getHref());
if (sosSMLComponent.getTitle() != null) {
component.setTitle(sosSMLComponent.getTitle());
}
} else if (sosSMLComponent.getProcess() != null) {
XmlObject xmlObject = null;
if (sosSMLComponent.getProcess().isSetXml()) {
try {
xmlObject = XmlObject.Factory.parse(sosSMLComponent.getProcess().getXml());
} catch (XmlException xmle) {
throw new EncodingException("Error while encoding SensorML child procedure description " + "from stored SensorML encoded sensor description with XMLBeans", xmle);
}
} else {
if (sosSMLComponent.getProcess() instanceof SensorML) {
xmlObject = createSensorDescriptionFromObject(((SensorML) sosSMLComponent.getProcess()).getMembers().iterator().next());
} else if (sosSMLComponent.getProcess() instanceof AbstractProcess) {
xmlObject = createSensorDescriptionFromObject(sosSMLComponent.getProcess());
}
}
if (xmlObject != null) {
AbstractProcessType xbProcess = null;
if (xmlObject instanceof SensorMLDocument) {
final SensorMLDocument smlDoc = (SensorMLDocument) xmlObject;
for (final Member member : smlDoc.getSensorML().getMemberArray()) {
xbProcess = member.getProcess();
break;
}
} else if (xmlObject instanceof AbstractProcessType) {
xbProcess = (AbstractProcessType) xmlObject;
}
if (xbProcess == null) {
throw new EncodingException("The sensor type is not supported by this SOS");
}
// TODO add feature/parentProcs/childProcs to component - is
// this already done?
SchemaType schemaType = xbProcess.schemaType();
component.addNewProcess().substitute(getQnameForType(schemaType), schemaType).set(xbProcess);
}
}
}
return components;
}
Aggregations