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

org.unlaxer.jaddress.parser.processor.ZipToAddressResolver Maven / Gradle / Ivy

package org.unlaxer.jaddress.parser.processor;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.unlaxer.jaddress.entity.standard.SingleOrRange階層要素;
import org.unlaxer.jaddress.entity.standard.定義済みRange階層要素;
import org.unlaxer.jaddress.entity.standard.郵便番号;
import org.unlaxer.jaddress.entity.zip.ZipBasedAddress;
import org.unlaxer.jaddress.parser.AddressContext;
import org.unlaxer.jaddress.parser.AddressElement;
import org.unlaxer.jaddress.parser.AddressProcessor;
import org.unlaxer.jaddress.parser.DataAccessContext;
import org.unlaxer.jaddress.parser.EmptyAddressElement;
import org.unlaxer.jaddress.parser.IntermediateResult;
import org.unlaxer.jaddress.parser.ParsingState;
import org.unlaxer.jaddress.parser.ParsingTarget;
import org.unlaxer.jaddress.parser.ResolverResult;
import org.unlaxer.jaddress.parser.ResolverResultKindOfBoolean;
import org.unlaxer.jaddress.parser.TargetStateAndElement;
import org.unlaxer.util.collection.TreeNode;

public class ZipToAddressResolver implements AddressProcessor{

	@Override
	public ParsingState targetState() {
		return ParsingState.ZIPから郵便番号情報取得;
	}

	@Override
	public TargetStateAndElement process(ParsingTarget parsingTarget) {
		
		AddressContext addressContext = parsingTarget.addressContext();
		DataAccessContext dataAccessContext = parsingTarget.dataAccessContext();
		郵便番号 zip = addressContext.zip();
		
		List zipBasedAddresss = 
				dataAccessContext.selectZipBasedAddresssByZip(zip);
		
		TreeNode targetNode = targetNode(parsingTarget);
		
		if(zipBasedAddresss == null || zipBasedAddresss.isEmpty()) {
			return new TargetStateAndElement(
				ParsingState.郵便番号情報取得失敗エラー ,
				SingleOrRange階層要素.of(定義済みRange階層要素.全体));
			
		}else if(zipBasedAddresss.stream()
				.allMatch(address->
					StringUtils.isEmpty(address.townName() )&& 
					address.supplementaryTownNames().isEmpty())){
			
			boolean 町名無しでもOK = zipBasedAddresss.stream()
				.anyMatch(ZipBasedAddress::町名無し次に番地が来る);

			if(町名無しでもOK  ) {
				
				parsingTarget.addResolverResult(
						new ResolverResult(ResolverResultKindOfBoolean.郵便番号辞書町名無し));
				
			}else {
				
				return new TargetStateAndElement(
						ParsingState.郵便番号情報町名取得失敗エラー,
						SingleOrRange階層要素.of(定義済みRange階層要素.全体));
			}
			
		}
			
		parsingTarget.addResolverResult(
				new ResolverResult(ResolverResultKindOfBoolean.郵便番号辞書取得済み));
		
		IntermediateResult intermediateResult = parsingTarget.intermediateResult();
		intermediateResult.setZipBasedAddressesFromZip(zipBasedAddresss);
		
		addressContext.addChild(
			targetNode , 
			new EmptyAddressElement(SingleOrRange階層要素.of(定義済みRange階層要素.都道府県から町名まで))
		);
		return new TargetStateAndElement(
			ParsingState.都道府県から町名までを分割する , 
			SingleOrRange階層要素.of(定義済みRange階層要素.都道府県から町名まで));
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy