/*
* Copyright © 2013 Turkcell Teknoloji Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ttech.cordovabuild.domain.application;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ttech.cordovabuild.domain.asset.AssetRef;
import com.ttech.cordovabuild.domain.built.BuiltInfo;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static javax.persistence.GenerationType.SEQUENCE;
@Entity
public class ApplicationBuilt implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7425285261159480420L;
@SequenceGenerator(allocationSize = 50, name = "APP_BUILT_SEQ")
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "APP_BUILT_SEQ")
private Long id;
@Temporal(TemporalType.TIMESTAMP)
private Date startDate;
@Embedded
private ApplicationConfig builtConfig;
@JsonIgnore
@Embedded
private AssetRef builtAssetRef;
@ElementCollection(fetch = FetchType.EAGER)
@Access(AccessType.PROPERTY)
private List<BuiltTarget> builtTargets = new ArrayList<>();
@JsonIgnore
@Version
private int version;
@ManyToOne
@JoinColumn
private Application application;
public ApplicationBuilt() {
this.startDate = new Date();
}
public ApplicationBuilt(Application application) {
this();
this.builtAssetRef = application.getSourceAssetRef();
this.builtConfig = new ApplicationConfig(application.getApplicationConfig());
this.application = application;
for (BuiltType builtType : BuiltType.values()) {
this.builtTargets.add(new BuiltTarget(builtType,this));
}
}
@PostLoad
public void init() {
for (BuiltTarget target : this.builtTargets) {
target.setApplicationBuilt(this);
}
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public List<BuiltTarget> getBuiltTargets() {
return builtTargets;
}
public void setBuiltTargets(List<BuiltTarget> builtTargets) {
this.builtTargets = builtTargets;
}
public ApplicationConfig getBuiltConfig() {
return builtConfig;
}
public void setBuiltConfig(ApplicationConfig builtConfig) {
this.builtConfig = builtConfig;
}
public AssetRef getBuiltAssetRef() {
return builtAssetRef;
}
public void setBuiltAssetRef(AssetRef builtAssetRef) {
this.builtAssetRef = builtAssetRef;
}
public Application getApplication() {
return application;
}
public void setApplication(Application application) {
this.application = application;
}
public ApplicationBuilt update(BuiltInfo builtInfo) {
for (BuiltTarget builtTarget : builtTargets) {
if (builtTarget.getType().equals(builtInfo.getBuiltType())) {
builtTarget.setAssetRef(builtInfo.getAssetRef());
builtTarget.setDuration(builtInfo.getDuration());
builtTarget.setStartDate(builtInfo.getStartDate());
builtTarget.setStatus(builtInfo.getStatus());
}
}
return this;
}
}