def __init__(
            self,
            endpoint_url,
            logger,
            object_id,
            omeka_item
        ):
            self._object_builder = \
                Object.builder()\
                    .setCollectionId(object_id.getCollectionId())\
                    .setInstitutionId(object_id.getInstitutionId())
            self.__logger = logger
            self.__object_id = object_id
            self.__omeka_item = omeka_item

            self.agents = []
            self.categories = []
            self.cultural_contexts = []
            self.dc_date_builder = Date.builder().setType(DateType.CREATION)
            self.dc_date_certainty = None
            self.dates = []
            self.descriptions = []
            self.identifiers = []
            self.images = []
            self.inscriptions = []
            self.locations = []
            self.materials = []
            self.measurements = []
            self.relation_builders = []
            self.subjects = []
            self.techniques = []
            self.textrefs = []
            self.titles = []
            self.work_types = []

            self.textrefs.append(
                Textref.builder()
                    .setName(
                        TextrefName.builder()
                            .setText("Omeka item URL")
                            .setType(TextrefNameType.ELECTRONIC)
                            .build()
                    )
                    .setRefid(
                        TextrefRefid.builder()
                            .setHref(Url.parse(str(endpoint_url) + 'items/show/' + str(omeka_item.id)))
                            .setText(str(endpoint_url) + 'items/show/' + str(omeka_item.id))
                            .setType(TextrefRefidType.URI)
                            .build()
                    )
                    .build()
            )
 def _map_omeka_item_element_itm_references(self, object_builder, text):
     object_builder.textrefs.append(
         Textref.builder()
             .setName(
                 TextrefName.builder()
                     .setText(text)
                     .setType(TextrefNameType.CORPUS)
                     .build()
             )
             .setRefid(
                 TextrefRefid.builder()
                     .setText("unparsed")
                     .setType(TextrefRefidType.CITATION)
                     .build()
             )
             .build()
     )
        def build(self):
            if len(self.agents) > 0:
                self._object_builder.setAgents(AgentSet.builder().setElements(ImmutableList.copyOf(self.agents)).build())
            if len(self.categories) > 0:
                self._object_builder.setCategories(ImmutableList.copyOf(set(self.categories)))
            if len(self.cultural_contexts) > 0:
                self._object_builder.setCulturalContexts(CulturalContextSet.builder().setElements(ImmutableList.copyOf(self.cultural_contexts)).build())
            if self.dc_date_builder.getEarliestDate() is not None and self.dc_date_builder.getLatestDate() is not None:
                if self.dc_date_certainty is not None:
                    assert self.dc_date_certainty == 'circa'
                    self.dc_date_builder.setEarliestDate(
                        DateBound.builder(self.dc_date_builder.earliestDate)\
                            .setCirca(True)\
                            .build()
                        )
                    self.dc_date_builder.setLatestDate(
                        DateBound.builder(self.dc_date_builder.latestDate)\
                            .setCirca(True)\
                            .build()
                    )
                self.dates.append(self.dc_date_builder.build())
            if len(self.dates) > 0:
                self._object_builder.setDates(DateSet.builder().setElements(ImmutableList.copyOf(self.dates)).build())
            if len(self.descriptions) > 0:
                description_texts = {}
                description_i = 0
                while description_i < len(self.descriptions):
                    description = self.descriptions[description_i]
                    if description.text in description_texts:
                        del self.descriptions[description_i]
                    else:
                        description_texts[description.text] = None
                        description_i = description_i + 1
                self._object_builder.setDescriptions(DescriptionSet.builder().setElements(ImmutableList.copyOf(self.descriptions)).build())
            for identifier in self.identifiers:
                self.textrefs.append(
                    Textref.builder()
                        .setName(
                            TextrefName.builder()
                                .setText("Identifier")
                                .setType(TextrefNameType.CATALOG)
                                .build()
                        )
                        .setRefid(
                            TextrefRefid.builder()
                                .setText(identifier)
                                .setType(TextrefRefidType.OTHER)
                                .build()
                        )
                        .build()
                )
            if len(self.images) > 0:
                self._object_builder.setImages(ImmutableList.copyOf(self.images))
            if len(self.inscriptions) > 0:
                self._object_builder.setInscriptions(InscriptionSet.builder().setElements(ImmutableList.copyOf(self.inscriptions)).build())
            if len(self.locations) > 0:
                self._object_builder.setLocations(LocationSet.builder().setElements(ImmutableList.copyOf(self.locations)).build())
            if len(self.materials) > 0:
                self._object_builder.setMaterials(MaterialSet.builder().setElements(ImmutableList.copyOf(self.materials)).build())
            if len(self.measurements) > 0:
                self._object_builder.setMeasurements(MeasurementsSet.builder().setElements(ImmutableList.copyOf(self.measurements)).build())
            if len(self.relation_builders) > 0:
                unique_relation_builders_by_text = {}
                for relation_builder in self.relation_builders:
                    assert relation_builder.text is not None
                    existing_relation_builders = unique_relation_builders_by_text.setdefault(relation_builder.text, [])
                    unique = True
                    for existing_relation_builder in existing_relation_builders:
                        if existing_relation_builder.type == relation_builder.type:
                            unique = False
                            break
                    if unique:
                        existing_relation_builders.append(relation_builder)
                    else:
                        self.__logger.warn("item %d has duplicate relation type=%s, text=%s", self.__omeka_item.id, relation_builder.type, relation_builder.text)
                unique_relation_builders = []
                for relation_builders in unique_relation_builders_by_text.values():
                    unique_relation_builders.extend(relation_builders)
                self._object_builder.setRelations(
                        RelationSet.builder()
                            .setElements(ImmutableList.copyOf(relation_builder.build()
                                                for relation_builder in unique_relation_builders))
                            .build())
            if len(self.subjects) > 0:
                self._object_builder.setSubjects(SubjectSet.builder().setElements(ImmutableList.copyOf(self.subjects)).build())
            if len(self.techniques) > 0:
                self._object_builder.setTechniques(TechniqueSet.builder().setElements(ImmutableList.copyOf(self.techniques)).build())
            if len(self.textrefs) > 0:
                self._object_builder.setTextrefs(TextrefSet.builder().setElements(ImmutableList.copyOf(self.textrefs)).build())
            if len(self.titles) > 0:
                self._object_builder.setTitles(TitleSet.builder().setElements(ImmutableList.copyOf(self.titles)).build())
            else:
                raise ValueError('no titles')
            if len(self.work_types) > 0:
                self._object_builder.setWorkTypes(WorkTypeSet.builder().setElements(ImmutableList.copyOf(self.work_types)).build())
            else:
                raise ValueError('no work types')

            return self._object_builder.build()