/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.gws3564c.enclosure.grp;
import ru.codeinside.gws.api.ExchangeContext;
import ru.codeinside.gws3564c.DeclarantType;
import ru.grp.*;
import static ru.grp.RequestGRP.Request.RequiredData.RequiredDataSubject.ExtractSubjectRegion;
import static ru.grp.RequestGRP.Request.RequiredData.RequiredDataSubject.ExtractSubjectRegion.Territory;
import static ru.grp.TOrganizationOwner.Names;
/**
* О правах отдельного лица на имеющиеся у него объекты недвижимости
*/
public class SubjectRightsEnclosureBuilder extends EnclosureGRPBuilder {
public SubjectRightsEnclosureBuilder(ExchangeContext ctx) {
super(ctx);
}
@Override
protected RequestGRP.Request.RequiredData createRequiredData() {
final RequestGRP.Request.RequiredData requiredData = new RequestGRP.Request.RequiredData();
final RequestGRP.Request.RequiredData.RequiredDataSubject requiredDataSubject = new RequestGRP.Request.RequiredData.RequiredDataSubject();
final ExtractSubjectRegion extractSubjectRegion = new ExtractSubjectRegion();
extractSubjectRegion.getOwner().add(getOwnerFromContext());
extractSubjectRegion.setTerritory(fillTerritory());
requiredDataSubject.setExtractSubjectRegion(extractSubjectRegion);
requiredData.setRequiredDataSubject(requiredDataSubject);
return requiredData;
}
protected TOwner getOwnerFromContext() {
DeclarantType declarantType = DeclarantType.valueOf(ctx.getStrFromContext("ownerType"));
final TOwner tOwner = new TOwner();
switch (declarantType) {
case GOVERNANCE: {
TGovernanceOwner governance = new TGovernanceOwner();
governance.setEMail(ctx.getStrFromContext("ownerGovernanceEmail"));
governance.setName(ctx.getStrFromContext("ownerGovernanceName"));
governance.setGovernanceCode(ctx.getStrFromContext("ownerGovernanceCode"));
governance.setPhone(ctx.getStrFromContext("ownerGovernancePhone"));
governance.setContactInfo(ctx.getStrFromContext("ownerGovernanceContactInfo"));
governance.setLocation(createLocation("ownerLocation", ""));
governance.setNames(getGovernanceNames());
tOwner.setGovernanceO(governance);
break;
}
case PERSON: {
final TPersonOwner tPersonOwner = new TPersonOwner();
fillPersonOwner(tPersonOwner, "ownerPerson", "");
tPersonOwner.setFIOList(getFioList());
tOwner.setPersonO(tPersonOwner);
// todo обеспечить заполненние предыдущих документов
break;
}
case ORGANISATION:
TOrganizationOwner organization = new TOrganizationOwner();
tOwner.setOrganizationO(organization);
formOrganisation("ownerLegalPerson", organization);
organization.setDocument(null);
organization.setNames(getOrganizationNamesFromContext("ownerLegalPerson"));
organization.setLocation(createLocation("ownerLocation", ""));
//todo обеспечить заполнение предыдущих наименований
break;
default:
throw new IllegalStateException("Owner type is not defined");
}
return tOwner;
}
private Names getOrganizationNamesFromContext(String type) {
Names names = new Names();
names.getName().add(ctx.getStrFromContext(type + "Name"));
return names;
}
private TGovernanceOwner.Names getGovernanceNames() {
TGovernanceOwner.Names names = new TGovernanceOwner.Names();
names.getName().add(ctx.getStrFromContext("ownerGovernanceName"));
return names;
}
TPersonOwner.FIOList getFioList() {
long countFioList = ctx.getLongFromContext("fioList");
if (countFioList == 0) return null; // todo реализовать заполнение
return new TPersonOwner.FIOList();
}
Territory fillTerritory() {
long countRegions = ctx.getLongFromContext("territory");
final Territory territory = new Territory();
if (countRegions == 0) {
territory.setTerritoryRussia(true);
return territory;
}
final Territory.Regions regions = new Territory.Regions();
for (int idx = 1; idx <= countRegions; idx++) {
regions.getRegion().add(ctx.getStrFromContext("territoryCode_" + idx));
}
territory.setRegions(regions);
return territory;
}
}