package org.openlca.io.ilcd.output; import org.openlca.core.model.Actor; import org.openlca.core.model.Version; import org.openlca.ilcd.commons.Classification; import org.openlca.ilcd.commons.DataEntry; import org.openlca.ilcd.commons.LangString; import org.openlca.ilcd.commons.Publication; import org.openlca.ilcd.contacts.AdminInfo; import org.openlca.ilcd.contacts.Contact; import org.openlca.ilcd.contacts.ContactInfo; import org.openlca.ilcd.contacts.DataSetInfo; import org.openlca.ilcd.io.DataStoreException; import org.openlca.ilcd.util.Refs; public class ActorExport { private final ExportConfig config; private Actor actor; private String baseUri; public ActorExport(ExportConfig config) { this.config = config; } public void setBaseUri(String baseUri) { this.baseUri = baseUri; } public Contact run(Actor actor) throws DataStoreException { if (config.store.contains(Contact.class, actor.getRefId())) return config.store.get(Contact.class, actor.getRefId()); this.actor = actor; Contact contact = new Contact(); contact.version = "1.1"; ContactInfo info = new ContactInfo(); contact.contactInfo = info; info.dataSetInfo = makeDataSetInfo(); contact.adminInfo = makeAdminInfo(); config.store.put(contact); this.actor = null; return contact; } private DataSetInfo makeDataSetInfo() { DataSetInfo info = new DataSetInfo(); info.uuid = actor.getRefId(); LangString.set(info.name, actor.getName(), config.lang); info.email = actor.getEmail(); info.telefax = actor.getTelefax(); info.telephone = actor.getTelephone(); info.wwwAddress = actor.getWebsite(); addAddress(info); if (actor.getDescription() != null) { LangString.set(info.description, actor.getDescription(), config.lang); } addClassification(info); return info; } private void addAddress(DataSetInfo dataSetInfo) { String address = actor.getAddress(); if (address == null) return; if (actor.getZipCode() != null) address += ", " + actor.getZipCode(); if (actor.getCity() != null) address += " " + actor.getCity(); LangString.set(dataSetInfo.contactAddress, address, config.lang); } private void addClassification(DataSetInfo dataSetInfo) { if (actor.getCategory() == null) return; CategoryConverter converter = new CategoryConverter(); Classification classification = converter.getClassification( actor.getCategory()); if (classification != null) { dataSetInfo.classifications.add(classification); } } private AdminInfo makeAdminInfo() { AdminInfo info = new AdminInfo(); DataEntry entry = new DataEntry(); info.dataEntry = entry; entry.timeStamp = Out.getTimestamp(actor); entry.formats.add(Refs.ilcd()); addPublication(info); return info; } private void addPublication(AdminInfo info) { Publication pub = new Publication(); info.publication = pub; pub.version = Version.asString(actor.getVersion()); if (baseUri == null) baseUri = "http://openlca.org/ilcd/resource/"; if (!baseUri.endsWith("/")) baseUri += "/"; pub.uri = baseUri + "contacts/" + actor.getRefId(); } }