/* * RHQ Management Platform * Copyright (C) 2011 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 java.util.ArrayList; 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.DriftConfigurationDefinition.DriftHandlingMode; import org.rhq.core.domain.drift.JPADrift; import org.rhq.core.domain.util.CriteriaUtils; import org.rhq.core.domain.util.PageOrdering; /** * The JPA Drift Server plugin (the RHQ default) implementation of DriftCriteria. * * @author Jay Shaughnessy */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class JPADriftCriteria extends Criteria implements DriftCriteria { private static final long serialVersionUID = 1L; private List<DriftCategory> filterCategories = new ArrayList<DriftCategory>(); private Integer filterChangeSetId; // needs override private Integer filterChangeSetStartVersion; // needs override private Integer filterChangeSetEndVersion; // needs override private Integer filterDriftDefinitionId; // needs override private List<DriftHandlingMode> filterDriftHandlingModes = new ArrayList<DriftHandlingMode>(); // needs override private String filterPath; private String filterDirectory; private List<Integer> filterResourceIds = new ArrayList<Integer>(); private Long filterStartTime; // requires overrides private Long filterEndTime; // requires overrides private boolean fetchChangeSet; private PageOrdering sortCtime; public JPADriftCriteria() { this(null); } public JPADriftCriteria(DriftCriteria driftCriteria) { filterOverrides.put("changeSetId", "changeSet.id = ?"); filterOverrides.put("changeSetStartVersion", "changeSet.version >= ?"); filterOverrides.put("changeSetEndVersion", "changeSet.version <= ?"); filterOverrides.put("categories", "category IN ( ? )"); filterOverrides.put("driftDefinitionId", "changeSet.driftDefinition.id = ?"); filterOverrides.put("driftHandlingModes", "changeSet.driftHandlingMode IN ( ? )"); filterOverrides.put("resourceIds", "changeSet.resource.id IN ( ? )"); filterOverrides.put("startTime", "ctime >= ?"); filterOverrides.put("endTime", "ctime <= ?"); // seed the JPA criteria with anything set in the provided criteria if (null != driftCriteria) { this.fetchChangeSet(driftCriteria.isFetchChangeSet()); this.addFilterId(driftCriteria.getFilterId()); this.addFilterCategories(driftCriteria.getFilterCategories()); this.addFilterChangeSetId(driftCriteria.getFilterChangeSetId()); this.addFilterChangeSetStartVersion(driftCriteria.getFilterChangeSetStartVersion()); this.addFilterChangeSetEndVersion(driftCriteria.getFilterChangeSetEndVersion()); this.addFilterDriftDefinitionId(driftCriteria.getFilterDriftDefinitionId()); this.addFilterDriftHandlingModes(driftCriteria.getFilterDriftHandlingModes()); this.addFilterEndTime(driftCriteria.getFilterEndTime()); this.addFilterId(driftCriteria.getFilterId()); this.addFilterPath(driftCriteria.getFilterPath()); this.addFilterDirectory(driftCriteria.getFilterDirectory()); this.addFilterResourceIds(driftCriteria.getFilterResourceIds()); this.addFilterStartTime(driftCriteria.getFilterStartTime()); this.addSortCtime(driftCriteria.getSortCtime()); this.setStrict(driftCriteria.isStrict()); } } @Override public Class<JPADrift> getPersistentClass() { return JPADrift.class; } @Override public void addFilterId(String filterId) { this.filterId = (null == filterId) ? null : Integer.parseInt(filterId); } @Override public String getFilterId() { return (null == filterId) ? null : filterId.toString(); } @Override public void addFilterCategories(DriftCategory... filterCategories) { this.filterCategories = CriteriaUtils.getListIgnoringNulls(filterCategories); } @Override public DriftCategory[] getFilterCategories() { return filterCategories.toArray(new DriftCategory[filterCategories.size()]); } @Override public void addFilterChangeSetId(String filterChangeSetId) { if (filterChangeSetId != null) { this.filterChangeSetId = Integer.parseInt(filterChangeSetId); } } @Override public String getFilterChangeSetId() { return filterChangeSetId == null ? null : filterChangeSetId.toString(); } @Override public Integer getFilterChangeSetStartVersion() { return filterChangeSetStartVersion; } @Override public void addFilterChangeSetStartVersion(Integer filterChangeSetStartVersion) { this.filterChangeSetStartVersion = filterChangeSetStartVersion; } @Override public Integer getFilterChangeSetEndVersion() { return filterChangeSetEndVersion; } @Override public void addFilterChangeSetEndVersion(Integer filterChangeSetEndVersion) { this.filterChangeSetEndVersion = filterChangeSetEndVersion; } @Override public void addFilterDriftDefinitionId(Integer filterDriftDefinitionId) { this.filterDriftDefinitionId = filterDriftDefinitionId; } @Override public Integer getFilterDriftDefinitionId() { return this.filterDriftDefinitionId; } @Override public void addFilterDriftHandlingModes(DriftHandlingMode... filterDriftHandlingModes) { this.filterDriftHandlingModes = CriteriaUtils.getListIgnoringNulls(filterDriftHandlingModes); } @Override public DriftHandlingMode[] getFilterDriftHandlingModes() { return this.filterDriftHandlingModes.toArray(new DriftHandlingMode[this.filterDriftHandlingModes.size()]); } @Override public void addFilterPath(String filterPath) { this.filterPath = filterPath; } @Override public String getFilterPath() { return filterPath; } @Override public void addFilterDirectory(String filterDirectory) { this.filterDirectory = filterDirectory; } @Override public String getFilterDirectory() { return filterDirectory; } @Override public void addFilterResourceIds(Integer... filterResourceIds) { this.filterResourceIds = CriteriaUtils.getListIgnoringNulls(filterResourceIds); } @Override public Integer[] getFilterResourceIds() { return filterResourceIds.toArray(new Integer[this.filterResourceIds.size()]); } @Override public void addFilterStartTime(Long filterStartTime) { this.filterStartTime = filterStartTime; } @Override public Long getFilterStartTime() { return filterStartTime; } @Override public void addFilterEndTime(Long filterEndTime) { this.filterEndTime = filterEndTime; } @Override public Long getFilterEndTime() { return filterEndTime; } @Override public void fetchChangeSet(boolean fetchChangeSet) { this.fetchChangeSet = fetchChangeSet; } @Override public boolean isFetchChangeSet() { return fetchChangeSet; } @Override public void addSortCtime(PageOrdering sortCtime) { addSortField("ctime"); this.sortCtime = sortCtime; } @Override public PageOrdering getSortCtime() { return sortCtime; } @Override public boolean isSupportsAddSortId() { return false; } @Override public boolean isSupportsAddFilterIds() { return false; } }