package org.ovirt.engine.core.builder; import java.util.Objects; import javax.inject.Inject; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.ArchitectureType; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.MacPool; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dao.ClusterDao; import org.ovirt.engine.core.utils.RandomUtils; import org.springframework.stereotype.Repository; @Repository public class ClusterBuilder extends AbstractBuilder<Cluster, ClusterBuilder> { @Inject private ClusterDao clusterDao; @Inject private MacPoolBuilder macPoolBuilder; private MacPool macPool; public ClusterBuilder id(final Guid clusterId) { object.setId(clusterId); return this; } public ClusterBuilder name(final String name) { object.setName(name); return this; } public ClusterBuilder macPool(final MacPool macPool) { object.setMacPoolId(macPool.getId()); this.macPool = macPool; return this; } @Override protected void prePersist() { populate(); if (StringUtils.isEmpty(object.getName())) { object.setName(RandomUtils.instance().nextString(10)); } if (Objects.isNull(macPool)) { object.setMacPoolId(macPoolBuilder.reset().persist().getId()); } } @Override protected void preBuild() { populate(); } private void populate() { if (Guid.isNullOrEmpty(object.getId())) { object.setId(Guid.newGuid()); } if (object.getCompatibilityVersion() == null) { object.setCompatibilityVersion(Version.getLast()); } if (object.getArchitecture() == null) { object.setArchitecture(ArchitectureType.x86_64); } } @Override public ClusterBuilder reset() { object = new Cluster(); macPool = null; return this; } @Override public ClusterBuilder reset(Cluster object) { this.object = object; return this; } @Override protected Cluster doPersist() { clusterDao.save(object); return clusterDao.get(object.getId()); } }