/* * 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.enterprise.server.plugins.drift.mongodb.entities; import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import com.google.code.morphia.annotations.*; import org.bson.types.ObjectId; import org.rhq.core.domain.drift.DriftChangeSet; import org.rhq.core.domain.drift.DriftChangeSetCategory; import org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode; /** * A change set that is stored in a MongoDB database. The change set along with its entries * are stored as a single document. A change set consists of one or more * {@link MongoDBChangeSetEntry entries}. */ @Entity("changesets") public class MongoDBChangeSet implements DriftChangeSet<MongoDBChangeSetEntry>, Serializable { private static final long serialVersionUID = 1L; /** * The database primary key. */ @Id private ObjectId id = new ObjectId(); /** * The time that the change set was created. */ private Long ctime = System.currentTimeMillis(); /** * Each change set is assigned a version number that is unique across change sets * belonging to a given drift definition (and corresponding resource). */ private int version; private DriftChangeSetCategory category; private int driftDefId; private DriftHandlingMode driftHandlingMode; private int resourceId; private String driftDefName; @Embedded("files") private List<MongoDBChangeSetEntry> entries = new ArrayList<MongoDBChangeSetEntry>(); public ObjectId getObjectId() { return id; } @Override public String getId() { return id.toString(); } @Override public void setId(String id) { this.id = new ObjectId(id); } public void setId(ObjectId id) { this.id = id; } @Override public Long getCtime() { return ctime; } /** * This is here only for testing. * @param ctime The timestamp */ public void setCtime(Long ctime) { this.ctime = ctime; } @Override public int getVersion() { return version; } @Override public void setVersion(int version) { this.version = version; } @Override public DriftChangeSetCategory getCategory() { return category; } @Override public void setCategory(DriftChangeSetCategory category) { this.category = category; } @Override public int getDriftDefinitionId() { return driftDefId; } @Override public void setDriftDefinitionId(int id) { driftDefId = id; } public String getDriftDefinitionName() { return driftDefName; } public void setDriftDefinitionName(String name) { driftDefName = name; } @Override public DriftHandlingMode getDriftHandlingMode() { return this.driftHandlingMode; } @Override public void setDriftHandlingMode(DriftHandlingMode driftHandlingMode) { this.driftHandlingMode = driftHandlingMode; } @Override public int getResourceId() { return resourceId; } public void setResourceId(int id) { resourceId = id; } @Override public Set<MongoDBChangeSetEntry> getDrifts() { return new LinkedHashSet(entries); } public MongoDBChangeSet add(MongoDBChangeSetEntry entry) { entries.add(entry); entry.setIndex(entries.size() - 1); entry.setChangeSet(this); return this; } @Override public void setDrifts(Set<MongoDBChangeSetEntry> drifts) { for (MongoDBChangeSetEntry entry : drifts) { add(entry); } } @PostLoad void initEntries() { for (MongoDBChangeSetEntry entry : entries) { entry.setChangeSet(this); } } }