/*
* RHQ Management Platform
* Copyright (C) 2005-2009 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.core.domain.criteria;
import static org.rhq.core.domain.util.CriteriaUtils.getListIgnoringNulls;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.rhq.core.domain.drift.DriftCategory;
import org.rhq.core.domain.drift.DriftChangeSetCategory;
import org.rhq.core.domain.drift.JPADriftChangeSet;
import org.rhq.core.domain.util.PageOrdering;
/**
* The JPA Drift Server plugin (the RHQ default) implementation of DriftChangeSetCriteria.
*
* @author Jay Shaughnessy
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@SuppressWarnings("unused")
public class JPADriftChangeSetCriteria extends Criteria implements DriftChangeSetCriteria {
private static final long serialVersionUID = 2L;
private Integer filterInitial; // needs override
private Integer filterResourceId; // needs override
private Integer filterDriftDefinitionId; // needs override
private Integer filterVersion;
private Integer filterStartVersion;
private Integer filterEndVersion;
private Long filterCreatedAfter;
private Long filterCreatedBefore;
private DriftChangeSetCategory filterCategory;
private List<DriftCategory> filterDriftCategories; // needs override
private String filterDriftDirectory; // needs override
private String filterDriftPath; // needs override
private Boolean fetchDrifts = false;
private Boolean fetchDriftDefinition = false;
private Boolean fetchInitialDriftSet = false;
private PageOrdering sortVersion;
public JPADriftChangeSetCriteria() {
this(null);
}
public JPADriftChangeSetCriteria(DriftChangeSetCriteria changeSetCriteria) {
filterOverrides.put("initial", "version = 0");
filterOverrides.put("resourceId", "resource.id = ?");
filterOverrides.put("startVersion", "version >= ?");
filterOverrides.put("endVersion", "version <= ?");
filterOverrides.put("createdAfter", "ctime >= ?");
filterOverrides.put("createdBefore", "ctime <= ?");
filterOverrides.put("driftDefinitionId", "driftDefinition.id = ?");
filterOverrides.put("driftCategories", "" //
+ "id IN ( SELECT innerChangeSet.id " //
+ " FROM JPADriftChangeSet innerChangeSet " //
+ " JOIN innerChangeSet.drifts drift " //
+ " WHERE drift.category IN ( ? ) )");
filterOverrides.put("driftDirectory", "" //
+ "id IN ( SELECT innerChangeSet.id " //
+ " FROM JPADriftChangeSet innerChangeSet " //
+ " JOIN innerChangeSet.drifts drift " //
+ " WHERE drift.directory = ? )"); // note, this uses = on purpose, it is always strict equality
filterOverrides.put("driftPath", "" //
+ "id IN ( SELECT innerChangeSet.id " //
+ " FROM JPADriftChangeSet innerChangeSet " //
+ " JOIN innerChangeSet.drifts drift " //
+ " WHERE drift.path like ? )"); // note, this uses 'like' on purpose, it is always substring
if (null != changeSetCriteria) {
this.addFilterId(changeSetCriteria.getFilterId());
this.addFilterCategory(changeSetCriteria.getFilterCategory());
this.addFilterCreatedAfter(changeSetCriteria.getFilterCreatedAfter());
this.addFilterCreatedBefore(changeSetCriteria.getFilterCreatedBefore());
this.addFilterDriftDefinitionId(changeSetCriteria.getFilterDriftDefinitionId());
this.addFilterEndVersion(changeSetCriteria.getFilterEndVersion());
this.addFilterResourceId(changeSetCriteria.getFilterResourceId());
this.addFilterStartVersion(changeSetCriteria.getFilterStartVersion());
this.addFilterVersion(changeSetCriteria.getFilterVersion());
this.addFilterDriftCategories(changeSetCriteria.getFilterDriftCategories());
this.addFilterDriftDirectory(changeSetCriteria.getFilterDriftDirectory());
this.addFilterDriftPath(changeSetCriteria.getFilterDriftPath());
this.addSortVersion(changeSetCriteria.getSortVersion());
this.fetchDrifts(changeSetCriteria.isFetchDrifts());
this.setStrict(changeSetCriteria.isStrict());
}
}
@Override
public Class<JPADriftChangeSet> getPersistentClass() {
return JPADriftChangeSet.class;
}
public void addFilterVersion(Integer filterVersion) {
this.filterVersion = filterVersion;
}
@Override
public void addFilterVersion(String filterVersion) {
if (filterVersion != null) {
this.filterVersion = Integer.parseInt(filterVersion);
}
}
@Override
public String getFilterVersion() {
return filterVersion == null ? null : filterVersion.toString();
}
public void addFilterStartVersion(Integer filterStartVersion) {
this.filterStartVersion = filterStartVersion;
}
@Override
public void addFilterStartVersion(String filterStartVersion) {
if (filterStartVersion != null) {
this.filterStartVersion = Integer.parseInt(filterStartVersion);
}
}
@Override
public String getFilterStartVersion() {
return filterStartVersion == null ? null : filterStartVersion.toString();
}
public void addFilterEndVersion(Integer filterEndVersion) {
this.filterEndVersion = filterEndVersion;
}
@Override
public void addFilterEndVersion(String filterEndVersion) {
if (filterEndVersion != null) {
this.filterEndVersion = Integer.parseInt(filterEndVersion);
}
}
@Override
public String getFilterEndVersion() {
return filterEndVersion == null ? null : filterEndVersion.toString();
}
@Override
public void addFilterCreatedAfter(Long filterCreatedAfter) {
this.filterCreatedAfter = filterCreatedAfter;
}
@Override
public Long getFilterCreatedAfter() {
return filterCreatedAfter;
}
@Override
public void addFilterCreatedBefore(Long filterCreatedBefore) {
this.filterCreatedBefore = filterCreatedBefore;
}
@Override
public Long getFilterCreatedBefore() {
return filterCreatedBefore;
}
@Override
public void addFilterResourceId(Integer filterResourceId) {
this.filterResourceId = filterResourceId;
}
@Override
public Integer getFilterResourceId() {
return filterResourceId;
}
@Override
public void addFilterDriftDefinitionId(Integer filterDriftDefId) {
this.filterDriftDefinitionId = filterDriftDefId;
}
@Override
public Integer getFilterDriftDefinitionId() {
return filterDriftDefinitionId;
}
@Override
public void addFilterCategory(DriftChangeSetCategory filterCategory) {
this.filterCategory = filterCategory;
}
@Override
public DriftChangeSetCategory getFilterCategory() {
return filterCategory;
}
public void addFilterDriftCategories(List<DriftCategory> filterDriftCategories) {
this.filterDriftCategories = filterDriftCategories;
}
@Override
public void addFilterDriftCategories(DriftCategory... filterDriftCategories) {
this.filterDriftCategories = getListIgnoringNulls(filterDriftCategories);
}
@Override
public List<DriftCategory> getFilterDriftCategories() {
return filterDriftCategories;
}
@Override
public void addFilterDriftDirectory(String filterDriftDirectory) {
this.filterDriftDirectory = filterDriftDirectory;
}
@Override
public String getFilterDriftDirectory() {
return this.filterDriftDirectory;
}
@Override
public void addFilterDriftPath(String filterDriftPath) {
this.filterDriftPath = filterDriftPath;
}
@Override
public String getFilterDriftPath() {
return this.filterDriftPath;
}
@Override
public void fetchDrifts(boolean fetchDrifts) {
this.fetchDrifts = fetchDrifts;
}
@Override
public boolean isFetchDrifts() {
return fetchDrifts;
}
public void fetchDriftDefinition(boolean fetchDriftDefinition) {
this.fetchDriftDefinition = fetchDriftDefinition;
}
public boolean isFetchInitialDriftSet() {
return fetchInitialDriftSet;
}
public void fetchInitialDriftSet(boolean fetchInitialDriftSet) {
this.fetchInitialDriftSet = fetchInitialDriftSet;
}
@Override
public void addSortVersion(PageOrdering sortVersion) {
addSortField("version");
this.sortVersion = sortVersion;
}
@Override
public PageOrdering getSortVersion() {
return sortVersion;
}
@Override
public void addFilterId(String filterId) {
this.filterId = (filterId == null) ? null : Integer.parseInt(filterId);
}
@Override
public String getFilterId() {
return (filterId == null) ? null : filterId.toString();
}
@Override
public boolean isSupportsAddSortId() {
return false;
}
@Override
public boolean isSupportsAddFilterIds() {
return false;
}
}