/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.core.model; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.OrderColumn; import javax.persistence.Table; import javax.persistence.Transient; import javax.persistence.UniqueConstraint; import javax.persistence.Version; import org.eclipse.jubula.client.core.utils.TrackingUnit; import org.eclipse.persistence.annotations.Index; /** * @author BREDEX GmbH * @created Jun 11, 2007 */ @Entity @Table(name = "PROJECT_PROPERTIES", uniqueConstraints = @UniqueConstraint(columnNames = { "GUID", "MAJOR_NUMBER", "MINOR_NUMBER", "MICRO_NUMBER", "VERSION_QUALIFIER" })) class ProjectPropertiesPO implements IProjectPropertiesPO { /** Persistence (JPA / EclipseLink) OID */ private transient Long m_id = null; /** The ID of the parent project */ private Long m_parentProjectId = null; /** Persistence (JPA / EclipseLink) version id */ private transient Integer m_version = null; /** Set of reused projects */ private Set<IReusedProjectPO> m_usedProjects = new HashSet<IReusedProjectPO>(); /** the container containing the configurations for the teststyle checks */ private ICheckConfContPO m_checkConfCont; /** * <code>m_isModified</code> flag to signal modification of language list * by Persistence (JPA / EclipseLink) */ private transient boolean m_isModified = true; /** information about the used Toolkit (Swing(=default), Swt, Web, ...) */ private String m_toolkit = null; /** The major version number of this project */ private Integer m_majorNumber = null; /** The minor version number for this project */ private Integer m_minorNumber = null; /** The micro version number for this project */ private Integer m_microNumber = null; /** The version for this project */ private String m_versionQualifier = null; /** Indicates whether this project can be reused in other projects */ private boolean m_isReusable = false; /** Indicates whether this project can tracks changes */ private boolean m_isTrackingActivated = false; /** Indicates what detail of a user who made a change is stored for identification */ private String m_trackChangesSignature = null; /** The unit in which time should be measured for storing changes */ private TrackingUnit m_trackChangesUnit = null; /** The timespan of how long changes should be stored */ private Integer m_trackChangesSpan = null; /** */ private String m_markupLanguage = null; /** * Indicates whether this project is protected against undo-able * modifications */ private boolean m_isProtected = false; /** The default of auto-cleanup days for test result details */ private Integer m_testResultCleanupInterval = IProjectPO.CLEANUP_DEFAULT; /** whether to report in case of a failure */ private boolean m_reportOnFailure = false; /** whether to report in case of a success */ private boolean m_reportOnSuccess = false; /** * the connected ALM repository name */ private String m_almRepositoryName = null; /** * the URL of the dashboard */ private String m_dashboardURL = null; /** * list of ALM reporting rules */ private List<IALMReportingRulePO> m_reportingRules = new ArrayList<IALMReportingRulePO>(); /** guid of the corresponding project*/ private String m_guid; /** * For Persistence (JPA / EclipseLink) */ ProjectPropertiesPO() { this(null, 1, 0, 0, null); } /** * Constructor for when major/minor number are known * * @param guid for the corresponding project. * @param majorNumber The major number for the corresponding project. * @param minorNumber The minor number for the corresponding project. * @param microNumber The micro number for the corresponding project. * @param version The version string for the corresponding project. */ ProjectPropertiesPO(String guid, Integer majorNumber, Integer minorNumber, Integer microNumber, String version) { setGuid(guid); setMajorNumber(majorNumber); setMinorNumber(minorNumber); setMicroNumber(microNumber); setVersionQualifier(version); } /** * * @return Returns the id. */ @Id @GeneratedValue public Long getId() { return m_id; } /** * @param id The id to set. */ void setId(Long id) { m_id = id; } /** * * @return Long */ @Version public Integer getVersion() { return m_version; } /** * @param version The version to set. */ @SuppressWarnings("unused") private void setVersion(Integer version) { m_version = version; } /** * {@inheritDoc} */ @Transient public String getName() { return "Project properties"; //$NON-NLS-1$ } /** * {@inheritDoc} */ @Transient public Long getParentProjectId() { return m_parentProjectId; } /** * {@inheritDoc} */ public void setParentProjectId(Long projectId) { m_parentProjectId = projectId; for (IReusedProjectPO reusedProj : getHbmUsedProjects()) { reusedProj.setParentProjectId(projectId); } if (getCheckConfCont() != null) { getCheckConfCont().setParentProjectId(projectId); } for (IALMReportingRulePO rule : getALMReportingRules()) { rule.setParentProjectId(projectId); } } /** * * @return the GUID. */ @Basic @Column(name = "GUID") @Index(name = "PI_NODE_GUID") public String getGuid() { return m_guid; } /** * @param guid The GUID to set. */ private void setGuid(String guid) { m_guid = guid; } /** * @deprecated * only to use by LanguageHelper * @return Returns the isModified. */ @Transient public boolean isModified() { return m_isModified; } /** * @deprecated * only to use by LanguageHelper * @param isModified The isModified to set. */ public void setModified(boolean isModified) { m_isModified = isModified; } /** * {@inheritDoc} */ public void addUsedProject(IReusedProjectPO reusedProject) { reusedProject.setParentProjectId(getParentProjectId()); getHbmUsedProjects().add(reusedProject); } /** * {@inheritDoc} */ public void removeUsedProject(IReusedProjectPO project) { getHbmUsedProjects().remove(project); } /** * * @return Returns <code>true</code> if this project can be reused by other * projects. Otherwise <code>false</code>. */ @Basic @Column(name = "IS_REUSABLE") public boolean getIsReusable() { return m_isReusable; } /** * * @return Returns <code>true</code> if this project can be reused by other * projects. Otherwise <code>false</code>. */ @Basic @Column(name = "IS_TRACKING_CHANGES") public boolean getIsTrackingActivated() { return m_isTrackingActivated; } /** * * @return Returns <code>true</code> if this project is protected. Otherwise * <code>false</code>. */ @Basic @Column(name = "IS_PROTECTED") public boolean getIsProtected() { return m_isProtected; } /** * * {@inheritDoc} */ @Transient public String getToolkit() { return getHbmToolkit(); } /** * only for Persistence (JPA / EclipseLink) * * @return Returns the reporting rules set for success. */ @OneToMany ( fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, targetEntity = ALMReportingRulePO.class) @JoinColumn(name = "FK_PROJECT_PROP", nullable = true) @OrderColumn(name = "IDX_PROJECT_PROP") public List<IALMReportingRulePO> getALMReportingRules() { return m_reportingRules; } /** * @param reportingRules The reporting rules to set. */ public void setALMReportingRules( List<IALMReportingRulePO> reportingRules) { m_reportingRules = reportingRules; } /** * only for Persistence (JPA / EclipseLink) * * @return Returns the usedProjects set. */ @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, targetEntity = ReusedProjectPO.class, fetch = FetchType.EAGER) @JoinColumn(name = "FK_PROJ_PROPERTIES") private Set<IReusedProjectPO> getHbmUsedProjects() { return m_usedProjects; } /** * For Persistence (JPA / EclipseLink) * @param reusedProjects The reusedProjects to set. */ @SuppressWarnings("unused") private void setHbmUsedProjects(Set<IReusedProjectPO> reusedProjects) { m_usedProjects = reusedProjects; } /** * * {@inheritDoc} */ @Transient public Set<IReusedProjectPO> getUsedProjects() { return Collections.unmodifiableSet(getHbmUsedProjects()); } /** * * {@inheritDoc} */ public void setIsReusable(boolean isReusable) { m_isReusable = isReusable; } /** * * {@inheritDoc} */ public void setIsTrackingActivated(boolean isTrackingActivated) { m_isTrackingActivated = isTrackingActivated; } /** * * {@inheritDoc} */ public void setIsProtected(boolean isProtected) { m_isProtected = isProtected; } /** * Sets the toolkit. If th etoolkit has the I18n prefix, it will be removed. * @param toolkit the toolkit */ public void setToolkit(String toolkit) { setHbmToolkit(toolkit); } /** * only for Persistence (JPA / EclipseLink) !!! * * @return the toolkit */ @Basic @Column(name = "TOOLKIT") private String getHbmToolkit() { return m_toolkit; } /** * @param toolkit the toolkit */ private void setHbmToolkit(String toolkit) { m_toolkit = toolkit; } /** * * @return Returns the major version number. */ @Basic @Column(name = "MAJOR_NUMBER") public Integer getMajorNumber() { return m_majorNumber; } /** * * @return Returns the minor version number. */ @Basic @Column(name = "MINOR_NUMBER") public Integer getMinorNumber() { return m_minorNumber; } /** * * @return Returns the major version number. */ @Basic @Column(name = "MICRO_NUMBER") public Integer getMicroNumber() { return m_microNumber; } /** * * @return Returns the minor version number. */ @Basic @Column(name = "VERSION_QUALIFIER") public String getVersionQualifier() { return m_versionQualifier; } /** * @param majorNumber The majorNumber to set. */ private void setMajorNumber(Integer majorNumber) { m_majorNumber = majorNumber; } /** * @param minorNumber The minorNumber to set. */ private void setMinorNumber(Integer minorNumber) { m_minorNumber = minorNumber; } /** * @param microNumber The majorNumber to set. */ private void setMicroNumber(Integer microNumber) { m_microNumber = microNumber; } /** * @param versionQualifier The minorNumber to set. */ private void setVersionQualifier(String versionQualifier) { m_versionQualifier = versionQualifier; } /** * {@inheritDoc} */ public void clearUsedProjects() { getHbmUsedProjects().clear(); } /** * * @return Returns the test result cleanup interval in days */ @Basic @Column(name = "TRD_CLEANUP_INTERVAL") public Integer getTestResultCleanupInterval() { return m_testResultCleanupInterval; } /** * {@inheritDoc} */ public void setTestResultCleanupInterval(Integer noOfDays) { m_testResultCleanupInterval = noOfDays; } /** * {@inheritDoc} */ @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = CheckConfContPO.class) @JoinColumn(name = "CHECK_CONF_CONT", unique = true) public ICheckConfContPO getCheckConfCont() { return m_checkConfCont; } /** * @param checkConfCont the checkConfCont to set */ public void setCheckConfCont(ICheckConfContPO checkConfCont) { m_checkConfCont = checkConfCont; } /** {@inheritDoc} */ @Basic @Column(name = "DASHBOARD_URL", length = MAX_STRING_LENGTH) public String getDashboardURL() { return m_dashboardURL; } /** {@inheritDoc} */ public void setDashboardURL(String dashboardURL) { m_dashboardURL = dashboardURL; } /** {@inheritDoc} */ @Basic @Column(name = "ALM_REPOSITORY_NAME", length = MAX_STRING_LENGTH) public String getALMRepositoryName() { return m_almRepositoryName; } /** {@inheritDoc} */ public void setALMRepositoryName(String almRepositoryName) { m_almRepositoryName = almRepositoryName; } /** {@inheritDoc} */ @Basic @Column(name = "IS_REPORT_ON_SUCCESS") public boolean getIsReportOnSuccess() { return m_reportOnSuccess; } /** {@inheritDoc} */ public void setIsReportOnSuccess(boolean isReportOnSuccess) { m_reportOnSuccess = isReportOnSuccess; } /** {@inheritDoc} */ @Basic @Column(name = "IS_REPORT_ON_FAILURE") public boolean getIsReportOnFailure() { return m_reportOnFailure; } /** {@inheritDoc} */ public void setIsReportOnFailure(boolean isReportOnFailure) { m_reportOnFailure = isReportOnFailure; } /** {@inheritDoc} */ @Basic @Column(name = "TRACK_CHANGES_SIGNATURE") public String getTrackChangesSignature() { return m_trackChangesSignature; } /** {@inheritDoc} */ public void setTrackChangesSignature(String signature) { m_trackChangesSignature = signature; } /** {@inheritDoc} */ @Basic @Column(name = "TRACK_CHANGES_UNIT") public TrackingUnit getTrackChangesUnit() { return m_trackChangesUnit; } /** {@inheritDoc} */ public void setTrackChangesUnit(TrackingUnit unit) { m_trackChangesUnit = unit; } /** {@inheritDoc} */ @Basic @Column(name = "TRACK_CHANGES_SPAN") public Integer getTrackChangesSpan() { return m_trackChangesSpan; } /** {@inheritDoc} */ public void setTrackChangesSpan(Integer span) { m_trackChangesSpan = span; } /** {@inheritDoc} */ public void setMarkupLanguage(String markupLanguage) { m_markupLanguage = markupLanguage; } /** {@inheritDoc} */ @Basic @Column(name = "MARKUP_LANGUAGE") public String getMarkupLanguage() { return m_markupLanguage; } }