@Override public void createTargetItem(PromotionLevel sourcePromotionLevel) { PromotionLevel targetPromotionLevel = structureService.newPromotionLevel( PromotionLevel.of( targetBranch, NameDescription.nd( sourcePromotionLevel.getName(), replacementFn.apply(sourcePromotionLevel.getDescription()) ) ) ); copyPromotionLevelContent(sourcePromotionLevel, targetPromotionLevel); }
@Override protected Optional<Signature> getSignature(PromotionLevel entity) { return Optional.ofNullable(entity.getSignature()); }
@Override public void replaceTargetItem(PromotionLevel sourcePromotionLevel, PromotionLevel targetPromotionLevel) { structureService.savePromotionLevel( targetPromotionLevel.withDescription(replacementFn.apply(sourcePromotionLevel.getDescription())) ); copyPromotionLevelContent(sourcePromotionLevel, targetPromotionLevel); }
protected PromotionLevel toPromotionLevel(ResultSet rs, Function<ID, Branch> branchSupplier) throws SQLException { return PromotionLevel.of( branchSupplier.apply(id(rs, "branchId")), new NameDescription( rs.getString("name"), rs.getString("description") ) ).withId(id(rs)) .withSignature(readSignature(rs)) .withImage(StringUtils.isNotBlank(rs.getString("imagetype"))); }
@Override public PromotionLevel newPromotionLevel(PromotionLevel promotionLevel) { // Creation try { // Order nb = max + 1 Integer orderNbValue = getFirstItem( "SELECT MAX(ORDERNB) FROM promotion_levels WHERE BRANCHID = :branchId", params("branchId", promotionLevel.getBranch().id()), Integer.class ); int orderNb = orderNbValue != null ? orderNbValue + 1 : 0; // Insertion int id = dbCreate( "INSERT INTO PROMOTION_LEVELS(BRANCHID, NAME, DESCRIPTION, ORDERNB, CREATION, CREATOR) VALUES (:branchId, :name, :description, :orderNb, :creation, :creator)", params("name", promotionLevel.getName()) .addValue("description", promotionLevel.getDescription()) .addValue("branchId", promotionLevel.getBranch().id()) .addValue("orderNb", orderNb) .addValue("creation", dateTimeForDB(promotionLevel.getSignature().getTime())) .addValue("creator", promotionLevel.getSignature().getUser().getName()) ); return promotionLevel.withId(id(id)); } catch (DuplicateKeyException ex) { throw new PromotionLevelNameAlreadyDefinedException(promotionLevel.getName()); } }
@Override public void savePromotionLevel(PromotionLevel promotionLevel) { // Update try { getNamedParameterJdbcTemplate().update( "UPDATE PROMOTION_LEVELS SET NAME = :name, DESCRIPTION = :description WHERE ID = :id", params("name", promotionLevel.getName()) .addValue("description", promotionLevel.getDescription()) .addValue("id", promotionLevel.id()) ); } catch (DuplicateKeyException ex) { throw new PromotionLevelNameAlreadyDefinedException(promotionLevel.getName()); } }
@Override public Project getProject() { return getBranch().getProject(); }
@Override public void bulkUpdatePromotionLevels(ID promotionLevelId) { // Description & name PromotionLevel promotionLevel = getPromotionLevel(promotionLevelId); String description = promotionLevel.getDescription(); String name = promotionLevel.getName(); // Image Document image = getPromotionLevelImage(promotionLevelId); // Bulk update getNamedParameterJdbcTemplate().update( "UPDATE PROMOTION_LEVELS SET IMAGETYPE = :type, IMAGEBYTES = :content, DESCRIPTION = :description " + "WHERE ID <> :id AND NAME = :name", params("id", promotionLevelId.getValue()) .addValue("name", name) .addValue("description", description) .addValue("type", Document.isValid(image) ? image.getType() : null) .addValue("content", Document.isValid(image) ? image.getContent() : null) ); }
int promotionLevelId = run.getPromotionLevel().id(); if (index.contains(promotionLevelId)) { index.remove(promotionLevelId);
@Override public String getItemId(PromotionLevel item) { return item.getName(); }
@Override public void deleteTargetItem(PromotionLevel target) { structureService.deletePromotionLevel(target.getId()); }
protected PromotionLevel doCreatePromotionLevel(Branch branch, NameDescription nameDescription) throws Exception { return asUser().with(branch.projectId(), PromotionLevelCreate.class).call(() -> structureService.newPromotionLevel( PromotionLevel.of( branch, nameDescription ) )); }
public EventBuilder withPromotionLevel(PromotionLevel promotionLevel) { return withBranch(promotionLevel.getBranch()).with(promotionLevel); }
@Override public PromotionRun getLastPromotionRunForPromotionLevel(PromotionLevel promotionLevel) { return getFirstItem( "SELECT PR.* FROM PROMOTION_RUNS PR" + " INNER JOIN BUILDS B ON B.ID = PR.BUILDID" + " WHERE PROMOTIONLEVELID = :promotionLevelId" + " ORDER BY B.ID DESC" + " LIMIT 1", params("promotionLevelId", promotionLevel.id()), (rs, rowNum) -> toPromotionRun(rs, this::getBuild, (promotionLevelId) -> promotionLevel) ); }
@Override public String getEntityDisplayName() { return String.format("Promotion run %s/%s/%s/%s", build.getBranch().getProject().getName(), build.getBranch().getName(), build.getName(), promotionLevel.getName() ); }
private void copyPromotionLevelContent(PromotionLevel sourcePromotionLevel, PromotionLevel targetPromotionLevel) { // Copy of the image Document image = structureService.getPromotionLevelImage(sourcePromotionLevel.getId()); if (Document.isValid(image)) { structureService.setPromotionLevelImage(targetPromotionLevel.getId(), image); } // Copy of properties doCopyProperties(sourcePromotionLevel, targetPromotionLevel, replacementFn, syncPolicy); } }
@Override public AutoPromotionProperty copy(ProjectEntity sourceEntity, AutoPromotionProperty value, ProjectEntity targetEntity, Function<String, String> replacementFn) { PromotionLevel targetPromotionLevel = (PromotionLevel) targetEntity; return new AutoPromotionProperty( value.getValidationStamps().stream() .map(vs -> structureService.findValidationStampByName( targetPromotionLevel.getBranch().getProject().getName(), targetPromotionLevel.getBranch().getName(), vs.getName() )) .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList()), value.getInclude(), value.getExclude() ); }
@Override public List<PromotionRun> getPromotionRunsForPromotionLevel(PromotionLevel promotionLevel) { return getNamedParameterJdbcTemplate().query( "SELECT * FROM PROMOTION_RUNS WHERE PROMOTIONLEVELID = :promotionLevelId ORDER BY CREATION DESC, ID DESC", params("promotionLevelId", promotionLevel.id()), (rs, rowNum) -> toPromotionRun(rs, this::getBuild, (id) -> promotionLevel ) ); }
@Override public String render(ProjectEntity projectEntity, Event event) { switch (projectEntity.getProjectEntityType()) { case PROJECT: return ((Project) projectEntity).getName(); case BRANCH: return ((Branch) projectEntity).getName(); case PROMOTION_LEVEL: return ((PromotionLevel) projectEntity).getName(); case VALIDATION_STAMP: return ((ValidationStamp) projectEntity).getName(); case BUILD: return ((Build) projectEntity).getName(); case VALIDATION_RUN: return "#" + ((ValidationRun) projectEntity).getRunOrder(); case PROMOTION_RUN: PromotionRun promotionRun = (PromotionRun) projectEntity; return String.format( "%s->%s", promotionRun.getBuild().getName(), promotionRun.getPromotionLevel().getName() ); default: throw new EventCannotRenderEntityException(event.getEventType().getTemplate(), projectEntity); } }