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

io.dddrive.obj.model.base.ObjPartBase Maven / Gradle / Ivy


package io.dddrive.obj.model.base;

import java.util.List;

import io.dddrive.ddd.model.Part;
import io.dddrive.ddd.model.PartRepository;
import io.dddrive.ddd.model.base.PartBase;
import io.dddrive.ddd.model.enums.CodePartListType;
import io.dddrive.obj.model.Obj;
import io.dddrive.obj.model.ObjPart;
import io.dddrive.obj.model.ObjPartItem;
import io.dddrive.obj.model.ObjPartItemRepository;
import io.dddrive.obj.model.ObjRepository;
import io.dddrive.property.model.EnumSetProperty;
import io.dddrive.property.model.Property;
import io.dddrive.property.model.ReferenceSetProperty;

public abstract class ObjPartBase extends PartBase implements ObjPart {

	protected ObjPartBase(PartRepository repository, O obj, Object state) {
		super(repository, obj, state);
	}

	@SuppressWarnings("unchecked")
	protected ObjRepository getObjRepository() {
		return (ObjRepository) this.getAggregate().getMeta().getRepository();
	}

	@Override
	public void doAssignParts() {
		super.doAssignParts();
		ObjPartItemRepository itemRepository = this.getObjRepository().getItemRepository();
		for (Property property : this.getProperties()) {
			if (property instanceof EnumSetProperty) {
				EnumSetProperty enumSet = (EnumSetProperty) property;
				List partList = itemRepository.getParts(this, enumSet.getPartListType());
				enumSet.loadEnums(partList);
			} else if (property instanceof ReferenceSetProperty) {
				ReferenceSetProperty referenceSet = (ReferenceSetProperty) property;
				List partList = itemRepository.getParts(this, referenceSet.getPartListType());
				referenceSet.loadReferences(partList);
			}
		}
	}

	@Override
	public Part addPart(Property property, CodePartListType partListType) {
		if (property instanceof EnumSetProperty) {
			return this.getObjRepository().getItemRepository().create(this, partListType);
		} else if (property instanceof ReferenceSetProperty) {
			return this.getObjRepository().getItemRepository().create(this, partListType);
		}
		return super.addPart(property, partListType);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy