All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unlaxer.jaddress.parser.MultipleAddressElement Maven / Gradle / Ivy

The newest version!
package org.unlaxer.jaddress.parser;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import org.unlaxer.jaddress.entity.standard.IDHolder;
import org.unlaxer.jaddress.entity.standard.LevelHolder;
import org.unlaxer.jaddress.entity.standard.NameHolder;
import org.unlaxer.jaddress.entity.standard.OffsetHolder;
import org.unlaxer.jaddress.entity.standard.OffsetOfBlock;
import org.unlaxer.jaddress.entity.standard.OffsetOfBuilding;
import org.unlaxer.jaddress.entity.standard.SingleOrRange階層要素;
import org.unlaxer.util.collection.ID;

import io.vavr.control.Either;

public class MultipleAddressElement implements IDHolder , LevelHolder , OffsetHolder , NameHolder{
	
	SingleOrRange階層要素 _階層要素;
	List elements;
	
	public Optional offsetOfBlock = Optional.empty();
	public Optional offsetOfBuilding = Optional.empty();

	public MultipleAddressElement(AddressElement addressElement) {
		super();
		this.elements = new ArrayList<>();
		elements.add(addressElement);
		_階層要素 = addressElement._階層要素;
	}
	
	public List get(){
		return elements;
	}
	
	public void add(AddressElement addressElement) {
		if(false == addressElement.singleOrRange階層要素().equals(_階層要素)) {
			throw new IllegalArgumentException();
		}
		elements.add(addressElement);
	}
	
	public SingleOrRange階層要素 階層要素() {
		return _階層要素;
	}

	@Override
	public String toString() {
		String collect = elements.stream()
				.map(AddressElement::toString)
				.map(x->"'"+x+"'")
				.collect(Collectors.joining(",", "[", "]"));
			return collect;
	}
	
	public List elements(){
		return elements;
	}

	@Override
	public ID id() {
		return _階層要素.id();
	}

	@Override
	public String name() {
		return _階層要素.name();
	}

	@Override
	public int level() {
		return _階層要素.level();
	}
	
	@Override
	public Optional offsetOfBlock() {
		return offsetOfBlock;
	}

	@Override
	public Optional offsetOfBuilding() {
		return offsetOfBuilding;
	}

	@Override
	public void setOffsetOfBlock(OffsetOfBlock offsetOfBlock) {
		this.offsetOfBlock = Optional.of(offsetOfBlock);
	}

	@Override
	public void setOffsetOfBuilding(OffsetOfBuilding offsetOfBuilding) {
		this.offsetOfBuilding= Optional.of(offsetOfBuilding);
	}
	
	public Either, AddressElement> singleOrList(){
		return elements.size() ==1 ?
			Either.right(elements.get(0)):
			Either.left(elements);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy